標籤:
1. gradle-ex
2. ndk開發包
3. 項目目錄結構
4. lldb調試器
1. 一般來說gradle不是必需的,gradle也是可以進行ndk編譯的,然而你需要在編譯時間使用更多(多於一個)c++編譯選項時,以及讓IDE可以使用lldb進行調試,或者是針對ndk開發和編譯有更好的支援時,gradle-ex就是你所需要的。
gradle-ex的ex不是擴充而是experimental實驗非正式。它對ndk相關的配置進行了增強,同時又文法不相容gradle,並且在ndk相關以外的配置沿著的是gradle的文法。也就是gradle-ex並非完全全新,只對ndk相關進行改動,並且改動的地方與原來文法不相容。gradle預設是廢用ndk擴充的,需要手動修改開啟支援。gradle對ndk的編譯選項認為是cFlags,並且只能使用一個編譯選項,而gradle-ex不再有cFlags,取代之的是cppFlags。gradle和gradle-ex對於ndk的配置的屬性路徑編排不一致,也就是gradle-ex對部分屬性路徑進行了重新的編排。gradle-ex中字串和數組的賦值使用了新的文法。gradle和gradle-ex不對你的gradle指令碼進行嚴格的語法檢查,只會在gradle作業可錯時報怨,你就自己慢慢去想到底哪裡有問題吧。
使用gradle-ex,需要在Top-level build.gradle的buildscript.dependencies.classpath修改成com.andraoid.tools.build:gradle-experimental:0.7.0-alphal。
2. ndk開發包,包含了必要的交叉編譯工具和平台匯出的標頭檔和最小運行連結檔案等。可以通過IDE配置選用Tools->System Settings->Android SDK->SDK Tools->NDK,讓IDE自行更新下載。或者將離線壓縮包解壓到你的${ANDROID_SDK}目錄下ndk-bundle子目錄。
如果IDE未能正確識別NDK路徑,可以利用任一個項目,對其local.properties檔案進行NDK_PATH的配置,並且同步讓IDE去執行配置適配。
3. gradle進行編譯時間依賴嚴格的目錄結構。
使用ndk-build命令進行編譯時間,ndk-build需要搜尋jni目錄,如果沒有jni目錄,ndk-build就會以為沒有需要編譯的項目。
同樣使用gradle或gradle-ex,它們也固定的搜尋目錄路徑。
一般地在src目錄下:
app/build/intermediates
app/libsjar包匯入目錄
app/src/main/java
app/src/main/java/jninative方法產生的c標頭檔
app/src/main/jni所有c/c++原始碼,以及第三方庫的開發標頭檔
app/src/main/jniLibs所有jni目錄下代碼所連結到的第三方庫連結檔案
4. lldb調用器,可以可以通過IDE配置選用Tools->System Settings->Android SDK->SDK Tools->lldb,讓IDE自行更新下載。或者將離線壓縮包解壓到你的${ANDROID_SDK}目錄下ndk-bundle子目錄。
gradle-ex自動會建立起lldbserver遠端偵錯串連,所以雖然使用了lldb調試器,但卻是遠端偵錯,使用的時候也有許多支援不好,比棧幀選用命令不起效,線程選用命令也不起效等。
使用Android Studio進行ndk開發的準備