重磅:Android P新增检测项 应用热修复受重大影响

发布于 2019-09-26 作者 风铃 69次 浏览 版块 前端

热文导读 | 点击标题阅读

金九银十跳槽季如何进阶找到合适满意的工作?

要么干,要么辞职,千万别混

一名IT经理是如何把项目带崩的。。。

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,可以确定就是该问题。

如下图:


06-20 19:07:24.597 30376 30376 F m.taobao.taoba: entrypoint_utils-inl.h:94] Inlined method resolution crossed dex file boundary: from void com.ali.mobisecenhance.Init.doInstallCodeCoverage(android.app.Application, android.content.Context) in /data/app/com.taobao.taobao-YPDeV7WbuyZckOfy-5AuKw==/base.apk!classes3.dex/0xece238f0 to void com.ali.mobisecenhance.code.CodeCoverageEntry.CoverageInit(android.app.Application, android.content.Context) in /data/user/0/com.taobao.taobao/files/storage/com.taobao.maindex/dexpatch/1111/com_taobao_maindex.zip!classes4.dex/0xebda4320. 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)。


华为终端开放实验室

2018年8月29日

想快速提升自己吗?快加入我们的知识星球吧,如下:

你有好的文章想和大家分享欢迎投稿,直接向我投递文章链接即可


最后,国庆福利来了,我们的知识星球已达到1000人了,之前说过到达1000人时将大大幅涨价到169元,为了反馈大家对我们的关注和厚爱,特此维持现价99元最后一天,今天后(今晚 00:00)后将涨到169元,欢迎大家加入我们的知识星球,更多星球信息参见:

如何进阶成为Java和Android架构师?

金九银十跳槽季如何进阶找到合适满意的工作?

说两件事

微信扫描或者点击上方二维码领取Android\Python\AI\Java等高级进阶资源

更多学习资料点击下面的“阅读原文”获取

收藏
暂无回复