resValue方法(或任何它被称为)允许您在buildTypes或productFlavors中设置资源值.是否有相应的方法来获取由resValue设置的资源值?
似乎在buildTypes之前对productFlavors进行了评估,因此在buildTypes中设置的resValue优先.我想在调试版本中附加“调试”到应用程序名称,但是我需要获取在产品风格中设置的值才能附加到它.
编辑:我试过MarcinKoziński的建议使用一个变量,但所有的产品风格都在任何构建类型之前进行评估.因此,这不行:
android { String appName = "" productFlavors { Foo { appName = "Foo" } Bar { appName = "Bar" } } buildTypes { release { resValue "string","app_name",appName } debug { resValue "string",appName + " Debug" } } }
在buildTypes中,appName始终具有最后一个产品风格的值.所以在这个例子中,所有的构建都会收到名称“Bar”或“Bar Debug”.
基本上,我需要一个类似于applicationIdSuffix的resValueSuffix.显然没有这样的动物存在. com.android.application插件是否暴露了我可以用来实现这一点的任何东西?
解决方法
如果您只尝试设置App Label(或其他清单值),则可以使用清单占位符来解决此问题.
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个变体并排安装在单个设备上,并在应用程序抽屉/启动器中给出不同的名称.