[英]How to get a resource value in build.gradle?
resValue
方法(或任何被调用的方法)允许您在buildTypes
或productFlavors
设置资源值。 是否有相应的方法来获取由resValue
设置的资源值?
看起来productFlavors
在buildTypes
之前被评估,所以在resValue
设置的buildTypes
优先。 我想在调试版本中将“Debug”附加到应用程序名称,但我需要获取在产品风格中设置的值才能附加到它。
编辑:我尝试了 Marcin Koziński 的使用变量的建议,但在任何构建类型之前评估所有产品风味。 因此,这不起作用:
android {
String appName = ""
productFlavors {
Foo {
appName = "Foo"
}
Bar {
appName = "Bar"
}
}
buildTypes {
release {
resValue "string", "app_name", appName
}
debug {
resValue "string", "app_name", appName + " Debug"
}
}
}
在buildTypes
, appName
始终具有最后一个产品风味的值。 因此,在此示例中,所有构建都接收名称"Bar"
或"Bar Debug"
。
基本上,我需要一个类似于applicationIdSuffix
的resValueSuffix
。 显然不存在这样的动物。 com.android.application
插件是否公开了我可以用来实现这一目标的任何内容?
如果您只是想设置 App Label(或其他清单值),您可以使用manifest placeholders解决这个问题。
android {
productFlavors {
Foo {
applicationId "com.myexample.foo"
manifestPlaceholders.appName = "Foo"
}
Bar {
applicationId "com.myexample.bar"
manifestPlaceholders.appName = "Bar"
}
}
buildTypes {
release {
manifestPlaceholders.appNameSuffix =""
}
debug {
manifestPlaceholders.appNameSuffix =".Debug"
applicationIdSuffix ".debug"
}
}
}
然后在您的 Android 清单中,您只需使用两个占位符作为您的应用程序名称(或其他值)
<application
android:label="${appName}${appNameSuffix}"
...
</application>
这允许您在单个设备上并排安装所有 4 个变体,并在应用程序抽屉/启动器中为它们指定不同的名称。
编辑11/22/2019
根据@javaxian 的反馈更新了占位符值的设置方式
您可以像这样检查构建变体
在 gradle 中定义值
buildTypes {
debug{
buildConfigField "String", "Your_string_key", '"yourkeyvalue"'
buildConfigField "String", "SOCKET_URL", '"some text"'
buildConfigField "Boolean", "LOG", 'true'
}
release {
buildConfigField "String", "Your_string_key", '"release text"'
buildConfigField "String", "SOCKET_URL", '"release text"'
buildConfigField "Boolean", "LOG", 'false'
}
}
并使用构建变体访问这些值:
if(!BuildConfig.LOG)
// do something with the boolean value
或者
view.setText(BuildConfig.yourkeyvalue);
要在调试版本中拥有资源的替代版本,您可以使用调试源集。
strings.xml
可以在以下路径src/main/res/values
,这意味着它在主源集中。 如果您创建一个新目录src/debug/res/values
您可以在其中放置一个新的strings.xml
文件,其中包含应在调试版本中覆盖的值。 例如:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">My Application Debug</string>
</resources>
这将替换主文件中app_name
任何值。 您不必复制此处的所有字符串 - 此处未包含的字符串只是从主文件中获取的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.