我有一個Android應用程序,我分發給幾個不同的市場提供商;該應用程序在功能上每個都相同,但需要某些不同的配置參數。理想情況下,我想在一個構建步驟中製作所有單個APK。有沒有「官方」的方法來實現這一目標?如何將特定於構建的配置注入到APK中?
我正在考慮一種方法,在該方法中,我在項目結構中有一個模板文件,在構建時使用ant將值插入到輸出文件(如res/xml/config.xml)中。
提前致謝!
我有一個Android應用程序,我分發給幾個不同的市場提供商;該應用程序在功能上每個都相同,但需要某些不同的配置參數。理想情況下,我想在一個構建步驟中製作所有單個APK。有沒有「官方」的方法來實現這一目標?如何將特定於構建的配置注入到APK中?
我正在考慮一種方法,在該方法中,我在項目結構中有一個模板文件,在構建時使用ant將值插入到輸出文件(如res/xml/config.xml)中。
提前致謝!
我使用了一個ant腳本,它讀取一些構建時間參數併爲我生成相應的APK(appname-1.1_ggl,appname-1.1_amz.apk,分別包含指向Google Market或Amazon Market的鏈接) 。手動運行兩次並不是什麼大問題。
這可能不現實,取決於您有多少排列(您沒有提及),但您可以使用subant
。使用不同的buildpath
和隨後的build.properties
您需要調用每個排列。
您可以爲您的apk設置一個基於Maven Android Plugin的版本,該版本使用資源過濾和配置文件進行不同的配置。查看官方示例項目的morseflash示例,瞭解它是如何完成的。
一旦你建立了配置文件,你可以使用maven invoker插件在一次掃描中運行它。如果你想讓它自動化,只需把它放在Hudson上。
http://code.google.com/p/maven-android-plugin/
http://code.google.com/p/maven-android-plugin/wiki/Samples
http://www.simpligility.com/2010/11/release-version-management-for-your-android-application/
我用了所有的代碼和兩個(或更多)的項目引用該庫庫項目。
庫項目的res文件夾中有一個名爲config.xml的資源文件,該文件在其他項目中被覆蓋。 這樣我可以有不同的應用程序設置,每個構建都有自己的manifest.xml,因此您可以真正爲每個構建類型配置不同的東西。
這也允許您具有特定的代碼/權限/ ...,只有特定的構建需要,並使構建過程非常簡單。
有幾個方法可以解決這個:
1)安裝一個Android庫應用 (專爲Eclipse)
這是該方法的Android文檔中建議。使用這種方法,您可以將您的應用程序設置爲"Library Project"。
然後,對於您希望生成的每個特定版本,您都可以設置一個新的Android項目,該項目是之前創建的庫項目的references。這個項目需要擁有自己的AndroidManifest,它聲明瞭從庫應用程序中使用的組件。由於每個應用程序都有自己的清單,所以幾乎可以通過更換組件或更改信息來進行任何類型的定製。但是,雖然考慮到複雜的差異,但如果幾乎沒有差異,這在維護上會造成一些冗餘。
2)內置Ant腳本或其他構建腳本來操作配置
Ant腳本可以在構建時操作源或XML文件,以允許自定義配置。最簡單的方法是使用unix sed或python/ruby腳本來進行自定義。這是定製僅限於小改動和/或僅僅文本替換的理想選擇。這是我在大多數情況下的選擇路線。
我建議在進行操作之前將源代碼樹複製到臨時目錄,以便可以在「ant clean」上清除它,並且不會影響源的工作副本。
這樣做的一個警告是,我將設計修改,以便源代碼仍然在不運行腳本的情況下生成(即,您可以在eclipse或任何其他環境中開發時執行標準構建,而無需運行特殊腳本)。