Android多渠道编译-依赖的渠道控制

来源:互联网 发布:东北林大网络 编辑:程序博客网 时间:2024/06/05 20:45

最近在开发一款android的SDK,其中有一个需求很有意思,需要在不同版本的SDK上引用不同Library依赖。之前还真没有遇到过,查阅了很多资料搞定了,在这里记录下来,分享给大家。~~

不同渠道依赖不同的第三方库

在build.gradle配置文件中的Android{}中添加如下类似多渠道配置

    productFlavors {        flavor1 {}        flavor2 {}    }

如上我们已经定义了flavor1和flavor2两个渠道版本。如果我们想在flavor1中使用Gson,而flavor2中不使用,我们可以使用如下方式

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:25.3.1'    flavor1Compile 'com.google.code.gson:gson:2.2.4'    flavor1Compile 'com.android.support.constraint:constraint-layout:1.0.2'    flavor2Compile 'com.android.support.constraint:constraint-layout:1.0.2'}

引用方式是在我们平时引用依赖的compile关键字前面加上渠道名并将compile首字母大写。
注意:执行编译使出现如下错误的话,请将dependencies配置放到gradle配置文件的最底端。

Error:(6, 0) Gradle DSL method not found: ‘flavor1Compile()’

好了,通过以上的配置我们就能够打出一个依赖的Gson一个没有依赖Gson的APK了,我们可以去验证一下。

这里写图片描述
在AndroidStudio中双击debug的apk文件可以预览它。如下:
这里写图片描述
点击classes.dex查看代码结构,如下:
这里写图片描述
我们可以看到Gson的class已经编译到了dex文件中。再来看一下flavor2的classes.dex文件:
这里写图片描述
并没有Gson的class文件,说明我们成功的在两个渠道版本中实现了依赖的不同。

除了第三方的依赖,Library工程也可以使用相同的方法。

flavor1Compile project(':XXXLibrary')
阅读全文
0 0