通过flavor / debug-build更改字符串资源

时间:2015-12-30 04:45:03

标签: android build resources

假设我们有strings_test.xml,它存储用于测试的字符串值,应该在调试版本中显示。当apk构建为发布版本时,所有值都应更改为空字符串,例如<string name="test_some_card_text">@string/empty</string>

是否有可能实现这一目标?

一如既往,提前谢谢。

5 个答案:

答案 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以前可以直接访问的地方。

这可以用于我认为的其他资源。