如何获得build.gradle中的资源值?

resValue方法(或任何它被称为)允许您在buildTypesproductFlavors 设置资源值。 是否有相应的方法来获取resValue设置的资源值?

看起来, productFlavors是在buildTypes之前buildTypes ,所以在resValue设置的buildTypes优先。 我想在debugging版本中将“debugging”附加到应用程序名称,但是我需要获取在产品风格中设置的值以附加到它。

编辑:我试过MarcinKoziński的build议,使用一个variables,但所有的产品风味评估任何构buildtypes之前。 因此,这不起作用:

 android { String appName = "" productFlavors { Foo { appName = "Foo" } Bar { appName = "Bar" } } buildTypes { release { resValue "string", "app_name", appName } debug { resValue "string", "app_name", appName + " Debug" } } } 

buildTypesappName始终具有最后一个产品风格的值。 所以在这个例子中,所有版本都会收到名称"Bar""Bar Debug"

基本上,我需要一个类似于applicationIdSuffixresValueSuffix 。 显然没有这样的动物存在。 com.android.application插件是否暴露了我可以用来实现这一目的的任何东西?

Solutions Collecting From Web of "如何获得build.gradle中的资源值?"

如果你只是试图设置应用程序标签(或其他清单值),你可以用明显的占位符来解决这个问题。

 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个变体并排安装在单个设备上,并在应用程序抽屉/启动器中给它们不同的名称。

你可以检查这样的构build变种

在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' } } 

并使用构build变体来访问这些值:

  if(!BuildConfig.LOG) // do something with the boolean value 

要么

 view.setText(BuildConfig.yourkeyvalue); 

要在debugging版本中拥有替代版本的资源,可以使用debugging源集。

可以在下面的pathsrc/main/res/values下findstrings.xml ,这意味着它在主源集中。 如果你创build了一个新的目录src/debug/res/values你可以在这里放置一个新的strings.xml文件,并在debugging版本中覆盖这些值。 例如:

 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">My Application Debug</string> </resources> 

这将取代app_name在主文件中的任何值。 你不必在这里复制所有的string – 你不包括在这里的只是从主文件中获取。