解析每种构建类型的应用程序标签

我想为每种构建类型和风格解析manifestPlaceholders依赖项。 例如,我有

productFlavors { dev { manifestPlaceholders = ['applicationLabel': 'DevFlavor'] } prod { manifestPlaceholders = ['applicationLabel': 'ProdFlavor'] } ..... buildTypes { debug { def old_name = manifestPlaceholders.get('applicationLabel'); // every time is null // def old_name = productFlavors.dev.manifestPlaceholders.get('applicationLabel'); // ITS OK, but not dynamic manifestPlaceholders = [applicationLabel: old_name + ' Dev'] } 

是否有任何解决方案可以添加’Dev’后缀来调试产品口味?

谢谢你的帮助

只是为上面的评论提供一个有效的例子:

  1. defaultConfig声明一个resValue ,它将成为应用程序的名称。 ( 注意:如果您选择将其命名为app_name ,请确保从strings.xml文件中删除原始app_name属性,否则它将发生冲突。)

     defaultConfig { // applicationId, versionCode, etc. (...) // define your base Applications name here resValue 'string', 'app_name', 'MyApp' } 
  2. 像你一样设置你的产品。 如果您可以仅使用flavor的名称连接App的名称,则可以将它们留空,或者提供显式的resValue ,它将覆盖defaultConfig的值。

     productFlavors { dev { // resValue 'string', 'app_name', 'MyAppDevFlavor' } prod { // resValue 'string', 'app_name', 'MyAppProdFlavor' } } 
  3. 在gradle配置时配置resValue的名称

     android.applicationVariants.all { variant -> // get app_name field from defaultConfig def appName = variant.mergedFlavor.resValues.get('app_name').getValue() // concat new App name with each flavor's name appName = "${appName}" variant.productFlavors.each { flavor -> appName += " ${flavor.name}" } // optionally add buildType name appName += " ${variant.buildType.name}" // your requirement: if buildType == debug, add DEV to App name if(variant.buildType.name == "debug") { appName += " DEV" } // set new resVale variant.resValue 'string', 'app_name', appName } 
  4. 在AndroidManifest中,设置app_name字段:

      

如上所述,请务必从strings.xml删除默认的app_name属性