Android JNI 使用
使用jni實現Java調用C代碼,步驟:
1,下載ndk,鏈接:http://developer.android.com/tools/sdk/ndk/index.html;解壓 ,
2,如果是windows系統,需要安裝Cygwin工具,這是window下模擬Linux編譯環境的工具(因為Android內核就是Linux);如果windows系統的同學就去找安裝這個工具的教程;
3,如果是Linux系統或者mac系統,就直接配置NDK環境變量(我是mac系統,在這里就介紹mac系統的了),和配置adb環境變量一樣,將ndk解壓路勁加入到環境變量文件中,然后在終端中就可以直接編譯了;
4,創建一個Android project,在.java文件中定義一個native方法:
public native String fromeC();
5,在項目根目錄下創建一個jni文件夾,在這個文件夾下創建一個.c文件,用來實現我們定義的native方法;代碼如下:
#include <jni.h> #include <stdio.h> /* * 把Java的方法跟C的方法做個對應,一定要符合這些命名規則,才能java才能找到對應的c代碼 * type:Java * PackageName:com_baiyou_mp3ecode 這個類所在的包 * ClassName: JNIMp3Encode native方法所在的類 * MethodName: fromC * obj:代表調用C代碼的Java對象 */ jstring Java_com_baiyou_mp3ecode_JNIMp3Encode_fromC (JNIEnv *env, jobject obj) { //c代碼 char* cstr = "hello from c"; return (**env).NewStringUTF(env,cstr); } /* * type:Java * Package:com_baiyou_mp3ecode * Class: JNIMp3Encode * Method: destroy * Signature: ()V */ JNIEXPORT void JNICALL Java_com_baiyou_mp3ecode_JNIMp3Encode_destroy (JNIEnv *env, jobject obj) { lame_close(lame); }
6,在jni目錄下創建Android.mk文件,定義一些規范:代碼如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #編譯后的c可執行性文件叫啥名 LOCAL_MODULE := JNIMp3Encode #需要被編譯的C源文件 LOCAL_SRC_FILES :=JNIMp3Encode.c LOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)
7,打開終端,切換到jni目錄下編譯.c文件,鍵入 ndk-build ;
8,編譯完成之后,在根目錄會生成libs文件夾,里面的armeabi子文件夾中會有JNIMp3Encode.so 庫。
9,在JNIMp3Encode定義了native方法的類中,用靜態代碼塊加入.so類庫:如下:
public native String fromeC();; static{ System.loadLibrary("JNIMp3Encode");//這個名字要和在Android.mk文件中定義的LOCAL_MODULE := JNIMp3Encode這個名字一樣 }
10,然后在其他.java文件中就可以調用fromeC();這個本地方法了;
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!