Android JNI使用(Android Studio)

java native interface (JNI)學習
java和C/C++各有優缺點,有時用C/C++實現更好,所以需要調用native方法
首先下載好NDK
NDK下載
下面步驟:
1:先創建一個類,其中有native方法
(System.loadLibrary("JniTest");JniTest:引入的庫名)


public class MyJNI {

    public static native String getString();

    static {
        System.loadLibrary("JniTest");
    }

}

2,使用javac生成.class文件
根據你的目錄和包名執行下面命令
D:\develop\JniTest>cd D:\develop\JniTest\app\src\main\java\han\jnitest\

D:\develop\JniTest\app\src\main\java\han\jnitest>javac MyJNI.java

如圖你會生成一個class文件

3,使用javah生成.h文件
執行(javah -jni 你的包名加類名)
javah -jni han.jnitest.MyJNI

切換到java目錄(我也不知道為啥,不切換就找不到文件)

所以正確如圖

這個時候就生成了.h文件,我的就在java目錄下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class han_jnitest_MyJNI */
#ifndef_Included_han_jnitest_MyJNI
#define_Included_han_jnitest_MyJNI
#ifdef__cplusplus
extern"C"{
#endif
/*
* Class:    han_jnitest_MyJNI
* Method:    getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_han_jnitest_MyJNI_getString
(JNIEnv *, jclass);
#ifdef__cplusplus
}
#endif
#endif

這個時候我們要對其修改

/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class han_jnitest_MyJNI */
#ifndef_Included_han_jnitest_MyJNI
#define_Included_han_jnitest_MyJNI
#ifdef__cplusplus
extern"C"{
#endif
/*
* Class:    han_jnitest_MyJNI
* Method:    getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_han_jnitest_MyJNI_getString
(JNIEnv *env, jclass jobj){
return(*env)->NewStringUTF(env,"JNI Test");
}
#ifdef__cplusplus
}
#endif
#endif

4,添加配置
main目錄下創建jni目錄
創建一個.c文件名字隨意(我的是JniTest.c)把han_jnitest_MyJNI.h修改后的內容復制進來
再創建一個util.c空文件(沒有會報空,也不知道為啥,好像其他名字也行..)
gradle.properties文件配置

android.useDeprecatedNdk=true

local.properties文件配置ndk路徑(你自己的路徑)

ndk.dir=D\:\\sdk\\ndk\\android-ndk-r10b

build.gradle文件配置

ndk {
//JniTest生成的so名字
moduleName"JniTest"
abiFilters"armeabi","armeabi-v7a","x86"
}

一切都完成之后rebulid project一下

生成的so文件路徑XXXXX\JniTest\app\build\intermediates\ndk\debug\lib

main下創建一個jniLibs目錄 把生成的文件復制然后調用

效果如下

第一次使用簡書添加代碼怪怪的,
有什么疑惑或者不懂的 可在下面留言一起學習哈
如有錯誤也請指出留言謝謝

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容