假设我们有strings_test.xml,它存储用于测试的字符串值,应该在调试版本中显示。当apk构建为发布版本时,所有值都应更改为空字符串,例如<string name="test_some_card_text">@string/empty</string>
。
是否有可能实现这一目标?
一如既往,提前谢谢。
答案 0 :(得分:14)
是的,您可以在buildTypes下的app gradle中执行此操作..
buildTypes {
mybuild {
resValue "string", "test_some_card_text", '"test"'
resValue "string", "other_text", '"other"'
}
debug {
resValue "string", "test_some_card_text", '"test"'
resValue "string", "other_text", '"other"'
}
}
然后像这样访问它。
getApplicationContext().getResources().getString(R.string.test_some_card_text);
getApplicationContext().getResources().getString(R.string.other_text);
对于构建,您需要选择build variants
并且必须构建它。
答案 1 :(得分:3)
是的,Gradle允许您覆盖字符串。
在app / build.gradle
中添加buildTypes {}debug { applicationIdSuffix&#34; debug&#34; }
这应该会在debug
旁边创建一个名为main
的目录。如果没有,则手动创建一个。 (说真的,我还没试过这个,但我知道这是可能的。)
然后,如果您的strings_test.xml
位于res/values
下,请在debug /下创建类似的目录结构,并将strings_text.xml与调试特定字符串放在一起。这将显示在您的调试版本中。 release / main / res / values下的那些将显示在您的发布版本中。
PS:您可以根据buildTypes和flavor覆盖所有res和资产数据。您无法覆盖 Java文件,但您可以添加它们。
答案 2 :(得分:2)
@Aditya Naik表示可以使用Flavors。 官方文件说
BuildType - &gt;味道 - &gt;主要 - &gt;的依赖关系。
这意味着如果在Build Type和main中都声明了资源,那么将选择Build Type中的资源。
请注意,对于合并的范围,相同(类型,名称)但不同限定符的资源将单独处理。
这意味着如果src / main / res有
- RES /布局/ foo.xml
res / layout-land / foo.xml
和src / debug / res有
res / layout / foo.xml
然后合并的资源文件夹将包含来自src / debug / res的默认foo.xml,但来自src / main / res的横向版本
有关详细信息,请访问Official doc - Resource Merging
答案 3 :(得分:1)
创建apk后无法更改字符串值。 但是你可以在创建apk后动态地为text或edittext ... etx赋值。
答案 4 :(得分:0)
对于那些来这里寻求对raw
资源应用类似方法的人,我使用buildConfigField
进行了处理。
gradle
...
buildTypes {
debug {
...
buildConfigField "int", "shared_resource_name", 'R.raw.debug_resource_name'
...
}
prod {
...
buildConfigField "int", "shared_resource_name", 'R.raw.prod_resource_name'
...
}
}
请注意引号。之后,将BuildConfig.shared_resource_name
放在文件R.raw.resource_value
以前可以直接访问的地方。
这可以用于我认为的其他资源。