2015-12-03 44 views
4

在我們的company我們正在開發一個包含Java和本機部分的Android SDK。我們以AAR格式打包SDK,其中包含所有資源,Java類和本地位。根據AAR規範,本地庫應該放在AAR包內的jni文件夾內。由於當前的gradle插件不支持高級NDK用例,而且由於我們有一個已經發展了3年多的非常成熟的Android.mk文件,我們通過從gradle任務調用定製shell腳本來準備AAR。這個shell腳本使用ndk-build命令構建NDK,並且運行此腳本的任務將作爲javaCompile任務的依賴關係(我們的代碼有多種風格,每種風格都有自己的NDK規則,這些規則是從定義文件然後作爲命令行參數給予ndk-build)。Android gradle實驗性插件路線圖

最後,當一切都被編譯,我們有一個副本任務,副本的本地庫到構建/中間體/包內JNI文件夾(最終被壓縮到AAR的文件夾)。這工作正常,直到我們更新我們的項目使用gradle插件v1.5.0。

在v1.5.0中,一個名爲Transform API的東西被引入到插件中。雖然我們不使用這個,這個變換一步確實在任務transformNative_libsWithSyncJniLibsForFlavorNameBuildTypeName後,我們已經複製了我們的庫到JNI文件夾碰巧的地方,並導致所有數據的缺失JNI文件夾本地庫的一些轉換。這最終會導致AAR只要本地方法被要求就不會包含本機庫和崩潰。

我們通過使用project.tasks[taskName]獲得該任務,並確保它發生之前我們我們的庫複製到文件夾JNI這個workarounded問題。

但是,有了這個問題,我們開始擔心,如果何時以及何時將gradle-experimental插件(唯一支持NDK的插件)放棄實驗階段,並且將成爲構建NDK代碼的標準。

我們試驗了一下這個實驗性的插件,除了不同的語法(爲什麼???)它不支持調試本地代碼作爲庫模塊的一部分(gdb文件沒有打包到AAR中並且jniDebuggable標誌不再存在) 。

有誰知道什麼時候這個插件會達到一個穩定的API,並準備用於生產構建?我們希望提前計劃從調用ndk-build從shellscript到具有相同功能奇偶校驗的僅gradle-only NDK的遷移(以及從Android Studio免費支持C++編輯,這對於當前配置是不可能的,所以我們依靠different editor獲取JNI膠水代碼)。

+1

「有誰知道什麼時候這個插件會達到一個穩定的API,並準備用於生產構建?「 - 至多,Android工具團隊確實如此,他們不太可能對此發表評論,其他任何人都可以充其量提供意見。 – CommonsWare

+0

我在他們的網站上找不到任何此類信息,我們希望瞭解大致發佈日期計劃我們的遷移,我不會問,如果他們沒有打破定製的JNI構建與gradle插件v1.5.0。 – DoDo

+0

這不會讓你的問題適合這個網站。請閱讀網站文檔是什麼[關於主題]( https://stackoverflow.com/help/on-topic)。 – CommonsWare

回答

1

我沒有一個路線圖,但如果你遵循的依賴關係,你會看到Android的實驗插件仍處於試驗階段,因爲new Gradle object model仍處於試驗階段。我期望Android Studio插件在底層Gradle代碼穩定之前不會穩定。

這就是說:雖然語法差異令人沮喪,但它們通常很容易應用。更重要的是,實驗插件提供了相當不錯的調試支持。它不使用gdb(它默認使用lldb),它不依賴於jniDebuggable標誌。你正在尋找這些的事實讓我覺得你對ndk-gdb的工作方式非常瞭解,並且可能建立了依靠這些知識的自己的系統。您是否嘗試過在Android Studio中按下「調試」按鈕?如果您的C++代碼位於您的主項目中,它應該可以正常工作。 (它似乎有一些問題,在庫項目中設置斷點,很可惜。)

+0

謝謝你的回答。我在庫項目中使用本地代碼,這是由幾個應用程序使用。我還爲[構建本地代碼]構建了自己的系統(http://dodotrivia.blogspot.hr/2015/12/using-gradle-to-build-ndk-projects.html),它具有比當前提供的功能更多的功能通過正常和實驗性插件。我已經嘗試通過在調試器設置中提供我們的符號目錄來調試AS,但是似乎AS沒有獲得這些符號。此外,AS調試器不能在三星設備上運行,也不能在64位Nexus 5X上運行(與原生ndk-gdb相同)。 – DoDo

相關問題