首页 > 解决方案 > 如何为不同的产品风格定义两个不同版本的字符串?

问题描述

我正在构建一个有两种风格的应用程序——免费和付费。这些在 build.gradle (app) 中定义如下:

flavorDimensions "mode"
productFlavors {
    free {
        applicationId "appid.free"
        versionName "2.0.4-free"
        buildConfigField "boolean", "PAID_VERSION", "false"
    }
    paid {
        applicationId "appid.paid"
        versionName "2.0.4-paid"
        buildConfigField "boolean", "PAID_VERSION", "true"
    }
}

当我构建不同的版本时,我希望根据我们正在构建的风格以不同的方式拉入某些字符串。

所以,我有通常的 strings.xml 文件,其中包含两种风格共有的字符串。

然后我定义了另外两个版本的strings.xml,在:

src/free/res/values/strings.xml
src/paid/res/values/strings.xml

这些包含依赖于风味的字符串。每个字符串在两个文件中都具有相同的名称,因此布局只引用公用名称,然后应该拉入正确的版本。

当我构建免费版本时,这工作正常,但是当我尝试构建付费版本时,我收到以下错误:

Found item String/help_settings more than one time

字符串“help_settings”在 strings.xml 的免费和付费版本中都有定义,但在它的主版本中没有定义。我通过阅读在线 Android Studio 文档的理解是,构建应该知道要使用哪些版本的 strings.xml 文件,并且应该忽略它不需要的版本,但它似乎知道所有 3 个版本,因此查找重复的定义。

我究竟做错了什么?

编辑添加:当我转到使用违规字符串的活动时,如果我突出显示它并执行“CTRL-B”以转到声明,它会列出 2 个声明它的位置。这两个声明都指向同一个文件:src/paid/res/values/strings.xml

我已经检查过我没有在同一个文件中声明它两次或类似的东西,但我绝对没有。

标签: androidbuild.gradleandroid-productflavors

解决方案


推荐阅读