AS 新版本對NDK 的支持更加友好和方便
跟著我左手右手一個慢動作,開始官方的NDK DEMO
step1: 環境設置:打開AS設置(ctrl+alt+s或者AS右上角->File->Setting)
NDK setting.png
step2: new project
select c++ support.png
step3: 一路next,最后完成前有個C++ standard,需要勾選兩個選項:
C++ standard.png
step4: 解析目錄結構
MainActivity.java中已經存在了一個native的函數public native String stringFromJNI();
該函數就是一個用C++實現的接口,該庫為默認生產的nativa-lib
工程目錄結構中,有兩個重要的文件夾/package:
工程目錄結構.png
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樹中右鍵能看到
javah.png
使用javah.png
簡單的解析就先這樣。因為水平有限,各位看官如有任何疑問和建議請啪啪打臉。
下一篇為增量更新的應用:http://www.lxweimin.com/p/867403e3eff1