1、什么是NDK?
JNI是為了方便Java調(diào)用C、C++等本地代碼而封裝的一層接口。NDK是一個工具集合,調(diào)用NDK可以很方便的使用JNI。
2、在Android Studio中配置
? ? 1、下載NDK:https://developer.android.com/ndk/downloads/index.html
? ? 2、配置PATH=F:\li_yi\tools\Android\android-ndk-r12b
? ? 3、在AS中關(guān)聯(lián)NDK,ndk.dir=F:\li_yi\tools\Android\android-ndk-r12b

3、NDK開發(fā)
1、新建一個類,增加native方法:
? ? public class NDKTest {
? ? ? ? public native String getTestStr();
? ? }
2、得到.h文件
? ? 2.1、執(zhí)行build---make project,會得到一個class文件
? ? ?(在XXX\app\build\intermediates\classes\debug\com\liyi\jnitest目錄下)。
? ? 2.2、點(diǎn)開AS的Terminal標(biāo)簽,
? ? ? ? 進(jìn)入到XXX\app\build\intermediates\classes\debug目錄下(cd 命令),
? ? ? ? 執(zhí)行javah命令生成h文件:
? ? ? ? ? ? javah -jni com.liyi.jnitest.NDKTest
? ? 2.3、在main目錄下新建一個jni目錄,剪切該文件到改目錄下。
? ? .h文件:
? ? #include"com_liyi_jnitest_NDKTest.h"
? ? JNIEXPORT jstring JNICALL Java_com_liyi_jnitest_NDKTest_getTestStr
? ? (JNIEnv *env,jobject obj){
? ? return(*env)->NewStringUTF(env,
? ? ? ? "Java_com_liyi_jnitest_NDKTest_getTestStr!");
? ? }
3、新建一個c文件,實(shí)現(xiàn)在DNKTest中定義的native方法
? ? #include "com_liyi_jnitest_NDKTest.h"
? ? JNIEXPORT jstring JNICALL Java_com_liyi_jnitest_NDKTest_getTestStr
? ? (JNIEnv *env, jobject obj){
? ? return (*env)->NewStringUTF(env,
? ? ? ? "Java_com_liyi_jnitest_NDKTest_getTestStr!");
? ? }
4、在app module目錄下的build.gradle中設(shè)置庫文件名(生成的so文件名)
? ? defaultConfig {
? ? ......
? ? ndk{
? ? moduleName "NDKTest"? ? ? ? //生成的so名字
? ? //輸出指定三種abi體系結(jié)構(gòu)下的so庫。目前可有可無。
? ? abiFilters "armeabi", "armeabi-v7a", "x86" ?
? ? }
5、在NDKTest中,靜態(tài)初始化load代碼,
? ? static {
? ? ? ? System.loadLibrary("NativeExample");?
? ? }
6、打開Project的gradle.properties文件,添加
? ?? ? ?android.useDeprecatedNdk=true
7、同步操作:
? ? Tools->Android->Sync Project with Gradle Files
8、生成SO文件:Build->Rebuild Project
? ? 在項(xiàng)目的app\build\intermediates\ndk\debug\lib路徑下生成SO文件
9、使用生成SO文件:
? ? 在jnitest\src\main下新建文件夾jniLibs,并將生成的SO文件拷貝到該文件夾下。
代碼:
http://download.csdn.net/detail/le_shuo/9591352
參考: