使用现有字符串定义定义'resValue'

Fis*_*tix 12 android gradle android-resources build.gradle android-gradle-plugin

我有兴趣在strings.xml文件而不是build.gradle中更多地定义我的应用程序.鉴于多种口味,我想要一个简化的发布/调试变体:

  buildTypes {
    release {
        signingConfig signingConfigs.release
        resValue "string", "app_name", "@string/prod_name"
    }
    debug {
        applicationIdSuffix ".beta"
        resValue "string", "app_name", "@string/beta_name"
    }
Run Code Online (Sandbox Code Playgroud)

然后在我的每个构建版本的自定义res/values/strings.xml文件中,我将定义每个自己的"prod_name"和"beta_name".我也想使用这个类似的框架来定义提供者的权限等...

目前这将通过gradle命令行构建良好,但Android Studio无法识别.

Android Studio错误:

我在'generated.xml'中找到了这个

<!-- Values from build type: debug -->
<string name="app_name">@string/beta_name</string>
Run Code Online (Sandbox Code Playgroud)

这是典型的一个字符串如何引用另一个字符串 但是这次Android Studio给了我这个错误:

Error:(7, 29) No resource found that matches the given name 
(at 'app_name' with value '@string/beta_name').
Run Code Online (Sandbox Code Playgroud)

我正在使用Android Studio 2.1 Preview 5

Gab*_*tti 9

根据我的经验,你无法@string/my_stringresValueDSL中解决问题.Gradle将值作为简单字符串放在资源文件中.

在这种情况下,您可以使用不同的文件夹来实现它:

只需使用:

src/release/res/values/strings.xml
src/debug/res/values/strings.xml
Run Code Online (Sandbox Code Playgroud)

如果您想为每个构建变体(构建类型+ flavor)使用不同的资源,您可以使用:

src/flavor1Release/res/values/strings.xml
src/flavor1Debug/res/values/strings.xml
src/flavor2Release/res/values/strings.xml
src/flavor2Debug/res/values/strings.xml
Run Code Online (Sandbox Code Playgroud)


ste*_*oid 8

这实际上是可能的.您所要做的就是在defaultConfig中将这些字符串声明为空,如下所示:

defaultConfig {
    resValue "string", "prod_name", ""
    resValue "string", "beta_name", ""
}
Run Code Online (Sandbox Code Playgroud)