java - 为每个构建类型解析应用程序标签

标签 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. 声明 resValue在你的defaultConfig这将成为应用程序的名称。 (注意:如果您选择将其命名为 app_name,请务必从您的 app_name 文件中删除原始 strings.xml 属性,否则会发生冲突。)

    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. 配置resValue gradle 配置时的名称

    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"
        ...
        >
    

正如我上面提到的,一定要删除默认的 app_name来自 strings.xml 的属性(property)

关于java - 为每个构建类型解析应用程序标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32092665/

相关文章:

java - 如何使用 Java native 接口(interface)在 C++ 中导入 python 库 - Android Studio

grails - 如何在 Grails 集成测试中部分模拟服务

java - 线程中的异常 "JavaFX Application Thread"java.lang.IllegalArgumentException : Children: duplicate children added: parent = TableRow@adc848

java - Hibernate 在整个 Spring Boot 应用程序上设置属性访问策略

java - 如何使用Spring Boot为传记后端制作实体类和 Controller ?

java - 通过注释单独排除某些情况的验证

android - API 级别 23 的样式错误

android - KeyboardView.OnKeyboardActionListener

java - 如何使用 Spock 测试单个类的 Logger?

testing - 在同一个 Spock 测试中执行所有断言,即使其中一个失败