Android JNI 编程
生活随笔
收集整理的這篇文章主要介紹了
Android JNI 编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JNI函數名稱分為三部分:
JNI函數_的參數也由三部分組成:
?????Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,?jobject thiz )
?????{
??? ?????return (*env)->NewStringUTF(env, "Hello from JNI !");
?????} 編寫make文件: LOCAL_PATH := $(call my-dir) ? ? ? ? ? ? ??//源文件地址,必須在第一行 include $(CLEAR_VARS) ? ? ????????????????????//清楚一些變量,LOCAL_PATH除外 LOCAL_MODULE??? := hello-jni????? ? ? ?????//指定當前編譯模塊的名稱 LOCAL_SRC_FILES := hello-jni.c ? ?????? ??//源文件 include $(BUILD_SHARED_LIBRARY) ? ? ?//將當前模塊編譯為共享鏈接庫,前綴為lib,后綴為.so
最后在Cygwin交叉編譯環境中編譯該文件他就會在根目錄的libs目錄下生成 armeabi/libhello-jni.so文件 把該libs目錄拷貝到Eclipse中的根目錄就可以使用已編寫的本地方法了 代碼: public?class?HelloJni?extends?Activity { ????@Override ????public?void?onCreate(Bundle savedInstanceState) ??? { ????????super.onCreate(savedInstanceState); ??????? TextView? tv =?new?TextView(this); ??????? tv.setText(stringFromJNI()); ??????? setContentView(tv); ??? } ????public?native?String? stringFromJNI(); ????public?native?String? unimplementedStringFromJNI(); ????static?{ ??????? System.loadLibrary("hello-jni"); ??? } }
- 首先是Java關鍵字,供Java虛擬機識別;例如Java_com_example_hellojni_HelloJni_stringFromJNI
- Java:關鍵字
- com_example_hellojni:包名
- HelloJni:文件名稱(原來的名稱為hello_jni)
- stringFromJNI:函數名稱
- 然后是調用者類名稱(全限定的類名,其中用下劃線代替名稱分隔符);
- 最后是對應的方法名稱,各段名稱之間用下劃線分割。
JNI函數_的參數也由三部分組成:
- 首先是JNIEnv *,是一個指向JNI運行環境的指針;
- 第二個參數隨本地方法是靜態還是非靜態而有所不同一一非靜態本地方法的第二個參數是對對象的引用,而靜態本地方法的第二個參數是對其Java類的引用;
- 其余的參數對應通常Java方法的參數,參數類型需要根據一定規則進行映射。
?????Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,?jobject thiz )
?????{
??? ?????return (*env)->NewStringUTF(env, "Hello from JNI !");
?????} 編寫make文件: LOCAL_PATH := $(call my-dir) ? ? ? ? ? ? ??//源文件地址,必須在第一行 include $(CLEAR_VARS) ? ? ????????????????????//清楚一些變量,LOCAL_PATH除外 LOCAL_MODULE??? := hello-jni????? ? ? ?????//指定當前編譯模塊的名稱 LOCAL_SRC_FILES := hello-jni.c ? ?????? ??//源文件 include $(BUILD_SHARED_LIBRARY) ? ? ?//將當前模塊編譯為共享鏈接庫,前綴為lib,后綴為.so
最后在Cygwin交叉編譯環境中編譯該文件他就會在根目錄的libs目錄下生成 armeabi/libhello-jni.so文件 把該libs目錄拷貝到Eclipse中的根目錄就可以使用已編寫的本地方法了 代碼: public?class?HelloJni?extends?Activity { ????@Override ????public?void?onCreate(Bundle savedInstanceState) ??? { ????????super.onCreate(savedInstanceState); ??????? TextView? tv =?new?TextView(this); ??????? tv.setText(stringFromJNI()); ??????? setContentView(tv); ??? } ????public?native?String? stringFromJNI(); ????public?native?String? unimplementedStringFromJNI(); ????static?{ ??????? System.loadLibrary("hello-jni"); ??? } }
轉載于:https://www.cnblogs.com/tcpcg/archive/2012/02/13/2348843.html
總結
以上是生活随笔為你收集整理的Android JNI 编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Photoshop打造怀旧色调美女照片
- 下一篇: EF 4.3 发布