NDK開發(fā)流程
1.安裝NDK
下載完成后
2.配置
然后你會在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文件:
然后我們在此
然后我們開始生成.h文件衫生,通過Terminal終端或者直接ALT+F12
然后在命令行中;
先進入工程main目錄下
輸入自己的Native.class文件的絕對路徑
javah -d jni -classpath class路徑 包名+類名
例如:
javah -d jni -classpath D:\StudioSpace\JNITest\app\build\intermediates\classes\debug demo.pingkoko.cn.jnitest.NativeUtils
注意debug后面要留空格
成功之后會在main目錄下自動創(chuàng)建jni文件夾以及生成的.h文件,.h文件不需要修改
接著我們要創(chuàng)建一個.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,"這是我測試的");
}
最后在build.gradle defaultConfig里面添加NDK配置:
//ndk編譯生成.so文件
ndk { moduleName "test"
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
根目錄下添加so庫目錄:
sourceSets {
main {
//你的源碼目錄
jniLibs.srcDirs 'src/main/libs'
jni.srcDirs = [] }
}
如圖:
我們來運行看下罪针;
so庫所在的路徑:
最后:C文件里面的返回類型是根據(jù)Native里面的返回值,如果java返回int,那么c里面就是jint具體可以自行搜索JNI語法黄伊。