我已经发布了一个带有2种构建口味的应用程序:a" normal"版本包括广告和无广告版本。
在Google Play开发者控制台中,如果它使用广告,您现在必须标记您的应用。这适用于普通版本,但无广告版本使用与专业版相同的依赖关系(尤其是Google Play服务)。因此,当我将此版本设置为无广告时,我会收到警告,因为找到了ad-lib。
是否可以根据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'
}
答案 0 :(得分:9)
您可以更改
compile 'com.google.android.gms:play-services:6.1.+'
到
liteCompile 'com.google.android.gms:play-services:6.1.+'
,这将包括仅与您的Lite版本的播放服务lib。
但是你还没有完成,因为现在你的应用程序中创建AdView和相关类的代码在创建专业版时将无法编译。
我在类似情况下(使用计费库)的解决方案是将引用排除库和相关类的所有代码移动到源文件,该源文件也仅使用lite版本构建,然后提供虚拟实现对于不参考图书馆的专业版。
例如,在每个目录中创建两个特定于flavor的src目录:
src/lite/java/com/example/myapp/util/AdUtil.java
src/pro/java/com/example/myapp/util/AdUtil.java
在精简版的AdUtil中,您可以调用Google Play服务并返回AdView:
View getAdView(...)
{
View adView = new AdView(...);
adView.setAdSize(...);
adView.setAdUnitId(...);
...
return adView;
}
在该类的专业版中,你可以放一个不参考play服务lib的虚拟实现:
View getAdView(...)
{
return null;
}
然后在您的主应用程序代码中,当您调用AdUtil.getAdView()时,您将获得Lite版本中的View,您可以将其放置在屏幕上。在专业版中,您将获得一个空值,因此您可以跳过添加视图(但在尝试首先创建广告视图之前,您可能已经在检查您是专业版还是精简版)。
答案 1 :(得分:1)
当项目宣布产品风味时,这些扩展了主要配置。
来自here。因此,Product Flavors有效地为您声明的每种口味添加新配置。在gradle中,可以添加特定于配置的依赖项。例如,
dependencies {
<configname> <dependency>
}
如果要列出项目添加的所有配置:
configurations.findAll().each{println "$it.name"}
如果你的项目你会看到与你的产品口味相同的配置。正如@cwbowron所评论的那样,要为flavor lite
添加编译时依赖项:
dependencies {
liteCompile <dependency>
}
答案 2 :(得分:0)
在Google Play支持聊天中,尽管有人检测到,我还是在Google Play Console中说“不”。因此,包含Google libs应该没有问题。
另一方面,道格的回答很优雅。
此致