随着Android Studio的使用愈来愈普遍,使用aar打包这种方式也愈来愈可行实际。
jar打包只打源代码,像资源文件不会打包,而aar偏偏是jar打包的补充完善,它会把代码和资源通通打包进一个文件。windows
既然须要打包为sdk提供出来使用,那就要打包得有水准一点。别把经常使用的第三方的jar集成到aar里面,这样很容易会形成冲突的。bash
①依赖的第三方资源最好是使用jcenter远程仓库的依赖,若是远程仓库上没有;例以下载的类库,直接使用compile进行依赖。微信
compile 'com.dou361.download:jjdxm-download:1.0.1'复制代码
②本身上传一个到jcenter远程仓库上,学习下打包aar到jcenter也是颇有必要的;例如常常用到的微信分享登陆的架包libammsdk.jar,打包到jcenter上,之后项目中须要用到就添加如下代码便可:app
compile 'com.dou361.winchat:jjdxm-winchat:1.0.0'复制代码
③固然了,若是你实在是嫌麻烦那就直接打包到aar上,若是APP中引用别的aar和你的aar有相同的架包那就悲剧了,不过仍是有解决的办法,后面会有相关的处理办法。ide
资源命名最好统统加上你的项目名字前缀,好比图片资源、string、color、dimens、layout等等,反正res目录下全部文件最好都使用统一的加前缀命名,防止跟宿主app下的资源重复,由于aar引用跟源码引用起到的效果同样同样的,全部很容易出现资源重复引用的问题,所以加上前缀很是有必要。能够有效避免架包内部部份内容冲突的尴尬状况。工具
同一个项目下屡次引用同一个第三方jar库会出现重复引用的编译问题,因此只要保证引用一次就ok了,可是若是你的库引用的第三方库比较多时,就会碰到很尴尬的问题。学习
好比你的aar库引用了一个第三方库,这个库是本地库,宿主app中也引用了这个第三方库,这时你把你的aar库所引用的那个第三方库引用方式设置成provide,provide的意思是不打包进去,这样没问题,可是你想过一个问题没,若是别人使用你的aar,他不知道你的aar库须要包含那个第三方库,若是他在本身的宿主app中没有引用进来那个库,好吧,这会致使运行时崩溃,崩溃的日志提示找不到一些类定义,总不能给别人提供aar库还要额外提供一堆第三库,而后告诉他把这些库添加进主工程里,这种方式可行,可是很不友好。gradle
解决办法优先删除libs目录中的jar保留compile的引用,也能够删除compile引用保留本地libs目录的。ui
解决办法优先删除低版本的保留高版本的,其次是优先删除本地libs的保留compile的。这个要根据APP的状况而定,保留高版本的jar可能会引发原来其余地方引用低版本方法变迁或者路径变动出问题,在二者间择优,同步升级其余相关jar的版本,或者同步降级其余相关jar的版本。spa
解决办法优先删除jar的引用,保留aar的,若是两个都是aar或者两个都是jar怎么办?固然也是能够删除aar或者jar内部中冲突的
(1)aar中冲突的部分是集成到aar中的,这种状况是比较多,若是是远程仓库的须要下载下来,改成本地引用,有人可能不会下载,其实原来你使用远程仓库引用同步之后已是下载好在本地的了,这里举一个案例:
compile 'com.dou361.update:jjdxm-update:1.0.3' 复制代码
windows系统 C:\Users\你的计算机用户名.gradle\caches\modules-2\files-2.1目录下找到compile的groupId com.dou361.update文件,完整的目录:
C:\Users\Admin\.gradle\caches\modules-2\files-2.1\com.dou361.update\jjdxm-update\1.0.3\fb8f27de2ce0371476023b1dcf4a6096d19e5810\jjdxm-update-1.0.3.aar复制代码
复制出来用便可,本地的libs中的aar,其实就是一个压缩包,用解压工具打开把冲突的部分删除便可;引用以下:
repositories {
flatDir {
dirs 'libs'
}
}
compile (name:'jjdxm-update',ext:'aar')复制代码
(2)jar中冲突的部分是jar内部部份内容,和第(1)的处理方法相似,这里要是没有说可能会想不到,jar包其实也是一个压缩包,所以内部的冲突的内容是能够经过解压工具打开去删除的。
(3)若是冲突的jar是采用远程依赖方式引用,那就能够直接使用代码去屏蔽冲突的部分例如:
compile ('com.dou361.update:jjdxm-update:1.0.3'){
exclude group: 'com.dou361.download',module:'jjdxm-download'
}复制代码
(4)比较极端的状况,部分类文件目录名称重复,可是两边的方法功能不同,经过解压工具删除两边重复的内容,而后新建一个目录相同名称相同的类到本身的主应用程序中,把两边的功能都实如今新建的这个类中。