为生成的字符串资源添加后缀

Add suffix to generated string resource

我有一个 gradle 配置如下设置。允许并排安装不同的 builds/flavors

buildTypes {
    release {
    }
    debug {
        applicationIdSuffix ".debug"
        // Somehow add debug suffix to app ID?
    }
}
productFlavors {
    ci {
        applicationId "com.myapp.ci"
        ext.betaDistributionGroupAliases = "mobileworkforce.ci"
        resValue "string", "app_name", "AppName.CI"
    }

    staging {
        applicationId "com.myapp.staging"
        resValue "string", "app_name", "AppName.Staging"
    }

    production {
        applicationId "com.myapp"
        resValue "string", "app_name", "AppName"
    }

问题是我不知道如何更新 app_name 字符串资源,使 app_name 字符串资源具有后缀 "Debug"(用作应用程序的标签) )

我能够使用 manifestPlaceholders 创建一个可行的解决方案,而不是生成字符串资源。这并不理想,因为结果是 AppName.Debug.CI 而不是 AppName.CI.Debug 但它有效。

buildTypes {
    release {
         manifestPlaceholders = [ activityLabel:"AppName"]
    }
    debug {
        applicationIdSuffix ".debug"
                     manifestPlaceholders = [ activityLabel:"AppName.Debug"]
    }
}
productFlavors {
    def addActivityLabelSuffix = { placeholders, suffix ->
        def appName = placeholders.get("activityLabel")
        placeholders.put("activityLabel", appName + suffix);
    }
    ci {
        applicationId "com.myapp.ci"
        ext.betaDistributionGroupAliases = "mobileworkforce.ci"
        addActivityLabelSuffix getManifestPlaceholders(), ".CI"
    }

    staging {
        applicationId "com.myapp.staging"
        addActivityLabelSuffix getManifestPlaceholders(), ".Staging"
    }

    production {
        applicationId "com.myapp"
        resValue "string", "app_name", "AppName"
    }
}

使用 getManifestPlaceholders().get("...") 我总是得到 null,所以我正在寻找另一个解决方案...也许更好,因为我可以在应用程序名称中获得正确的顺序...

// build.gradle
def appNameBase = "My App"
buildTypes {
    release {
        manifestPlaceholders = [ appNameBase: appNameBase, appNameSuffix: "" ]
    }
    debug {
        manifestPlaceholders = [ appNameBase: appNameBase, appNameSuffix: " Debug" ]
        applicationIdSuffix ".debug"
    }
}
productFlavors {
    one {
        manifestPlaceholders = [ appNameFlavor: "One" ]
    }
    two {
        manifestPlaceholders = [ appNameFlavor: "Two" ]
    }
}
// AndroidManifest.xml
<application android:label="${appNameBase} ${appNameFlavor}${appNameSuffix}" ...>

在我的例子中,我只想要“我的应用程序一”和“我的应用程序二”调试广告“我的应用程序一调试”和“我的应用程序二调试”,上面的代码效果很好。