[Android Studio]Native開發配置
本文整理了Android Studio進行Native開發的四種配置方法。
使用Android Studio進行native開發需要先進行一些配置。Android Studio3如果添加c++支持,默認是使用cmake進行構建的。但是一些舊的工程是用ndk-build構建的。因此還是可能需要了解如何配置使用Android.mk。注意,如果非必須,不推薦使用Android Studio+ndk-build來構建,因為這樣構建源碼後,是無法使用方法跳轉、方法提示等功能的!如果要改代碼,就等於文本編輯器寫代碼,只不過會幫你自動構建下。那還不如不費勁直接自己在源碼路徑下運行ndk-build呢。想反cmake是支持這些的,因此更有助於提高開發效率。文章最後提供了eclipse使用ndk-build的方法,如有需要可以參考。
使用cmake構建的配置方法
方法一
- 新建project,選中在第一個新建頁面下的「include c++ support」選項。這樣生成的project的默認model app自動支持c++。提供生成CMakeList.txt、樣例cpp、gradle配置。其中CMakeList.txt中有詳細的注釋和樣例,很適合從0開始編寫c++代碼。缺點是必須通過新建project來實現這一切。如果在建立project的時候沒有選擇「include c++ support」或者想建立app外第二個c++模塊,就沒有辦法這麼方便地生成樣例文件了。
方法二
- 準備一個正確編寫好的CMakeList.txt。
- 新建project,選中在第一個新建頁面下的「include c++ support」選項。project必須支持c++。
- 新建一個模塊,將上述CMakeList.txt放置在模塊根目錄下,並依照CMakeList.txt的內容正確放置源文件。
- 在模塊名上右鍵Link C++ Project with Gradle(如果已link或project不支持c++,則不會出現此選項)。選擇cmake,並在下方路徑欄中填寫CMakeList.txt的路徑。然後確認,處理完畢後會發現模塊gradle文件上,在android{}下面多出了圖1中代碼:
- rebuild下以構建so。注意只有NDK r12以上支持cmake。由於目標是構建apk,因此so作為中間變數放置在.uildintermediatescmakedebugobj[cpu指令集]路徑下。
使用ndk-build構建的配置方法
方法一
- 準備一個正確編寫好的Android.mk。如需Application.mk,需和Android.mk在同一路徑下。
- 新建project,選中在第一個新建頁面下的「include c++ support」選項。project必須支持c++。
- 新建一個模塊,建好後模塊名上右鍵Link C++ Project with Gradle(如果已link或project不支持c++,則不會出現此選項)。選擇ndk-build,並在下方路徑欄中填寫Android.mk的路徑。然後確認,處理完畢後會發現模塊gradle文件上,在android{}下面多出了圖2中代碼:
並且可以發現main下面多出了cpp文件夾,且裡面按照Android.mk中的配置和路徑,自動整理出了模塊及其對應的源文件,如圖3所示。不過這些都是「邏輯」上的展示,實際進入main,是沒有cpp和下面的文件的。點擊cpp下面的文件,是可以打開編輯的,但注意編輯的是源文件。
- rebuild一下來生成so。這個方法是以生成apk為目標的,所以so等是作為中間文件放在.uildintermediates
dkBuilddebugobjlocal[cpu指令集]這個路徑下的。
方法二
- 準備一個正確編寫好的Android.mk。
- 新建一個模塊,模塊main文件右鍵->New->Folder->JNI Folder建立一個jni文件夾。
- 在模塊的gradle中添加如下內容:
import org.apache.tools.ant.taskdefs.condition.Os
...
android {
...
sourceSets.main {
jniLibs.srcDir src/main/libs //設置生成的so的存放路徑
jni.srcDirs = [] //禁用gradlew自己的Android.mk
}
//調用ndk-build腳本
task ndkBuild(type: Exec) {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine ndk-build.cmd, -C, file(src/main/jni).absolutePath
} else {
commandLine ndk-build, -C, file(src/main/jni).absolutePath
}
}
//執行構建任務
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
}
3. 在jni下添加Android.mk並將相關文件正確放置。然後sync、rebuild即可。正確構建後會在jni目錄下找到相應的so和中間文件。
使用eclipse進行ndk-build
android studio對ndk-build支持不好,而相反的,漸漸被淘汰的eclipse是默認使用android.mk的,所以必要時候還是可以使用eclipse進行開發。
- 下載ADT、ndk,新建android工程,這些就不贅述了。
- 工程上右鍵Android Tools->Add Native Support。完成後可以見到目錄下多出了jni文件夾和樣例cpp文件。這時打開樣例cpp,發現默認生成的#include <jni.h>竟然報無法解析的錯誤。這時就要進行下面的配置,正確配置好後才能使用語法提示、自動補全等功能。如果是已存在的項目也要點一下,不點這個無法支持c++,很多c++選項都出不來。
- 點擊Project->Properties->C++ General->Paths And Symbols。Add如下兩個目錄(版本號部分換成自己有的):{ndk-dir} oolchainsarm-linux-androideabi-4.9prebuiltwindows-x86_64libgccarm-linux-androideabi4.9include;{ndk-dir}platformsandroid-21arch-arm64usrinclude。並置頂。其他需要的include目錄也在這裡設置。
- 設置一個Builder。Project->Properties->Builders->New。
- apply並rebuild。需要的話重啟。之後就可以發現能使用語法提示、自動補全等功能了。
推薦閱讀:
TAG:Android開發 |