首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有和不带广告的多种构建风格(新的策略)

有和不带广告的多种构建风格(新的策略)
EN

Stack Overflow用户
提问于 2015-11-20 07:23:05
回答 3查看 1.7K关注 0票数 6

我已经发布了一个带有2种构建风格的应用程序:一个“正常”版本,包括广告和一个无广告版本。

在Google Play Developer控制台中,如果应用程序使用广告,就必须标记它。对于普通版本来说,这是可以的,但是无广告版本与专业版本(尤其是google服务)使用相同的依赖关系。所以当我把这个版本设置为无广告时,我会收到一个警告,因为我发现了广告库。

是否可以根据gradle构建风格更改依赖关系?

build.gradle:

代码语言:javascript
复制
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'
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-25 06:05:53

你可以改变

代码语言:javascript
复制
compile 'com.google.android.gms:play-services:6.1.+'

代码语言:javascript
复制
liteCompile 'com.google.android.gms:play-services:6.1.+'

这将包括play服务库和您的精简版。

但是您还没有完成,因为您的应用程序中创建play服务库中的AdView和相关类的代码在创建专业版本时不会编译。

在类似情况下(使用计费库),我的解决方案是将引用被排除的库和相关类的所有代码移到一个源文件中,该源文件也是以精巧的风格构建的,然后为不引用库的pro版本提供一个虚拟实现。

例如,在每个目录中创建两个具有相同名称的java类的特定于口味的src目录:

代码语言:javascript
复制
src/lite/java/com/example/myapp/util/AdUtil.java
src/pro/java/com/example/myapp/util/AdUtil.java

在AdUtil的精简版中,您可以调用google服务并获得一个返回的AdView:

代码语言:javascript
复制
View getAdView(...)
{
    View adView = new AdView(...);
    adView.setAdSize(...);
    adView.setAdUnitId(...);
    ...
    return adView;
}

在该类的专业版本中,您只需放置一个不引用play服务库的虚拟实现:

代码语言:javascript
复制
View getAdView(...)
{
    return null;
}

然后,在您的主要应用程序代码中,当您调用AdUtil.getAdView()时,您将得到一个可以放在屏幕上的精巧版本的视图。在pro版本中,您将得到一个null,因此您跳过添加视图(但在尝试创建该视图之前,您可能已经检查了您是pro还是lite )。

票数 11
EN

Stack Overflow用户

发布于 2015-11-24 19:51:45

当一个项目声明产品口味时,这些内容扩展了主配置。

来自这里。因此,产品口味有效地为您声明的每个风味添加了新的配置。在gradle中,可以添加特定于配置的依赖项。例如,

代码语言:javascript
复制
dependencies {
    <configname> <dependency>
}

如果您想列出项目添加的所有配置:

代码语言:javascript
复制
configurations.findAll().each{println "$it.name"}

在这种情况下,如果您的项目,您将看到信任,命名与您的产品口味相同。因此,正如@cwbowron所评论的,添加风味lite的编译时依赖项。

代码语言:javascript
复制
dependencies {
    liteCompile <dependency>
}
票数 1
EN

Stack Overflow用户

发布于 2015-11-30 19:21:13

在Google支持聊天中,我被要求在Google控制台上说“不”,尽管检测到了。因此,包含谷歌库不应该有问题。

另一方面,道格的回答很优雅。

致以敬意,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33821068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档