2012-08-23 25 views
1

我正在用Ant構建我的Android應用程序,並希望在構建時在我的strings.xml中設置其中一個值。例如,我可以用如何在構建時設置strings.xml值?

<string name="app_name">MyApp-DEBUG</string>

與調試版本,或者我可以用

<string name="app_name">MyApp<string>

一個發佈版本。這可能嗎?

+1

可能重複http://stackoverflow.com/questions/8607804/build-configuration-specific-resources-debug-vs-release和http:// stackoverflow.com/questions/3029819/android-automatically-choose-debug-release-maps-api-key/3828864 – sandrstar

回答

2

有在Ant中兩個任務,可以幫助:

首先是<replace>。您給它一個文件名,其中包含可以替換的參數,並且您將<替換爲>任務這些參數的值。它將替換它們在文件中。我不喜歡這個任務,因爲它被用來替換受版本控制的東西,如果你不小心,你可以最終改變文件而沒有意義。

的settings.xml
<settings> 
    <properties> 
      <property name="server" value="@[email protected]"/> 
    </properties>' 
</settings> 
更換任務
<replace file="settings.xml"> 
    <replacetoken token="@[email protected]" value="google.com"/> 
</replace> 

我看過很多版本控制庫的地方被替換文件的修訂#3是與更換的參數文件的意外的檢入(和直到下一個版本的參數未發生變化時才能實現)。然後版本#4是具有替換參數的版本#2的副本。接下來是一個錯誤的版本#5,後面跟着一個版本#6,它恢復了文件,並且繼續。

我的優選的方法是將文件在複製到另一個目錄中,並使用<filterset>/<filter>令牌來改變文件的同時被複制:

<copy todir="${target.dir}" 
    file="settings.xml"> 
    <filterset> 
     <filter token="SERVER" value="google"/> 
    </filterset> 
    </copy> 

兩者都可以使用屬性文件而不是指定個人令牌。 <copy>/<filterset>對可以取文件的文件集並一次替換一堆令牌。 (注意不要將它傳遞給二進制文件!)。

+0

對於您的首選方法,該複製標籤的位置在哪裏?它是如何被調用的?什麼是target.dir? –

0

試試這個代碼,它爲我工作

<target name="app-name-debug"> 
    <replaceregexp file="res/values/strings.xml" match='name="app_name"(.*)' 
     replace='name="app_name"&gt;MyApp-DEBUG&lt;\/string&gt;'/> 
</target> 
<target name="app-name-release"> 
    <replaceregexp file="res/values/strings.xml" match='name="app_name"(.*)' 
     replace='name="app_name"&gt;MyApp&lt;\/string&gt;'/> 
</target> 
相關問題