参考:
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 快捷键),出现
后回车,会发现在main下多了jni目录和一个“MyTest.c”(与so文件名相同)文件。
当然,也可以右键main选择建立jni目录,
然后在jni下建立建立MyTest.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、然后点击
完成后发现.c文件中的#include <jni.h>的jni.h为红色即可。
7、再在NdkJniUtils 中stringIv这个地方按“ALT+Enter”(eclipse 快捷键),出现
后回车,然后在.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重建即可。