一、为什么使用aar打包,而不是jar

随着Android Studio的使用越来越广泛,使用aar打包这种方式也越来越可行实际。
jar打包只打源代码,像资源文件不会打包,而aar恰恰是jar打包的补充完善,它会把代码和资源统统打包进一个文件。

二、资源命名问题

既然需要打包为sdk提供出来使用,那就要打包得有水准一点。别把常用的第三方的jar集成到aar里面,这样很容易会造成冲突的。

(1)aar中有依赖的架包

①依赖的第三方资源最好是使用jcenter远程仓库的依赖,如果远程仓库上没有;例如下载的类库,直接使用compile进行依赖。

compile 'com.dou361.download:jjdxm-download:1.0.1'复制代码

②自己上传一个到jcenter远程仓库上,学习下打包aar到jcenter也是很有必要的;例如经常用到的微信分享登录的架包libammsdk.jar,打包到jcenter上,以后项目中需要用到就添加以下代码即可:

compile 'com.dou361.winchat:jjdxm-winchat:1.0.0'复制代码

③当然了,如果你实在是嫌麻烦那就直接打包到aar上,如果APP中引用别的aar和你的aar有相同的架包那就悲剧了,不过还是有解决的办法,后面会有相关的处理办法。

(2)资源命名

资源命名最好通通加上你的项目名字前缀,比如图片资源、string、color、dimens、layout等等,反正res目录下所有文件最好都使用统一的加前缀命名,防止跟宿主app下的资源重复,因为aar引用跟源码引用起到的效果一样一样的,所有很容易出现资源重复引用的问题,因此加上前缀非常有必要。可以有效避免架包内部部分内容冲突的尴尬情况。

三、jar第三方库重复引用问题

同一个项目下多次引用同一个第三方jar库会出现重复引用的编译问题,所以只要保证引用一次就ok了,但是如果你的库引用的第三方库比较多时,就会碰到很尴尬的问题。

比如你的aar库引用了一个第三方库,这个库是本地库,宿主app中也引用了这个第三方库,这时你把你的aar库所引用的那个第三方库引用方式设置成provide,provide的意思是不打包进去,这样没问题,但是你想过一个问题没,如果别人使用你的aar,他不知道你的aar库需要包含那个第三方库,如果他在自己的宿主app中没有引用进来那个库,好吧,这会导致运行时崩溃,崩溃的日志提示找不到一些类定义,总不能给别人提供aar库还要额外提供一堆第三库,然后告诉他把这些库添加进主工程里,这种方式可行,但是很不友好。

以下是第三方库重复引用冲突解决方法:

1.本地libs目录中的jar和远程仓库中compile的jar冲突。

解决办法优先删除libs目录中的jar保留compile的引用,也可以删除compile引用保留本地libs目录的。

2.本地libs目录中两个jar,远程仓库compile两个jar或者本地libs目录和远程仓库compile之间的同一jar不同版本冲突。

解决办法优先删除低版本的保留高版本的,其次是优先删除本地libs的保留compile的。这个要根据APP的情况而定,保留高版本的jar可能会引起原来其他地方引用低版本方法变迁或者路径变更出问题,在两者间择优,同步升级其他相关jar的版本,或者同步降级其他相关jar的版本。

3.引用jar和jar、aar和jar或者aar和aar的冲突。

解决办法优先删除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)比较极端的情况,部分类文件目录名称重复,但是两边的方法功能不一样,通过解压工具删除两边重复的内容,然后新建一个目录相同名称相同的类到自己的主应用程序中,把两边的功能都实现在新建的这个类中。

Android Studio中架包打包和依赖冲突解决相关推荐

  1. android studio 把libs包打包到apk中,设置应用以32bit去读取.so文件

    android studio 把libs包打包到apk中: 只需在当前module里的build.gradle添加下列配置: sourceSets {main {jniLibs.srcDirs = [ ...

  2. matlab中run按钮是灰色的,Android Studio中Run按钮是灰色的快速解决方法

    首先是,在不同的AS中,gradle版本不同,下载的sdk版本不同,这些,都在gradle(Project.Models)相关代码里调过来就好.之前的文章里有说过. 经过调好gradle这些文件,AS ...

  3. Android Studio中arr包的引用

    一.arr包的引用 在android 开发中我们除了引入jar包之外,有时候还会需要使用到arr包,那么既然有了jar为什么还要arr呢?这里就要说一下arr的不同了,arr包除了包含了字节码文件之外 ...

  4. android studio 2d插件,在Android Studio中添加Overlap2D库作为依赖项

    include 'desktop', 'core', 'Overlap2dRuntime' project(':Overlap2dRuntime').projectDir = new File(set ...

  5. Android studio 中的AVD manger启动失败原因解决方法

    初次运行Android virtural 时,新建好设备后启动 方法一 出现错误提示如下: 可能原因: 根目录里面有多个AVD文件夹 一般在C盘/用户/.android/avd 此时在其他盘中查找AV ...

  6. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  7. android studio 中 gradle 配置与说明

    首先在android studio中,gradle工具版本和gradle版本(或者插件版本).gradle工具版本就是我们安装android studio的时候,同时也会安装gradle工具版本,因为 ...

  8. 怎么配置android远程服务器地址,在 Android studio 中 配置Gradle 进行 “动态编译期间,指定 远程服务器地址 ,生成多个安装包”...

    需求: 在产品开发中,经常需要发布各个版本,每个版本的服务器地址有不同的服务器地址.比如 开发服务器使用 192.168.1.232服务器, 测试服务器使用 192.168.1.245服务器, 正式上 ...

  9. Android studio中R类变成红色且文件报错无法实现最终效果的问题解决方法。

    在Android Studio中java包中,资源编译错误会有时一直存在或莫名其妙地出现.如遇到这种情况,请尝试如下操作.                                       ...

最新文章

  1. yolov5 加跟踪 姿态
  2. (转) Java多线程同步与异步
  3. c 输出空格_C/C++知识分享:C++常用内置函数你会几个,使用过几次呢?
  4. KDD Cup 2020多模态召回比赛亚军方案与搜索推荐业务的业务应用
  5. 一般用法(IPG写)
  6. mysql binlog 过期_mysql清理过期binlog堵塞数据库
  7. c语言 队列长度,c语言 队列
  8. java的class文件在哪里_传统上,你在哪里存储Java .class文件?
  9. 个人学习C语言的目标
  10. SEO引擎首页优化 - 2016百度搜索引擎算法
  11. grep exclude
  12. 微信视频号头像怎么换?怎么设置?必看!5个思路帮你快速敲定头像
  13. 【折腾系列—All In One主机】4、 iKuai软路由安装及配置
  14. 几步操作即可实现WhatsApp群发
  15. android 重力传感器gsensor,浅谈Android重力感应
  16. 使用vue做一个“淘宝“项目——2
  17. NBA比赛数据分析与预测
  18. 海华cywdhd wifi驱动移植
  19. Shiro(一)之shiro简介与工作原理
  20. https://blog.csdn.net/codezjx/article/details/8872090

热门文章

  1. Error Code: 1175. You are using safe update mode and you tried to ......
  2. 闲得蛋疼在linux下装鸟个svn
  3. mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上)
  4. WinForm 应用程序中开启新的进程及控制
  5. 联想lenovo Z470笔记本的驱动安装
  6. TP5实现支付宝电脑网站支付学习笔记
  7. Linux内存管理 (26)内存相关工具
  8. system.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式-解决方法...
  9. 找回 : MobileCoreServices.framework
  10. 精简的shell计算器