Java 解析每个生成类型的应用程序标签

Java 解析每个生成类型的应用程序标签,java,android,groovy,gradle,Java,Android,Groovy,Gradle,我想解决每个构建类型和风格的manifest占位符依赖关系。例如,我有 productFlavors { dev { manifestPlaceholders = ['applicationLabel': 'DevFlavor'] } prod { manifestPlaceholders = ['applicationLabel': 'ProdFlavor'] } .....

我想解决每个构建类型和风格的manifest占位符依赖关系。例如,我有

 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”后缀添加到调试产品风格中


感谢您的帮助

仅为我的上述评论提供一个工作示例:

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

  • 将您的
    productFlavors
    设置为您已经做过的设置。如果您可以仅将应用程序名称与味道名称合并,或者提供显式的
    resValue
    ,这将覆盖
    defaultConfig
    中的值,则可以将其保留为空

    productFlavors {
        dev {
            // resValue 'string', 'app_name', 'MyAppDevFlavor'
        }
    
        prod {
            // resValue 'string', 'app_name', 'MyAppProdFlavor'
        }
    }
    
  • 在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
    }
    
  • 在AndroidManifest中,设置
    app\u name
    字段:

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

  • 如上所述,请确保从
    strings.xml

    中删除默认的
    app\u name
    属性。如果您想为每种风格/构建类型调整应用程序的标签,可能有更好的方法,通过resValue/config build字段,例如,将resValue字符串设置为
    app\u name
    ,在applicationVariants.all中更改它,并在清单中将其用作应用程序标签。这个答案是否提供了一些帮助?何时运行重命名逻辑?我正在记录它并运行它,我可以看到修改后的名称,但apk始终具有原始名称。我把它放在defaultConfig部分。
    <application
        ...
        android:label="@string/app_name"
        ...
        >