前言:Android Studio 推出 2.2 之后 ,解鎖一個 NDK 開發(fā)新姿勢 : cMake ;跟傳統(tǒng)的(Android Studio 2.2 之前)有很多大的不同.
首先來比較一下兩者的目錄結構:
傳統(tǒng)方式:

cMake 方式:

結構上還是有略微的差別的 ,接下來進入主題 。
1、環(huán)境搭建
這就不多說了,照著傳統(tǒng)方式做,http://m.itdecent.cn/p/e7c2c63fa70e
另外,需要下載如下圖這兩個工具,

在創(chuàng)建項目的時候,記得將此處打上勾,其他默認就行;

然后 Android Studio 就會自動給你生成 jni demo;

2、 拓展
2.1 自定義方法 :
比如你要自定義個 getBytes() 方法 ,直接聲明這個方法,然后 利用快捷鍵 Alt+Enter 彈出提示,在 native-lib.cpp 中創(chuàng)建該方法(當然也可以自己按照命名方式自己去寫)。如下圖

在 native-lib.cpp 中聲明后記得在方法名的上面一行添加 extern"C",否則執(zhí)行后會找不到該方法。

注 :如要修改 byte 數(shù)組里面的值 , 需要如上圖所示 ,通過轉(zhuǎn)換修改再轉(zhuǎn)換回來;因為在這里 java 基本數(shù)據(jù)類型都通過 <jni.h> 轉(zhuǎn)換了,具體可以點擊進入 jni.h 里面查看源碼

如果要聲明一個新的 byte[] ,獲取數(shù)組的長度,如下圖

2.2 debug
直接在 .cpp 文件里面加斷點 ; debug 運行就好了 ;
2.3 修改 so 庫名字
第一步,將 cpp 文件夾下的文件名 修改
第二步,將此句 System.loadLibrary("native-lib"); 的名字修改
第三步,將 CMakeLists.txt 文件里面所有 "native-lib" 的字段修改
然后先 Clean Project ,再重新編譯一下項目( Ctrl + F9)

2.4 導出 so 文件
編譯之后再如下圖路徑可以找到編譯后的 so 文件:

這里面有默認 7 中架構的 so 庫; 如果你不需要生成那么多 ,可以在
build.gradle 配置 ;

Clean Project , 再重新編譯 ,就只生成你配置的那幾種了 ;
補充 : 在現(xiàn)有項目中添加 C/C++
分三步走:
創(chuàng)建新源文件(.cpp / .c)
參考新建項目的方式在 src/main 路徑下創(chuàng)建 cpp 文件夾 ; (也可在其他目錄下創(chuàng)建,在第二點會配置這個路徑);
在 cpp 文件夾下創(chuàng)建你的 .cpp / .c 源文件 ;-
創(chuàng)建 CMake 構建腳本
在應用模塊下 new 一個 file 文件,命名為 CMakeLists.txt 即可。
內(nèi)容可直接復制新建項目中生成的,注意將下圖 1,3 點改為你自己定義的 moduleName , 第 2 點改為你剛剛創(chuàng)建源文件的路徑
asImage.png 在 Gradle 關聯(lián)到原生庫
右鍵點擊你要關聯(lián)到原生庫的模塊(本文中直接右鍵 cpp 文件夾), 并從菜單中選擇 Link C++ Project with Gradle; BuildSystem 選擇 CMake,projectpath 就是 CMakeLists.txt 文件的路徑。點擊 ok 完成。
你會在應用模塊的 build.gradle 文件中 android 模塊中出現(xiàn)了 如下代碼(當然也可以手動配置)
externalNativeBuild {
cmake {
path 'CMakeLists.txt'
}
}
到這一步為止就已經(jīng)配置好了 ;
總結 :比起以往傳統(tǒng)的方式, 用起 cMake 是要簡單方便的多 ,特別是聲明方法跟 debug ;
以往傳統(tǒng)的方式 : http://m.itdecent.cn/p/e7c2c63fa70e
