Android Studio NDK初步开发总结

2016-08-31  本文已影响77人  聪聪的豆芽

参考:
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重建即可。

上一篇下一篇

猜你喜欢

热点阅读