參考:
http://yanbober.github.io/2015/02/14/android_studio_jni_1/
http://billhoo.blog.51cto.com/2337751/1125559
1、在local.properties文件中加入NDK路徑,如:
ndk.dir=E\:\\as_ndk\\android-ndk-r11b
2、在gradle.properties加入:
android.useDeprecatedNdk=true
3、新建NdkJniUtils:
public class NdkJniUtils {
public native String stringIv();
static {
System.loadLibrary("MyTest"); //defaultConfig.ndk.moduleName
}
}
4、在stringIv這個地方按“ALT+Enter”(eclipse 快捷鍵),出現
xx
后回車,會發現在main下多了jni目錄和一個“MyTest.c”(與so文件名相同)文件。
當然,也可以右鍵main選擇建立jni目錄,
jni目錄
然后在jni下建立建立MyTest.c文件:
C
并在C文件中加入“#include <jni.h>”
5、在app gradle中的defaultConfig節點中加入:
defaultConfig {
...
ndk {
moduleName = "MyTest"
abiFilters "armeabi"
}
}
其中JniTest為.so文件的名字,abiFilters "armeabi"指的是在lib下會建立armeabi文件,設置支持的 SO 庫構架,加多個的話:
abiFilters "armeabi", "armeabi-v7a", "x86"
這樣的話就會在指定的庫架構生成.so文件。
庫結構參考
6、然后點擊
重構gradle
完成后發現.c文件中的#include <jni.h>的jni.h為紅色即可。
7、再在NdkJniUtils 中stringIv這個地方按“ALT+Enter”(eclipse 快捷鍵),出現
xx
后回車,然后在.c文件中就出現了這些代碼:
JNIEXPORT jstringJNICALL
Java_com_ccddy_jnitest_NdkJniUtils_stringIv(JNIEnv
*env,
jobject instance
)
{
// TODO
return (*env)->
NewStringUTF(env, returnValue
);
}
8、把上面的代碼改成這樣:
#include <jni.h>
#include <string.h>
jstring
Java_com_ccddy_jnitest_NdkJniUtils_stringIv(JNIEnv
*env,
jobject instance
)
{
// TODO
return (*env)->
NewStringUTF(env, "返回值"
);
}
9、運行apk,打印NdkJniUtils的stringIv方法的返回值即為“返回值”。
注意:如果ALT+ENTER無效,則可以使用gradle Sync Now導致gradle重建即可。