最近遇到的问题,记录一下。问题本身并不复杂,只是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打开成功!