背景
在引入第三方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冲突的问题
compile "io.reactivex:rxjava:1.2.3"{
exclude group: 'rx.internal',module:'observers'
}
追踪
在项目的build目录下面可以看到编译完成的classes信息用于验证exclude是否生效
build目录
网友评论