android - 如何为不同的产品风格定义两个不同版本的字符串?
问题描述
我正在构建一个有两种风格的应用程序——免费和付费。这些在 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
我已经检查过我没有在同一个文件中声明它两次或类似的东西,但我绝对没有。
解决方案
推荐阅读
- formatting - 在没有 -style=file 选项的情况下调用 clang-format 的默认行为是什么?
- javascript - rails6 / 接收来自 vanilla js 请求的 js.erb 响应
- json - boto3 如何将 dict / json 输出上传到 s3 存储桶?
- laravel - Laravel 如何使用另一个表中的 Auth ID 进行查询
- vba - GetElementById("ex").value = " in (51,52,53)" 错误
- security - Stackexchange Blackbox 不适用于 Perforce
- ruby-on-rails - 如何强制资产编译 - Rails 6
- bootstrap-4 - 根据显示宽度更改文本对齐方式
- excel - 文本到列:如何防止十进制数字的日期格式?
- javascript - Discord.js:reaction.message.guild.members.find 不是函数