使用现有字符串定义定义 'resValue'
Defining 'resValue' using an existing string definition
我更感兴趣的是在 strings.xml 文件而不是 build.gradle 中定义我的应用程序的多种风格。鉴于多种口味,我想要一个简化的 release/debug 变体:
buildTypes {
release {
signingConfig signingConfigs.release
resValue "string", "app_name", "@string/prod_name"
}
debug {
applicationIdSuffix ".beta"
resValue "string", "app_name", "@string/beta_name"
}
然后在我的每个构建风格的自定义 res/values/strings.xml 文件中,我将分别定义它们自己的 "prod_name" 和 "beta_name"。我也想使用这个类似的框架来定义提供者的权限等...
目前可以通过 gradle 命令行构建,但无法被 Android Studio 识别。
Android 工作室错误:
我在 'generated.xml'
中找到了这个
<!-- Values from build type: debug -->
<string name="app_name">@string/beta_name</string>
这是一个字符串引用另一个字符串的典型方式。但是这次 Android Studio 给我这个错误:
Error:(7, 29) No resource found that matches the given name
(at 'app_name' with value '@string/beta_name').
我正在使用 Android Studio 2.1 预览版 5
根据我的经验,您无法解析 resValue
DSL 中的 @string/my_string
。 Gradle 将值作为简单字符串放入资源文件中。
在这种情况下,您可以使用不同的文件夹来实现它:
只需使用:
src/release/res/values/strings.xml
src/debug/res/values/strings.xml
如果您想为每个构建变体(构建类型+风格)使用不同的资源,您可以使用:
src/flavor1Release/res/values/strings.xml
src/flavor1Debug/res/values/strings.xml
src/flavor2Release/res/values/strings.xml
src/flavor2Debug/res/values/strings.xml
这其实是可以的。您所要做的就是在 defaultConfig 中将这些字符串声明为空,如下所示:
defaultConfig {
resValue "string", "prod_name", ""
resValue "string", "beta_name", ""
}
您可以根据自己的构建风格在 gradle 中添加 res 值
productFlavors {
prod {
dimension "default"
resValue "string", "app_name", "your prod app name"
}
staging {
dimension "default"
resValue "string", "app_name", "your staging app name"
}
}
我更感兴趣的是在 strings.xml 文件而不是 build.gradle 中定义我的应用程序的多种风格。鉴于多种口味,我想要一个简化的 release/debug 变体:
buildTypes {
release {
signingConfig signingConfigs.release
resValue "string", "app_name", "@string/prod_name"
}
debug {
applicationIdSuffix ".beta"
resValue "string", "app_name", "@string/beta_name"
}
然后在我的每个构建风格的自定义 res/values/strings.xml 文件中,我将分别定义它们自己的 "prod_name" 和 "beta_name"。我也想使用这个类似的框架来定义提供者的权限等...
目前可以通过 gradle 命令行构建,但无法被 Android Studio 识别。
Android 工作室错误:
我在 'generated.xml'
中找到了这个<!-- Values from build type: debug -->
<string name="app_name">@string/beta_name</string>
这是一个字符串引用另一个字符串的典型方式。但是这次 Android Studio 给我这个错误:
Error:(7, 29) No resource found that matches the given name
(at 'app_name' with value '@string/beta_name').
我正在使用 Android Studio 2.1 预览版 5
根据我的经验,您无法解析 resValue
DSL 中的 @string/my_string
。 Gradle 将值作为简单字符串放入资源文件中。
在这种情况下,您可以使用不同的文件夹来实现它:
只需使用:
src/release/res/values/strings.xml
src/debug/res/values/strings.xml
如果您想为每个构建变体(构建类型+风格)使用不同的资源,您可以使用:
src/flavor1Release/res/values/strings.xml
src/flavor1Debug/res/values/strings.xml
src/flavor2Release/res/values/strings.xml
src/flavor2Debug/res/values/strings.xml
这其实是可以的。您所要做的就是在 defaultConfig 中将这些字符串声明为空,如下所示:
defaultConfig {
resValue "string", "prod_name", ""
resValue "string", "beta_name", ""
}
您可以根据自己的构建风格在 gradle 中添加 res 值
productFlavors {
prod {
dimension "default"
resValue "string", "app_name", "your prod app name"
}
staging {
dimension "default"
resValue "string", "app_name", "your staging app name"
}
}