久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android-NDK開發(fā)之第四個例子--用C/C 調(diào)用Java

 techres 2011-04-27

  用C/C++調(diào)用Java的方法我沒有去研究,,也不知道從哪里開始研究,,對Linux我了解到很少,希望有朋友可以給些資料,,我的水平很差,,望大家多多包涵。

  這個例子是別人的代碼,,我忘記從來里弄來的了,,先對原作者表示抱歉。同時代碼也被我修改過,,再次道歉,。

  而此文和別的文章一樣,,只是作為我平時學習積累的驗證。

  1. Android.mk文件:

LOCAL_SRC_FILES參數(shù)用空格隔開

  1. LOCAL_PATH:=$(call my-dir)  
  2. include $(CLEAR_VARS)  
  3. LOCAL_MODULE:=native   
  4. LOCAL_SRC_FILES:=geolo.cpp my_jni.h   
  5. include $(BUILD_SHARED_LIBRARY)  
 

2. geolo.cpp

先用FindClass方法找到java類,,有點類似java的反射用LoadClass

再用CallObjectMethod方法調(diào)用Java類的函數(shù)。

  1. #include "my_jni.h"  
  2. jobject getInstance(JNIEnv* env, jclass obj_class){  
  3.     jmethodID construction_id = env->GetMethodID(obj_class, "<init>""()V");  
  4.     jobject obj = env->NewObject(obj_class, construction_id);  
  5.     return obj;  
  6. }  
  7. JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv* env, jobject thiz){  
  8.    jstring str;  
  9.    jclass java_class = env->FindClass("com/easepal/geolo/CForCall");  
  10.     if (java_class == 0){  
  11.        return env->NewStringUTF("not find class!");  
  12.     }  
  13.    jobject java_obj = getInstance(env, java_class);  
  14.    if (java_obj == 0){  
  15.        return env->NewStringUTF("not find java OBJ!");  
  16.    }  
  17.    jmethodID java_method = env->GetMethodID(java_class, "GetJavaString""()Ljava/lang/String;");  
  18.    if(java_method == 0){  
  19.        return env->NewStringUTF("not find java method!");  
  20.    }  
  21.    str = (jstring)env->CallObjectMethod(java_obj, java_method);  
  22.    return str;  
  23. }  
 

3. my_jni.h

  1. /* DO NOT EDIT THIS FILE - it is machine generated */  
  2. #include <jni.h>  
  3. /* Header for class com_easepal_geolo_CActivityMain */  
  4. #ifndef _Included_com_easepal_geolo_CActivityMain  
  5. #define _Included_com_easepal_geolo_CActivityMain  
  6. #ifdef __cplusplus  
  7. extern "C" {  
  8. #endif  
  9. /* 
  10. * Class:     com_easepal_geolo_CActivityMain 
  11. * Method:    stringFromJNI 
  12. * Signature: ()Ljava/lang/String; 
  13. */  
  14. JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv *, jobject);  
  15. #ifdef __cplusplus  
  16. }  
  17. #endif  
  18. #endif  
 

4. CActivityMain.java

  1. package com.easepal.geolo;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.widget.TextView;  
  5. public class CActivityMain extends Activity {  
  6.     /** Called when the activity is first created. */  
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState){  
  9.         super.onCreate(savedInstanceState);  
  10.         TextView tv = new TextView(this);  
  11.         tv.setText( stringFromJNI("hello") );  
  12.         setContentView(tv);  
  13.     }  
  14.       
  15.       
  16.     static {  
  17.         System.loadLibrary("native");  
  18.     }  
  19.     public native String stringFromJNI(String str);  
  20. }  
 

5. CForCall.java

  1. package com.easepal.geolo;  
  2. public class CForCall{  
  3.    public CForCall(){};  
  4.    //public ~CForCall(){};  
  5.    public String GetJavaString(){  
  6.        String str;  
  7.        str = "123456";  
  8.        return str;  

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多