Android-art加载dex文件、混淆release包启动崩溃问题

最近遇到的问题,记录一下。问题本身并不复杂,只是google了很久都没有解决,记录一下,给后来遇到同样问题的兄弟提供一个思路。

问题描述:正常运行debug包是没有问题的,在打包成release后启动崩溃,判断应该是混淆的问题。

日志如下:

 这是更新了最新华为推送sdk之后碰到的问题,一开始以为是混淆文件没有加配置,但是反复确认文档过后发现并不是这个问题,打开apk包之后在dex文件也确实能找到报错的这个路径文件。

(提供另外一个思路:如果是5.0之前的话,加入了分包机制multidex后也有可能是因为对应的文件没有在主dex包,导致启动崩溃。但是在art虚拟机之后不存在这个问题,具体可查询了解art虚拟机) 

既然能在dex找到这个文件,那说明这个provider本身是没问题的,应该是加载的时候出了问题,仔细查看控制台日志,在上面的错误日志之前还有一行提示:

Zip open failed:Failure to verify dex file ....Out-of-order type_ids

由此,判断是type_id有问题,这个是混淆过后自动命名的代码文件的唯一id的集合,可以粗略的理解为art虚拟机解析这个集合的时候出了问题,把crash的apk中的dex文件拿出来看一下(我是用的010Editor),打开name栏type_id_list dex_type_ids,看到如下:

 虽然这个目录都是按字母排序的,但是找起来还是费点时间,可以看到有两个"Lcom/huawei/appgallery/serviceverifykit/d/d/a;",正常混淆的话,是不会存在同样路径+名称的文件的。

解决办法,加上混淆规则2选1

1.直接keep class这个包,不混淆。

2.-repackageclasses ’xx.xx.xx‘ 改变混淆规则,亲测加上以后其他的路径文件又出现重复命名问题了,只能再找目标文件,再改变规则...如果不是保密性高的代码,建议直接使用1

加上后,问题解决,apk打开成功!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值