NDK開(kāi)發(fā)流程
1.安裝NDK

下載完成后

2.配置
然后你會(huì)在local.properties文件中看到(或者自己添加):

還有g(shù)radle.porperties里必須添加
android.useDeprecatedNdk=true
2.Java本地調(diào)用
public class NativeUtils {
static { System.loadLibrary("hello");
}
//java調(diào)C中的方法都需要用native聲明且方法名必須和c的方法名一樣
public native String getStringFromNative();}
繼續(xù)如下 Make Project編譯成class文件:

然后我們?cè)诖?/p>

然后我們開(kāi)始生成.h文件,通過(guò)Terminal終端或者直接ALT+F12

然后在命令行中;
先進(jìn)入工程main目錄下
輸入自己的Native.class文件的絕對(duì)路徑
javah -d jni -classpath class路徑 包名+類名
例如:
javah -d jni -classpath D:\StudioSpace\JNITest\app\build\intermediates\classes\debug demo.pingkoko.cn.jnitest.NativeUtils
注意debug后面要留空格

成功之后會(huì)在main目錄下自動(dòng)創(chuàng)建jni文件夾以及生成的.h文件,.h文件不需要修改

接著我們要?jiǎng)?chuàng)建一個(gè).c文件,命名必須和loadLibrary()里面參數(shù)一樣 如下圖:

c文件添加,必須要導(dǎo)入頭文件.h
include <demo_pingkoko_cn_jnitest_NativeUtils.h>
JNIEXPORT jstring JNICALL Java_demo_pingkoko_cn_jnitest_NativeUtils_getStringFromNative
(JNIEnv , jobject){
return (env)->newStringUTF(env,"這是我測(cè)試的");
}

最后在build.gradle defaultConfig里面添加NDK配置:
//ndk編譯生成.so文件
ndk { moduleName "test"
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
根目錄下添加so庫(kù)目錄:
sourceSets {
main {
//你的源碼目錄
jniLibs.srcDirs 'src/main/libs'
jni.srcDirs = [] }
}
如圖:

我們來(lái)運(yùn)行看下;


so庫(kù)所在的路徑:

最后:C文件里面的返回類型是根據(jù)Native里面的返回值,如果java返回int,那么c里面就是jint具體可以自行搜索JNI語(yǔ)法。