关于生成的资源文件的那个答案可能对你的用例来说有些过度了。基于我目前了解到的你的项目,我认为这一个更适合:
(并且你仍然可以将其与生成的资源文件结合使用)
src/flavor1/res/values/strings.xml
<string name="app_name_base">InTouch Messenger"</string>
<string name="app_name_gpe">InTouch Messenger: GPE Edition"</string>
src/flavor1/res/values-hu/strings.xml
<string name="app_name_base">InTouch Üzenetküldő"</string>
<string name="app_name_gpe">InTouch Üzenetküldő: GPE Változat"</string>
src/flavor2/res/values/strings.xml
<string name="app_name_base">Whatever Messenger"</string>
<string name="app_name_gpe">Whatever Messenger: GPE Edition"</string>
src/flavor2/res/values-hu/strings.xml`
<string name="app_name_base">Whatever Üzenetküldő"</string>
<string name="app_name_gpe">Whatever Üzenetküldő: GPE Változat"</string>
build.gradle
android {
sourceSets {
[flavor1, flavor3].each {
it.res.srcDirs = ['src/flavor1/res']
}
[flavor2, flavor4].each {
it.res.srcDirs = ['src/flavor2/res']
}
}
productFlavors {
[flavor1, flavor2].each {
it.resValue "string", "app_name", "@string/app_name_base"
}
[flavor3, flavor4].each {
it.resValue "string", "app_name", "@string/app_name_gpe"
}
}
}
这意味着
flavor1/2
将有一个额外未使用的
app_name_gpe
字符串资源,但这些都会被 aapt 处理:
这意味着flavor1/2
将会有一个多余且未使用的app_name_gpe
字符串资源,但是aapt会处理它:
android {
buildTypes {
release {
shrinkResources true
}
strings.xml
的解决方案,但我认为你无法用其他方式实现。如果你有分离问题,可以根据你要本地化的内容添加不同的res.srcDir
,但是你添加的文件夹可以包含多个values-<lang>/strings.xml
文件。 - TWiStErRob