AS 新版本对NDK 的支持更加友好和方便
跟着我左手右手一个慢动作,开始官方的NDK DEMO
step1: 环境设置:打开AS设置(ctrl+alt+s或者AS右上角->File->Setting)
step2: new project
step3: 一路next,最后完成前有个C++ standard,需要勾选两个选项:
step4: 解析目录结构
MainActivity.java中已经存在了一个native的函数public native String stringFromJNI();
该函数就是一个用C++实现的接口,该库为默认生产的nativa-lib
工程目录结构中,有两个重要的文件夹/package:
CPP文件夹类似与之前的jni文件夹,其实是一个意思,存放c/c++的文件目录
CMakeLists.txt的作用和Android.mk类似,也类似与makefile文件,是Gradle编译链接.so库的申明文件,通过它可以实现link
native-lib.cpp中实现了public native String stringFromJNI();
具体为:
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_mobaolibo_jni_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Halo,C++";
return env->NewStringUTF(hello.c_str());
}
step5: 编译
运行之后在模拟器中能看到中间的text显示Halo,C++
稍微爬个阶
native-lib.cpp中的函数名称为Java_com_xx_func
实际上,该命名方式为Java_class_package_name_func:class_package_name对应实现native类的包名,func为函数名
该命名可以由javah自动生成。有两种方式实现
1.较笨的方法:进入工程目录app\build\intermediates\classes\debug,使用javah命令:
javah -d jni class.package.ClassName
2.在AS中配置javah
ctrl+alt+s打开setting,在Tools下找到External Tools
点击加号+添加
其中Parameters,有多种配置方法,可以百度之。反正我试了几种,均没有成功过,直接使用第一种方式
配置好之后,在project树中右键能看到
简单的解析就先这样。因为水平有限,各位看官如有任何疑问和建议请啪啪打脸。
下一篇为增量更新的应用:http://www.jianshu.com/p/867403e3eff1