Android Studio 2.2 NDK入門(mén)(一) 官方DEMO解析

AS 新版本對(duì)NDK 的支持更加友好和方便


跟著我左手右手一個(gè)慢動(dòng)作,開(kāi)始官方的NDK DEMO

step1: 環(huán)境設(shè)置:打開(kāi)AS設(shè)置(ctrl+alt+s或者AS右上角->File->Setting)
NDK setting.png
step2: new project
select c++ support.png
step3: 一路next,最后完成前有個(gè)C++ standard,需要勾選兩個(gè)選項(xiàng):
C++ standard.png
step4: 解析目錄結(jié)構(gòu)

MainActivity.java中已經(jīng)存在了一個(gè)native的函數(shù)public native String stringFromJNI();
該函數(shù)就是一個(gè)用C++實(shí)現(xiàn)的接口,該庫(kù)為默認(rèn)生產(chǎn)的nativa-lib

工程目錄結(jié)構(gòu)中,有兩個(gè)重要的文件夾/package:

工程目錄結(jié)構(gòu).png

CPP文件夾類(lèi)似與之前的jni文件夾,其實(shí)是一個(gè)意思,存放c/c++的文件目錄
CMakeLists.txt的作用和Android.mk類(lèi)似,也類(lèi)似與makefile文件,是Gradle編譯鏈接.so庫(kù)的申明文件,通過(guò)它可以實(shí)現(xiàn)link

native-lib.cpp中實(shí)現(xiàn)了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: 編譯

運(yùn)行之后在模擬器中能看到中間的text顯示Halo,C++

稍微爬個(gè)階

native-lib.cpp中的函數(shù)名稱(chēng)為Java_com_xx_func
實(shí)際上,該命名方式為Java_class_package_name_func:class_package_name對(duì)應(yīng)實(shí)現(xiàn)native類(lèi)的包名,func為函數(shù)名

該命名可以由javah自動(dòng)生成。有兩種方式實(shí)現(xiàn)
1.較笨的方法:進(jìn)入工程目錄app\build\intermediates\classes\debug,使用javah命令:

javah -d jni class.package.ClassName

2.在AS中配置javah

ctrl+alt+s打開(kāi)setting,在Tools下找到External Tools
點(diǎn)擊加號(hào)+添加
其中Parameters,有多種配置方法,可以百度之。反正我試了幾種,均沒(méi)有成功過(guò),直接使用第一種方式
配置好之后,在project樹(shù)中右鍵能看到
javah.png
使用javah.png

簡(jiǎn)單的解析就先這樣。因?yàn)樗接邢?,各位看官如有任何疑?wèn)和建議請(qǐng)啪啪打臉。
下一篇為增量更新的應(yīng)用:http://www.itdecent.cn/p/867403e3eff1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容