2012-10-24 91 views
3

我已經花了幾天的時間努力獲取系統並運行,以構建Android NDK應用程序的多個配置。我能夠建立好圖書館;我遇到的問題通常源於在更改構建配置時使這些庫保持最新狀態。構建配置和Android NDK

我需要一個大部分完全自動化的系統:用戶只需更改構建配置,只需即可工作

您如何解決構建配置問題以及庫未正確重建的問題?

我已經嘗試了一堆不同的方法來解決這個問題,但他們似乎都以最終解決了我的問題。

最初,我們只是輸出一個具有相同名稱的共享對象文件,而不管構建配置如何(例如game.so)。 問題是,更改構建配置不會觸發重建庫;您必須更改源代碼或構建腳本。因此,人們從調試到發佈,運行應用程序,並在不知不覺中實際鏈接到調試版本。

因此,我們嘗試基於構建配置將庫輸出到唯一的共享對象。例如,調試版本是gamed.so。發行版本是gamer.so。 問題是,Java代碼沒有構建配置的概念,那麼我們如何知道要加載哪個版本的庫(這是從Java完成的)?

那麼爲了解決這個問題,我們嘗試/抓住所有可能的庫版本,嘗試加載它們。當我們找到存在的那個時,加載它! 問題是舊版本的庫在將新配置部署到手機時未被刪除。所以如果你已經構建並運行了Debug和Release,那麼這兩個庫現在都在使用了!首先要求哪一個,它會找到並加載。

所以無論如何,這似乎是必須已經解決了,但我在網上找到了很少的信息。沒有什麼能夠滿足我的需求。

我的問題是:您是如何解決構建配置問題以及未正確重建庫的問題的?

回答

1

這實際上很奇怪。我一直看到install -r刷新了/data/data/app.pack.age/lib目錄。您使用哪種設備進行開發?

+0

我正在使用Galaxy S2。它沒有紮根,所以我不認爲我可以查看數據目錄中的實際內容。我不確定我的論點是「adb安裝」。我通過Eclipse運行它,並沒有看到它的任何參考。也許它沒有指定-r標誌?你以前是否通過Eclipse完成了這項工作? – Goose

+0

是的,我也是通過Eclipse來完成的。不,你不需要root來讀你安裝的應用程序的'lib'目錄:'adb shell ls -l/data/data/your.package.name/lib' –