我已经发布了一个带有2种构建风格的应用程序:一个“正常”版本,包括广告和一个无广告版本。
在Google Play Developer控制台中,如果应用程序使用广告,就必须标记它。对于普通版本来说,这是可以的,但是无广告版本与专业版本(尤其是google服务)使用相同的依赖关系。所以当我把这个版本设置为无广告时,我会收到一个警告,因为我发现了广告库。
是否可以根据gradle构建风格更改依赖关系?
build.gradle:
android {
(...)
productFlavors {
lite {
signingConfig signingConfigs.Release
versionCode 14
versionName '1.1.5'
buildConfigField "boolean", "IS_PRO", "false"
}
pro {
applicationId 'com.example.exampleadfree'
signingConfig signingConfigs.Release
targetSdkVersion 21
versionCode 14
versionName '1.1.5'
buildConfigField "boolean", "IS_PRO", "true"
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:21.0.3'
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:cardview-v7:21.0.2'
compile 'com.google.android.gms:play-services:6.1.+'
compile project(':libraries:SharedItems')
compile 'com.android.support:recyclerview-v7:21.0.2'
}发布于 2015-11-25 06:05:53
你可以改变
compile 'com.google.android.gms:play-services:6.1.+'至
liteCompile 'com.google.android.gms:play-services:6.1.+'这将包括play服务库和您的精简版。
但是您还没有完成,因为您的应用程序中创建play服务库中的AdView和相关类的代码在创建专业版本时不会编译。
在类似情况下(使用计费库),我的解决方案是将引用被排除的库和相关类的所有代码移到一个源文件中,该源文件也是以精巧的风格构建的,然后为不引用库的pro版本提供一个虚拟实现。
例如,在每个目录中创建两个具有相同名称的java类的特定于口味的src目录:
src/lite/java/com/example/myapp/util/AdUtil.java
src/pro/java/com/example/myapp/util/AdUtil.java在AdUtil的精简版中,您可以调用google服务并获得一个返回的AdView:
View getAdView(...)
{
View adView = new AdView(...);
adView.setAdSize(...);
adView.setAdUnitId(...);
...
return adView;
}在该类的专业版本中,您只需放置一个不引用play服务库的虚拟实现:
View getAdView(...)
{
return null;
}然后,在您的主要应用程序代码中,当您调用AdUtil.getAdView()时,您将得到一个可以放在屏幕上的精巧版本的视图。在pro版本中,您将得到一个null,因此您跳过添加视图(但在尝试创建该视图之前,您可能已经检查了您是pro还是lite )。
发布于 2015-11-24 19:51:45
当一个项目声明产品口味时,这些内容扩展了主配置。
来自这里。因此,产品口味有效地为您声明的每个风味添加了新的配置。在gradle中,可以添加特定于配置的依赖项。例如,
dependencies {
<configname> <dependency>
}如果您想列出项目添加的所有配置:
configurations.findAll().each{println "$it.name"}在这种情况下,如果您的项目,您将看到信任,命名与您的产品口味相同。因此,正如@cwbowron所评论的,添加风味lite的编译时依赖项。
dependencies {
liteCompile <dependency>
}发布于 2015-11-30 19:21:13
在Google支持聊天中,我被要求在Google控制台上说“不”,尽管检测到了。因此,包含谷歌库不应该有问题。
另一方面,道格的回答很优雅。
致以敬意,
https://stackoverflow.com/questions/33821068
复制相似问题