Android Studio進行JNI開發

第一步:新建一個java類,比如我新建MyJNI.java,並且在裏面加載項目的so庫,比如我的項目名字爲JNITest,就loadLibrary("JNITest"),
並且定義自己要使用的方法

public class MyJNI {

    //加載so庫
    static {
        System.loadLibrary("JNITest");
    }

    //需要在Activity中用到的方法
    public  static native String printHello();
}

第二步:使用javac命令生成MyJNI的class文件:javac MyJNI.java

第三步:生成.h文件:打開命令行跳轉到:項目的根目錄->app->src->main->java,然後輸入 javah -jni 你的類的包名.類名,比如我的是:
javah -jni com.example.ll.jnitest.MyJNI,成功後會app->src->main->java下面生成一個.h文件,比如我的是:
com_example_ll_jnitest.MyJNI.h

第四步:在app->src->main下面新建文件夾jni,然後在裏面新建c/c++文件,比如我新建Test.c文件,然後把上一步生成的.h文件裏面的內容全部
複製到裏面並且實現裏面的方法,我的是:


/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_lloydfinch_rxjavatest_MyJNI */

#ifndef _Included_com_example_lloydfinch_rxjavatest_MyJNI
#define _Included_com_example_lloydfinch_rxjavatest_MyJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_lloydfinch_rxjavatest_MyJNI
 * Method:    printHello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_lloydfinch_rxjavatest_MyJNI_printHello
        (JNIEnv *env, jclass jobj){
    
    return (*env)->NewStringUTF(env,"JNI Test!");

}

#ifdef __cplusplus
}
#endif
#endif


第五步:在jni文件夾下新建一個空白的util.c文件

第六步:配置環境,在local.properties文件中設置ndk的路徑,比如我的是:
ndk.dir=/Users/lloydfinch/venn/soft/sdk/android-sdk-macosx/ndk-bundle,然後在app下面的build.gradle裏面的
defaultConfig裏面添加:

ndk {
    moduleName "JNITest"
    ldLibs "log", "z", "m"
    abiFilters "armeabi", "armeabi-v7a", "x86"
}
然後在gradle.properties文件的最後一行添加:
android.useDeprecatedNdk=true 即可

第七步:生成so文件:rebuild一下你的項目,即可在 app\build\intermediates\ndk\debug\lib下面生成一堆文件

第八步:配置和使用,在app->src->main->java下面新建文件夾jniLIB,然後將上一步生成的so文件全部複製到此處,然後在我們的Activity裏面
就可以直接調用第一步的java類裏面聲明的方法了:String str = MyJNI.printHello();



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章