切换风格

默认Lavender Sky Flowers Wizard Snow Beige California City Dragon Black London Sunset glow Pink Cloud
12下一页

111

主题

1247

积分

8

精华

用户组 

易积分
3023
热心
0
好评
16
E4A类库冲突终极解决方案[复制链接]
发表于 2020-5-28 00:14:45 | 显示全部楼层 |阅读模式
本帖最后由 as2557594045 于 2020-5-29 16:31 编辑

23.png
首先来一张图镇楼!!!


你是否也遇到类库冲突导致 生成dex失败?编译成功但是闪退?软件功能不正常?
那么你就来对地方了,这篇帖子将教你如何一一解决这些问题。
首选我把问题分成两大部分大家先来分析原因(仅个人经验不喜勿喷)

类库冲突主要问题大致分为

jar问题导致异常包括  两个类库的依赖jar中的类重复,两个类库中的jar 文件名重复但内容不一样,导致的异常.... 。

资源导致异常 包括资源id冲突,资源文件名冲突,Androidanifest配置冲突
此帖子主要讲jar导致的异常 ,如果有时间下次分析资源异常的解决方法。



一.合并jar生成dex异常

1.两个类库调用了同一个包名含同一个类的jar但是jar文件名却不一样,这导致e4a认为这是两个不同的jar尝试分别合并这两个jar,但是合并的时候发现类重复,因此导致合并jar生成dex失败。

2.两个类库中的jar文件名重复但jar实际内容确不一样,这会导致e4a认为这两个类库中使用的jar是同一个而只尝试合并其中一个jar,但是由于找不到另一个类库的代码中调用的类或者方法而编译失败,非常常见的重复文件名  classes.jar 等 因为Androidstudio默认编译就是此文件名。


二.编译apk后出现功能不正常没有效果闪退等问题

1.两个类库使用不同版本的依赖库但是jar文件名一样,e4a会只合并其中一个jar这种时候,通常来说如果版本相差不大一般可以通用,但也有无法通用的时候存在这种时候另一个类库功能异常或者出现找不类,找不到方法因此抛出异常闪退崩溃。




分析完原因下面来说下我的一些解决方法(仅个人经验不喜勿喷)
针对此类异常首选建议尝试e4a提示中的清除libs的依赖文件可以解决部分问题

一.合并jar生成dex异常解决方案

1.两个类库调用了同一个包名含同一个类的jar但是jar文件名却不一样导致出现生成dex失败的,进入e4a安装目录的libs里两个冲突类库的resource.zip压缩包中查看jar的包名推荐使用jd-gui工具依次查找jar查看是否有重复包名的jar存在。找到包名重复的jar可以先对比文件大小,查看jar版本等方式做一个评估,文件大小相差不大,版本差异不大的话可以尝试使用如下方法,如果版本差异大的话可以看最后提供的终极方案。在版本差异不大的情况下,其中一个jar大概率可以在两个类库中通用,这个时候将jar文件名更改为一致让e4a认为这是同一个jar只打包其中一个就可以了,需要注意修改文件名后需要在类库的jar包清单文件中也修改文件名,解压resource.zip文件修改libs中的jar文件名修改jar包清单中的文件名将修改后的resource目录压回,需注意目录结构。这种时候可以进行测试如果功能正常那么恭喜你解决了一个类库冲突的问题。

2.两个类库中的jar文件名重复但jar实际内容确不一样,进入e4a安装目录的libs里两个冲突类库的resource.zip中查看是否有文件名一样的jar存在,如果存在那么可以使用如下解决方案,不存在可以考虑是否是其他问题,与第一个方法近视的是都是修改jar文件名,第一个是修改为相同,而这个却是修改为不同,目的是让e4a将这两个jar都合并进去,因为内容不一样类不会重复所以不会出现第一种情况,参照第一种方法修改。

3.两个类库使用不同版本的依赖库且差异很大无法通用但是jar文件名一样,这种时候如果参照第二种方法进行修改,那么就会出现第一种情况,类重复,无法生成dex,下面教大家一种终极方案,可以完美解决这种问题。

终极方案

jar冲突这个问题归根究底,无非也就是类重复,在同一个包下无法存在两个一样的类,那么解决这个问题其实也很简单,修改依赖jar包名就能解决。有两个类库其中一个类库源码的情况下,重新编译冲突的依赖库,修改其包名,然后在类库源码中修改import的路径就可以了,没有类库源码的情况下考虑反编译其中一个类库获得源码,然后修改import路径即可。具体操作方法如下,知道冲突依赖库的包名后可以使用gradle,或者maven等工具下载完整的依赖项目,其中的.....-sources.jar就是源码文件,可以将其导入Android studio或eclipse中修改包名,然后重新编译打包出包名不一样的jar后,类库中import对应路径的类,
需注意重新命名jar,最好使用唯一命名可,如下图。 432.png 438.png


com.bumptech.glide修改为了com.bumptech.glide_rycysm编译类库,安装类库,添加原来冲突的两个类库,编译后你会发现,已经不冲突了,而且功能也正常,使用mt管理器dex编辑器可以看到,已经成功打包进去了另一个组件使用的jar,和我们修改的jar,大工告成。

那么很多朋友会问了,我不会Android studio 也不知道什么gradle,和maven是毛玩意改怎么办呢,别着急,可以先打包一个app然后使用mt管理器,dex编辑器++,把多余的类全部删掉只保留依赖库然后,保存再使用dex编辑器,长按包名点击修改类名修改一个新的包名,最后使用dex转jar,转换为jar一样可以成功修改包名,不过有的依赖库可能会出现问题。

最后如果有类库冲突问题解决不了可以联系忧愁
本帖仅分享个人经验,错误难免,如果错误还望各位多多包涵,和指出。
忧愁的qq:2557594045
欢迎加入安卓开发交流群 970905285
欢迎加入忧愁类库开发交流群 1038857728
31.jpg







评分

参与人数 2易积分 +7 收起 理由
2718859519 + 1 感谢分享,很给力!~
易如意 + 6 此处应该有掌声~

查看全部评分

易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

50

主题

750

积分

0

精华

用户组 

易积分
172
热心
0
好评
1
发表于 2020-5-28 07:52:29 | 显示全部楼层
是不是沙发
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

5

主题

175

积分

0

精华

用户组 

易积分
2322
热心
0
好评
0
发表于 2020-5-28 08:30:08 | 显示全部楼层
点个赞再说
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

17

主题

1650

积分

0

精华

用户组 

易积分
1818
热心
1
好评
3

活跃会员热心会员

发表于 2020-5-28 08:38:28 | 显示全部楼层
路过看看。。。。
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

0

主题

0

积分

0

精华

用户组 

易积分
7
热心
0
好评
0
发表于 2020-5-28 09:43:02 | 显示全部楼层
这个可以!
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

3

主题

493

积分

0

精华

用户组 

易积分
2405
热心
0
好评
0
发表于 2020-5-28 12:02:39 | 显示全部楼层
进来看看了解一下
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

0

主题

8

积分

0

精华

用户组 

易积分
6
热心
0
好评
0
发表于 2020-5-28 12:06:40 | 显示全部楼层
完全不知道  
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

1

主题

201

积分

0

精华

用户组 

易积分
1605
热心
0
好评
0
发表于 2020-5-28 13:17:01 | 显示全部楼层
易如意中文编程学习交流论坛有你更精彩~
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

0

主题

16

积分

0

精华

用户组 

易积分
179
热心
0
好评
0
发表于 2020-5-28 13:46:09 | 显示全部楼层
66666666666666666666
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

0

主题

290

积分

0

精华

用户组 

易积分
257
热心
0
好评
0
发表于 2020-5-28 18:27:51 | 显示全部楼层
学习一下
易如意中文编程学习交流论坛有你更精彩~
回复

使用道具 举报

QQ|sitemap|免责声明|RGB颜色对照表|手机版|小黑屋| 易如意 - E4A中文编程学习交流论坛

GMT+8, 2024-5-26 03:43 , Processed in 0.053592 second(s), 44 queries .

Powered by Discuz! X3.4

© 2001-2018 eruyi.cn

返回顶部