Android 定义';resValue';使用现有的字符串定义
我感兴趣的是在strings.xml文件而不是build.gradle文件中定义我的许多风格的应用程序。考虑到多种风格,我想要一个简化的发行版/调试版本:Android 定义';resValue';使用现有的字符串定义,android,gradle,android-gradle-plugin,build.gradle,android-resources,Android,Gradle,Android Gradle Plugin,Build.gradle,Android Resources,我感兴趣的是在strings.xml文件而不是build.gradle文件中定义我的许多风格的应用程序。考虑到多种风格,我想要一个简化的发行版/调试版本: buildTypes { release { signingConfig signingConfigs.release resValue "string", "app_name", "@string/prod_name" } debug { applicationId
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\u name”和“beta\u name”。我还想使用这个类似的框架来定义提供者的权限等
目前,通过gradle命令行可以很好地构建该功能,但Android Studio无法识别该功能
Android Studio错误:
我在“generated.xml”中发现了这一点
<!-- Values from build type: debug -->
<string name="app_name">@string/beta_name</string>
我正在使用Android Studio 2.1 Preview 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", ""
}
您可以在渐变中为构建风格添加res值
productFlavors {
prod {
dimension "default"
resValue "string", "app_name", "your prod app name"
}
staging {
dimension "default"
resValue "string", "app_name", "your staging app name"
}
}
您能否更具体地说明“Android Studio无法识别”的确切含义?为什么您不将正确的字符串放入正确的资源目录中
src/release/res/values/strings.xml
对于特定于发行版的字符串,对于调试版本,则使用src/debug/res/values/strings.xml
?如果我已经在处理多个风格呢?我有我的常规“res”目录,以及我的flavor res目录:“/one/res/”、“/two/res”等。。。我最初试图在每个flavor的res子目录中定义“prod_name”和“beta_name”,从而将目录的2倍进一步减少到最小……在本例中,只需在这些文件中添加字符串(在buildtype中具有不同的值)。在文档中找不到很好的示例。如何为每种风格定义调试和发布目录。我已经有了我的主要“res”以及“one/res”、“two/res”等。。。这与使用Gradle的resValues
有何不同?这不会与每个flavor的strings.xml文件中的定义冲突吗?flavor的strings.xml文件覆盖了gradle的“defaultConfig”?请注意,这似乎是必需的,因为更新到gradle插件v3.5.0最初的目的是将所有定义保留在各种strings.xml文件中,而不是直接在gradle文件中设置定义。
productFlavors {
prod {
dimension "default"
resValue "string", "app_name", "your prod app name"
}
staging {
dimension "default"
resValue "string", "app_name", "your staging app name"
}
}