【问题标题】:Resolve Application label for each build type解决每种构建类型的应用程序标签
【发布时间】:2015-08-19 10:15:56
【问题描述】:

我想为每个构建类型和风格解决 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”后缀来调试产品风味?

感谢您的帮助

【问题讨论】:

  • 如果您想为每个风味/构建类型调整应用程序的标签,可能有更好的方法,通过 resValue / buildConfig 字段,例如将 resValue 字符串设置为 app_name,在 applicationVariants.all 中对其进行更改,并在清单中将其用作应用程序标签。这个答案stackoverflow.com/questions/22506290/… 提供一些帮助吗?

标签: java android groovy gradle


【解决方案1】:

只是为我上面的评论提供一个工作示例:

  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. 设置您的productFlavors,就像您已经做的那样。如果您可以将应用名称与风味名称仅连接起来,或者提供明确的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 字段:

    <application
        ...
        android:label="@string/app_name"
        ...
        >
    

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

【讨论】:

  • 什么时候运行重命名逻辑?我正在记录它并运行它,我可以看到修改后的名称,但 apk 始终具有原始名称。我已经把它放在了 defaultConfig 部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2019-06-19
  • 2014-09-07
  • 2015-12-05
  • 1970-01-01
相关资源
最近更新 更多