2014-03-14 32 views
2

我有一個Android多個productFlavors。我想android:label的調試版本,例如flavor1,說Flavor1 Debug和發佈版本說Flavor1根據buildvariant設置應用標籤

沒有productFlavors這個比較簡單,只需要創建在調試不同的string資源和釋放源文件夾,但與productFlavors,我不希望被創造flavor1Debugflavor2Debug等文件夾,每個味道只有一個string資源在那裏。

有沒有辦法做到這一點?我猜它需要合併資源,但不知道如何。

如果我可以爲應用程序圖標添加覆蓋圖,即合併兩個圖像,但我意識到這可能會花費太多,那將會非常棒。

回答

0

我爲此制定瞭解決方案。基本上,您使用以下方法複製讀取構建文件,修改屬性值,然後重寫文件。

def debugAppRename(variant, labelResource) { 
    def flavor = variant.productFlavors.get(0) 
    def buildtype = variant.buildType 
    // Append buildType name to app label 
    if(buildtype.debuggable) { 
    variant.mergeResources << { 
     def valuesFile = "$buildDir/res/all/${flavor.name}/${buildtype.name}/values/values.xml" 
     def values = (new XmlParser()).parse(valuesFile) 
     values.string.each { m-> 
     if ([email protected] == labelResource) { 
      m.value = m.text() + " " + buildtype.name.capitalize() 
      new XmlNodePrinter(new PrintWriter(new FileWriter(valuesFile))) 
       .print(values) 
     } 
     } 
    } 
    } 
} 

使用它的方法是:

applicationVariants.all { variant -> 
    debugAppRename(variant, 'app_name') // where `app_name` is the string resource you use for the `app:label` property in your AndroidManifest.xml 
} 

所得應用程序將具有附加到它的buildType名稱,如果它是一個可調試buildType,對於例如My App Debug,My App Staging等。release構建保持不受影響。

我也把它放在gist

你可以在你的build.gradle中使用apply from:指令將其應用到原始URL中,或者將上面的代碼複製到代碼中(我個人發現構建腳本變得太大,所以我更願意從中申請)。