根据构建变体设置应用程序标签

时间:2014-03-14 04:47:36

标签: android android-resources

我的Android有多个productFlavors。我希望调试版本的android:label(例如flavor1)说Flavor1 Debug,发布版本说Flavor1

没有productFlavors这相对简单,只需在调试和发布源文件夹中创建不同的string资源,但使用productFlavors,我不想创建{每个风格的{1}},flavor1Debug等文件夹,其中只有一个flavor2Debug资源。

有办法做到这一点吗?我猜测它需要以某种方式合并资源,但我不确定如何。

对于额外的积分,如果我可以为应用程序图标添加叠加层,即合并两个图像,那将会很棒,但我意识到这可能会让它过得太远。

1 个答案:

答案 0 :(得分: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 (m.@name == 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 DebugMy App Staging等。release版本不受影响。

我还把它放在gist上。

您可以使用build.gradle指令将apply from:应用于原始要点网址,或将上述内容复制到您的代码中(我个人觉得构建脚本太大,所以我更喜欢申请)。