Android Studio中架包打包和依赖冲突解决
一、为什么使用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中架包打包和依赖冲突解决相关推荐
- android studio 把libs包打包到apk中,设置应用以32bit去读取.so文件
android studio 把libs包打包到apk中: 只需在当前module里的build.gradle添加下列配置: sourceSets {main {jniLibs.srcDirs = [ ...
- matlab中run按钮是灰色的,Android Studio中Run按钮是灰色的快速解决方法
首先是,在不同的AS中,gradle版本不同,下载的sdk版本不同,这些,都在gradle(Project.Models)相关代码里调过来就好.之前的文章里有说过. 经过调好gradle这些文件,AS ...
- Android Studio中arr包的引用
一.arr包的引用 在android 开发中我们除了引入jar包之外,有时候还会需要使用到arr包,那么既然有了jar为什么还要arr呢?这里就要说一下arr的不同了,arr包除了包含了字节码文件之外 ...
- android studio 2d插件,在Android Studio中添加Overlap2D库作为依赖项
include 'desktop', 'core', 'Overlap2dRuntime' project(':Overlap2dRuntime').projectDir = new File(set ...
- Android studio 中的AVD manger启动失败原因解决方法
初次运行Android virtural 时,新建好设备后启动 方法一 出现错误提示如下: 可能原因: 根目录里面有多个AVD文件夹 一般在C盘/用户/.android/avd 此时在其他盘中查找AV ...
- Android Listview中Button按钮点击事件冲突解决办法
今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...
- android studio 中 gradle 配置与说明
首先在android studio中,gradle工具版本和gradle版本(或者插件版本).gradle工具版本就是我们安装android studio的时候,同时也会安装gradle工具版本,因为 ...
- 怎么配置android远程服务器地址,在 Android studio 中 配置Gradle 进行 “动态编译期间,指定 远程服务器地址 ,生成多个安装包”...
需求: 在产品开发中,经常需要发布各个版本,每个版本的服务器地址有不同的服务器地址.比如 开发服务器使用 192.168.1.232服务器, 测试服务器使用 192.168.1.245服务器, 正式上 ...
- Android studio中R类变成红色且文件报错无法实现最终效果的问题解决方法。
在Android Studio中java包中,资源编译错误会有时一直存在或莫名其妙地出现.如遇到这种情况,请尝试如下操作. ...
最新文章
- yolov5 加跟踪 姿态
- (转) Java多线程同步与异步
- c 输出空格_C/C++知识分享:C++常用内置函数你会几个,使用过几次呢?
- KDD Cup 2020多模态召回比赛亚军方案与搜索推荐业务的业务应用
- 一般用法(IPG写)
- mysql binlog 过期_mysql清理过期binlog堵塞数据库
- c语言 队列长度,c语言 队列
- java的class文件在哪里_传统上,你在哪里存储Java .class文件?
- 个人学习C语言的目标
- SEO引擎首页优化 - 2016百度搜索引擎算法
- grep exclude
- 微信视频号头像怎么换?怎么设置?必看!5个思路帮你快速敲定头像
- 【折腾系列—All In One主机】4、 iKuai软路由安装及配置
- 几步操作即可实现WhatsApp群发
- android 重力传感器gsensor,浅谈Android重力感应
- 使用vue做一个“淘宝“项目——2
- NBA比赛数据分析与预测
- 海华cywdhd wifi驱动移植
- Shiro(一)之shiro简介与工作原理
- https://blog.csdn.net/codezjx/article/details/8872090
热门文章
- Error Code: 1175. You are using safe update mode and you tried to ......
- 闲得蛋疼在linux下装鸟个svn
- mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上)
- WinForm 应用程序中开启新的进程及控制
- 联想lenovo Z470笔记本的驱动安装
- TP5实现支付宝电脑网站支付学习笔记
- Linux内存管理 (26)内存相关工具
- system.DateTime ToDateTime(System.String)”,因此该方法无法转换为存储表达式-解决方法...
- 找回 : MobileCoreServices.framework
- 精简的shell计算器