2012-07-02 84 views
8

我一直在回到這個問題,因爲似乎沒有一個乾淨的解決方案。有沒有人有一個很好的策略來排除Android中的子項目的資源?有條件的資源包含/排除Android版apk版本

我有兩個方案:

1 - 基本庫項目具有本地化文件爲EN,ES等

--Child項目1使用所有本地化,並且一切都很好

- -Child項目2僅本地化爲英文,但由於父資源的原因,最終的.apk將具有局部本地化(儘管ADT19添加了Lint規則以警告/阻止您執行此操作)。

我現在唯一需要的解決方案是爲本地化設置一個單獨的父庫,並且只將其包含在子項目1中。如果您有許多庫項目,這是一個很大的麻煩。

2 - 排除特定於構建的資源。我有一些圖片僅僅用於我的應用程序的Nook特定版本,這些圖片由一個標誌觸發。有條件的代碼很好用,但資源總是包含在內。

我不想爲我的每一個應用程序創建另一個子項目。有沒有辦法設置一個構建/編譯標誌來修剪特定的圖像資源,所以他們不進入最終的.apk?

第二個問題可能是特定於我的,但我很驚訝我無法找到關於第一點的任何好的討論。沒有其他開發者只能本地化一些應用程序嗎?或者大多數人只是忽略了這個問題?

+0

我見過有關向文件添加文件的討論。apk,但是我正在尋找一些更像ProGuard的東西 - 自動化並且內置到工具中,而不是黑客入侵最終的.apk。 – ProjectJourneyman

+0

您的場景可以通過使用外部構建工具(如Ant或Maven)來實現,它們都提供了在構建過程(編譯,dex,打包等)期間精細控制每一步的能力。如果使用Maven,通過[maven-resource-plugin](http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html)排除資源是非常容易的。 – yorkw

+0

我可能需要這樣。不過,我希望有一個更清潔(並且理想更簡單)的解決方案。 – ProjectJourneyman

回答

3

1 - 基本庫項目具有本地化文件爲EN,ES等

你必須使用這個庫中有兩個項目,其中只有一個人需要的所有翻譯。因此,這些翻譯可能在使用圖書館的項目中,需要翻譯,而不是在圖書館本身。這與任何其他定製庫資源的項目(例如替換圖標,替換佈局)沒有區別。

現在,一旦開始進入更復雜的混音(例如,兩個項目需要翻譯,第三個不需要翻譯),那麼你開始遇到問題。

排除特定於構建的資源。我有一些圖片僅僅用於我的應用程序的Nook特定版本,這些圖片由一個標誌觸發。有條件的代碼很好用,但資源總是包含在內。

Xav和我聊了一下關於條件資源in this issue。他的重點是調試與生產(資源相當於BuildConfig.DEBUG),但聽起來似乎更靈活一些是可能的。

這些東西都可以通過自定義發佈構建腳本來處理。在正常的調試版本中,你會放棄一切;在生產版本中,在編譯,簽名和zipaligning之前,讓Ant腳本處理項目的副本,修剪不需要的目錄。

+0

這就是我爲project3所做的工作,它對意大利語有一次性翻譯(因此有一些與父庫相對應的strings_libx.xml文件)。儘管如此,我的庫和應用程序的樹變得越來越複雜,我對增加複雜性感到不滿(由於重複的字符串文件導致維護複雜性,或者使用LibX將工作區複雜性分割爲多餘的語言資源)。我認爲寫作可能在牆上 - 我需要深入挖掘這些工具並編寫一些操作來修剪輸出。 – ProjectJourneyman

+0

我還沒有找到構建Ant腳本的時間,但我開始認爲這確實是正確的解決方案。隨着我的需求變得越來越複雜,我無法替代自己的腳本的靈活性。我不認爲DEBUG標誌將提供足夠的配置能力。另外,如果我等待足夠長的時間,新的帶有Gradle的Android構建系統將最終完成,我可以學習:http://tools.android.com/tech-docs/new-build-system – ProjectJourneyman