Gradle解决多lib冲突

2018-10-24 14:37:43 浏览数 (1)

背景

在引入第三方jar包的时候,可能会遇到很多库的冲突,例如均使用了OkHttp,RxJava等等,在打包的时候就会遇到Class多个定义的问题。而目前Android中均是用AAR进行dex以及资源的打包,无法通过源码再进行剥离

解决方案

在Gradle中,通过compile "io.reactivex:rxjava:1.2.3"的方式将已经定义好的Maven仓库中的资源下载并且编译到项目中。

然后通过exclude的方式,在编译的时候,将对应包名/模块名下面的class不打包。

实例

比如RxJava编译过后的包结构如下图:

RxJava

而如果使用以下语句的话,则会将rx.internal.observers包下的class不打入Dex中,通过这种方式,就可以解决多class冲突的问题

代码语言:javascript复制
compile "io.reactivex:rxjava:1.2.3"{
        exclude group: 'rx.internal',module:'observers' 
    }

追踪

在项目的build目录下面可以看到编译完成的classes信息用于验证exclude是否生效

build目录

0 人点赞