在gradle中定义一个字符串,并使用特定于flavor的applicationId

我已经看到了操纵gradle构建任务的脚本,现在我想知道是否可以在`defaultConfig之外设置一个字符串,但将其视为所有风格的默认值。

基本上我有多种口味,所有口味都有一个特定的ApplicationId。 我想使用该id来设置稍后在我的java代码中使用的字符串资源。

defaultConfig { minSdkVersion 11 targetSdkVersion 21 versionCode 1 versionName "1.0" } productFlavors { one { applicationId "com.my.app.one" } two { applicationId "com.my.app.two" } } 

我想设置一个像这样的字符串:

 resValue "string", "authority", applicationId + ".dataprovider" 

我尝试过的:

  • 如果我把它放在defaultConfig部分,applicationId仍然是null,因此我得到一个错误的字符串
  • 把它放到每个风味的部分可以工作,但因为我有多种口味会产生很多代码重复

寻找替代方案。

PS我正在使用Android Studio 0.8.12。

经过大量的搜索后,我find了答案。 也许有人会觉得这很有用。

 productFlavors.all { resValue "string", "authority", applicationId + ".dataprovider" } 

这个简单的代码片段在设置了invidualvariables后将字符串设置为所有风格。 它有点像defaultConfig但不完全,因为它是在flavor块之后执行的。


额外:

结果我甚至可以设置applicationId ! 我到目前为止的最终结果是:

 def final String AUTHORITY = '.dataprovider' productFlavors.all { applicationId "com.my.app." + name resValue "string", "authority", applicationId + AUTHORITY buildConfigField "String", "AUTHORITY", "\""+applicationId + AUTHORITY+"\"" } 

现在我可以通过BuildConfig.AUTHORITY@string/authority来获取每个flavor提供者的权限,我分别在manifest和我的类文件中使用它:

  

 public class DataProvider extends ContentProvider { public static final String PROVIDER = BuildConfig.AUTHORITY; public static final Uri SEARCH_URI = Uri.parse("content://" + PROVIDER + "/search"); }