Android Studio2.2 CMAKE高效NDK開(kāi)發(fā)
分類(lèi): 轉(zhuǎn)自:http://www./pro/html/201611/76734.html前言
之前,每次需要邊寫(xiě)C++代碼的時(shí)候,我的內(nèi)心都是拒絕的。 工具安裝
Android Studio升級(jí)到2.2之后,我們可以先配置好NDK開(kāi)發(fā)的一些所需工具,如圖,在SDK Tools中勾選安裝CMake、LLDB、NDK。
Android Studio自帶DEMO了解CMAKE
Android Studio升級(jí)到2.2版本之后,在創(chuàng)建新的project時(shí),界面上多了一個(gè)Include C++ Support的選項(xiàng)。勾選它之后將會(huì)創(chuàng)建一個(gè)默認(rèn)的C++與JAVA混編的Demo程序。就讓我們先來(lái)看看這個(gè)官方標(biāo)準(zhǔn)Demo吧。
File -> New -> New Project,在如下界面中勾選Include C++ Support,然后一路 Next,直到 Finish 為止即可。 Gradle中也有兩處不同: java代碼:
從native-lib.cpp的代碼中我們能看到它使用的是靜態(tài)注冊(cè)的方式,動(dòng)態(tài)注冊(cè)的方式代碼同傳統(tǒng)JNI。
CMakeLists.txt文件中我們需要注意的是下面這三個(gè)地方。兩個(gè)library的名字(需一致)以及一個(gè)cpp文件的路徑,彼此需要對(duì)應(yīng)一致,當(dāng)我們自己定義library以及自己創(chuàng)建cpp文件時(shí)需要對(duì)應(yīng)修改。 運(yùn)行代碼,就能看到效果,調(diào)用了C++方法在界面上顯示了Hello from C++字符串。這就是CMake方式進(jìn)行NDK開(kāi)發(fā)的Demo。
但是我個(gè)人目前更關(guān)注的問(wèn)題是C++代碼自動(dòng)補(bǔ)全提示的功能,當(dāng)在cpp文件中寫(xiě)代碼時(shí),里面不再是一大片的紅色,輸入若干個(gè)字母的時(shí)候,也能給出提示了,簡(jiǎn)直叼渣天,至于原因…我就不清楚了,為什么在這里就有這個(gè)強(qiáng)大的功能了呢?哪位大神能解釋下… CMake編譯so文件
在Android Studio的Terminal中輸入cmake,會(huì)提示:
需要在下載配置好CMake的環(huán)境變量,若沒(méi)這個(gè)問(wèn)題可跳過(guò)這個(gè)步驟。在如下網(wǎng)址中下載好對(duì)應(yīng)的文件: 下載zip包后,解壓縮。然后將cmake.exe所在的路徑,添加到path環(huán)境變量中。cmake就成為有效命令了。 在CMakeLists.txt文件上級(jí)目錄下執(zhí)行cmake .命令,報(bào)錯(cuò),暫未解決:
待完成 CMake和傳統(tǒng) JNI在目錄結(jié)構(gòu)和配置文件上的區(qū)別
現(xiàn)在我們有了CMake和傳統(tǒng)JNI兩種開(kāi)發(fā)NDK的方法,它們?cè)谀夸浗Y(jié)構(gòu)和Gradle上有所區(qū)別,下面我們將分別介紹目錄區(qū)別和Gradle配置的區(qū)別。 這兩種方式在目錄上的區(qū)別就是兩點(diǎn): 二、Gradle CMake 事實(shí)上,我們?cè)谑褂脗鹘y(tǒng)JNI方式的時(shí)候,上面的兩處地方我們都省略了,也不會(huì)造成什么異常(若Android.mk存放位置在其他地方則需要配置)。CMake方式中第一處也可省略,但是第二處不能省略(同樣,位置路徑要寫(xiě)對(duì)),因?yàn)闆](méi)有它將無(wú)法Build生成.externalNativeBuild文件夾。 另外,傳統(tǒng)JNI開(kāi)發(fā)還需要在項(xiàng)目根目錄下的gradle.properties文件中配置
否則Build項(xiàng)目的時(shí)候會(huì)報(bào)錯(cuò)。 CMake的優(yōu)勢(shì)
可以直接的在C/C++代碼中加入斷點(diǎn),進(jìn)行調(diào)試 java引用的C/C++中的方法,可以直接ctrl+左鍵進(jìn)入 對(duì)于include的頭文件或者庫(kù),也可以直接進(jìn)入 不需要配置命令行操作,手動(dòng)的生成頭文件,不需要配置android.useDeprecatedNdk=true屬性 普通Android項(xiàng)目轉(zhuǎn)NDK開(kāi)發(fā)項(xiàng)目
我們之前說(shuō)了,在創(chuàng)建新project時(shí)若勾選了Include C++ Support選項(xiàng)(需Android Studio版本不低于2.2),則該項(xiàng)目就已經(jīng)是一個(gè)NDK開(kāi)發(fā)項(xiàng)目了。那么,若項(xiàng)目已經(jīng)存在,該如何再轉(zhuǎn)為NDK開(kāi)發(fā)項(xiàng)目呢?
傳統(tǒng)JNI方式,在NDK開(kāi)發(fā) 從入門(mén)到放棄(一:基本流程入門(mén)了解)中我們了解過(guò): 新建jni目錄,寫(xiě)好C/C++代碼。靜態(tài)注冊(cè)JNI時(shí)我們使用了javah -jni對(duì)JAVA類(lèi)進(jìn)行操作自動(dòng)生成了jni目錄以及對(duì)應(yīng)的頭文件(事實(shí)上,當(dāng)我們有一定經(jīng)驗(yàn)后可以自己寫(xiě),而不再需要使用該輔助命令來(lái)保證不寫(xiě)錯(cuò),另外動(dòng)態(tài)注冊(cè)也是一個(gè)很值得提倡的方式),然后根據(jù)頭文件寫(xiě)了C/C++代碼。但在動(dòng)態(tài)注冊(cè)JNI時(shí)我們可以自己先創(chuàng)建好jni目錄且寫(xiě)好C/C++代碼。 在jni目錄下創(chuàng)建且配置好Android.mk和Application.mk兩個(gè)文件。 build.gradle文件中根據(jù)情況進(jìn)行配置,可不進(jìn)行配置使用默認(rèn)值。 通過(guò)ndk-build操作,我們能得到對(duì)應(yīng)的so文件,放置在相應(yīng)位置,java代碼中即可調(diào)用C/C++代碼,運(yùn)行程序。回顧前面提到的CMake方式的NDK開(kāi)發(fā),我們得到如下步驟: 新建cpp目錄,寫(xiě)好C/C++代碼。 創(chuàng)建且配置CMakeLists.txt文件。 build.gradle文件中根據(jù)情況進(jìn)行配置,CMakeLists.txt文件的路徑必須配置。 java代碼中即可調(diào)用C/C++代碼,運(yùn)行程序。 project的build.gradle文件中,gradle版本不能低于2.2,否則會(huì)報(bào)錯(cuò)。
|
|
來(lái)自: 點(diǎn)點(diǎn)滴滴 > 《android》