zoukankan      html  css  js  c++  java
  • 通告!Android P新增检测项 应用热修复受重大影响

    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相关信息。

  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/androidga/p/9559140.html
Copyright © 2011-2022 走看看