resValue
方法(或其所谓的方法)允许您在buildTypes
或productFlavors
中设置资源值。 是否有相应的方式获取由resValue
设置的资源值?
似乎在productFlavors
之前评估buildTypes
,因此resValue
中设置的buildTypes
优先。我想在调试版本中将“Debug”附加到应用程序名称,但是我需要获取在产品风格中设置的值以便附加到它。
编辑:我尝试使用MarcinKoziń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
始终具有 last 产品风格的值。因此,在此示例中,所有构建都会收到名称"Bar"
或"Bar Debug"
。
基本上,我需要resValueSuffix
类似于applicationIdSuffix
。显然没有这样的动物存在。 com.android.application
插件是否公开了我可用于实现此目的的任何内容?
答案 0 :(得分:29)
如果您只是尝试设置应用标签(或其他清单值),可以使用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 Manifest中,您只需使用两个占位符作为应用名称(或其他值)
<application
android:label="${appName}${appNameSuffix}"
...
</application>
这允许您在单个设备上并排安装所有4个变体,并在应用程序抽屉/启动器中为它们指定不同的名称。
答案 1 :(得分:6)
您可以检查这样的构建变体
在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);
答案 2 :(得分:1)
要在调试版本中拥有替代版本的资源,您可以使用调试源集。
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
的任何值。您不必复制此处的所有字符串 - 您在此处不包含的字符串只是从主文件中删除。