我发布了一个包含2个Build Flavors的应用程序:一个“普通”版本,包括广告和无广告版本.
在Google Play开发者控制台中,如果它使用广告,您现在必须标记您的应用.这适用于普通版本,但无广告版本使用与专业版相同的依赖关系(尤其是Google Play服务).因此,当我将此版本设置为无广告时,我会收到警告,因为找到了ad-libs.
是否可以根据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","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' }
解决方法
你可以改变
compile 'com.google.android.gms:play-services:6.1.+'
至
liteCompile 'com.google.android.gms:play-services:6.1.+'
这将包括仅与您的Lite版本的播放服务lib.
但是你还没有完成,因为现在你的应用程序中创建AdView和相关类的代码在创建专业版时将无法编译.
我在类似情况下(使用计费库)的解决方案是将引用排除库和相关类的所有代码移动到源文件中,该源文件也仅使用lite版本构建,然后为专业版提供虚拟实现没有引用库的版本.
例如,创建两个特定于flavor的src目录,每个目录中具有相同名称的java类:
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,您可以将其放置在屏幕上.在专业版中,您将获得null,因此您可以跳过添加视图(但在尝试首先创建广告视图之前,您可能已经在检查您是专业版还是精简版).
原文地址:https://www.jb51.cc/android/310053.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。