2014-03-14 104 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中,或者将上面的代码复制到代码中(我个人发现构建脚本变得太大,所以我更愿意从中申请)。