博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通告!Android P新增检测项 应用热修复受重大影响
阅读量:5012 次
发布时间:2019-06-12

本文共 863 字,大约阅读时间需要 2 分钟。

Google在Android P中添加了新的检测项,对国内大多数应用造成了严重影响:在调用resolve inline method时,如果检测到caller与callee处于不同的dex file,会主动发起abort(inline不允许跨dex文件),导致应用出现闪退等异常问题。

1、问题场景

由于国内大多数应用基本上都集成了热修复功能,所以 Android P的这个特性对国内应用影响较大。目前发现主要有两种情况:

场景一

应用原始apk中的dex A和从应用服务端下载的热修复dex B存在重复类,触发热修复且系统后台优化inline编译后,便会出现此问题。

场景二

由 classloader A 加载的 class1 调用一个由 classloader B 加载的 class2里的某个 inline 方法,将导致应用闪退。

2、应用如何自检?

1.首先建议应用在Android P中测试验证是否有该问题:

  • adb shell cmd package compile –m speed –f 应用包名 (inline编译)。
  • 启动应用,构造热修复场景,在应用侧触发热修复。
  • 热修复完成之后,重启应用,检测有无闪退和无响应问题。

2.通过关键日志分析确认问题:

如果问题日志中有这个关键日志:This must be due to duplicate classes or playing wrongly with class loaders,可以确定就是该问题。

如下图:

3、修复建议

1.不要将ROM中预置的jar包打包至apk。

2.不要使用相同的class loader加载重复类。

3.如果必须要有重复类的话,避免内联现象(比如,在不期望被inline的函数里面加try catch,这样compiler就不会将此函数inline)。

关注安卓绿色联盟公众号,了解更多Android P相关信息。

转载于:https://www.cnblogs.com/androidga/p/9559140.html

你可能感兴趣的文章
JAVA面向对象三大特性总结
查看>>
guid
查看>>
Python中出现“TabError: inconsistent use of tabs and spaces in indentation”问题的解决
查看>>
ajax请求
查看>>
js学习总结----DOM增删改和应用
查看>>
希尔伯特矩阵(Hilbert matrix)
查看>>
(20)sopel算法
查看>>
学习总结 javascript 闭包
查看>>
实验吧一个小坑注入
查看>>
【 D3.js 高级系列 — 8.0 】 打标
查看>>
Mac必备软件推荐
查看>>
Android Gson深入分析
查看>>
display:flow-root
查看>>
判读字符串是否为空的全局宏-分享
查看>>
iOS中Block的基础用法
查看>>
mac 终端 使用ftp命令
查看>>
22-reverseString-Leetcode
查看>>
Centos 开机自动联网
查看>>
cocos2dx使用lua和protobuf
查看>>
使用Spring配合Junit进行单元测试的总结
查看>>