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

时间:2015-08-19 10:15:57

标签: java android groovy gradle

我想为每种构建类型和风格解析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 个答案:

答案 0 :(得分:18)

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

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

    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"
        ...
        >
    
  5. 如上所述,请务必从app_name

    中删除默认的strings.xml媒体资源