最近App在android11上出现了一个诡异的native 崩溃,很不容易出现,但都是有个特点就是安装App后过一段时间才会出现,杀进程没用,覆盖安装同一个apk,崩溃立刻消失,日志为如下:

1243 08-02 15:44:16.921 18134 18134 F pace.android:p: entrypoint_utils-inl.h:101] Inlined method resolution crossed dex file boundary: from void com.xxx.l1ll1lIIl1I. Il1llll111.Il1IIl1lllII1.IIIIIlI1IIIl1$lIIIl11ll11.<init>() in /data/app/~~dZ1qJ5hUv_FgD08Tr9d4pg==/com.xxx.android-x7T-p_8Jw69_1QmnZXhP6g==/base.apk/0x77fd7cf1d0 to void android.net.wifi.IWifiScanner$Stub.<init>() in /apex/com.android.wifi/javalib/framework-wifi.jar/0xb4000077ed7ca590. This must be due to duplicate classes or playing wrongly with class loaders. The  runtime is in an unsafe state.

搜索系统art源码中抛出异常的地方:

 50 inline ArtMethod* GetResolvedMethod(ArtMethod* outer_method,51                                     const CodeInfo& code_info,52                                     const BitTableRange<InlineInfo>& inline_infos)53     REQUIRES_SHARED(Locks::mutator_lock_) {...94     if (UNLIKELY(inlined_method->GetDexFile() != method->GetDexFile())) {95       // TODO: We could permit inlining within a multi-dex oat file and the boot image,96       // even going back from boot image methods to the same oat file. However, this is97       // not currently implemented in the compiler. Therefore crossing dex file boundary98       // indicates that the inlined definition is not the same as the one used at runtime.99       bool target_sdk_at_least_p =
100           IsSdkVersionSetAndAtLeast(Runtime::Current()->GetTargetSdkVersion(), SdkVersion::kP);
101       LOG(target_sdk_at_least_p ? FATAL : WARNING)
102           << "Inlined method resolution crossed dex file boundary: from "
103           << method->PrettyMethod()
104           << " in " << method->GetDexFile()->GetLocation() << "/"
105           << static_cast<const void*>(method->GetDexFile())
106           << " to " << inlined_method->PrettyMethod()
107           << " in " << inlined_method->GetDexFile()->GetLocation() << "/"
108           << static_cast<const void*>(inlined_method->GetDexFile()) << ". "
109           << "This must be due to duplicate classes or playing wrongly with class loaders. "
110           << "The runtime is in an unsafe state.";
111     }
112     method = inlined_method;
113   }
115   return method;
116 }

发现大致意思就是,我们App中集成了framwwork的android.net.wifi.IWifiScanner这个类,在系统dexopt之后发生了内联优化,导致这个系统的类被内敛到odex中了,然后被系统检测到caller与callee处于不同的dex file,也就是在App的odex中有一份,在系统framework-wifi.jar中也有一份,所以主动发起abort(inline不允许跨dex文件),导致应用出现闪退等异常问题,但是sdk小于P的话,只会报WARNING而不是FATAL。
于是在安装了App之后手动对apk进行dexopt

adb shell cmd package compile -m speed -f  packageName

这个崩溃就必现了,这样就比较好分析了,只需要防止这个类被dex优化内敛就行了,加个try-catch就可以。
参考:
Android疑难杂症——因内联优化导致9.0机型Native Crash
Android P新增检测项 应用热修复受重大影响

android内联优化导致Inlined method resolution crossed dex file boundary相关推荐

  1. Android P内联优化导致的一个诡异Bug

    问题背景 最近,我们的业务在动态加载一款第三方游戏时出现了奇怪的现象,本地开发测试体验良好,但是使用CI构建的正式包体验时会出现启动闪退. 问题分析 分析日志 首先,我们自然而然看了下Crash日志, ...

  2. go 基准测试 找不到函数_Go 中的内联优化 | Linux 中国

    本文讨论 Go 编译器是如何实现内联的,以及这种优化方法如何影响你的 Go 代码.https://linux.cn/article-12176-1.html作者:Dave Cheney译者:Xiaob ...

  3. 【JVM】JVM 内联优化

    文章目录 1.概念 2.过程 3.场景 4.案例 5.案例2 6.java内联配置 7.方法内联的规则 8.案例 8.1 内联案例1 1.概念 内联概念:把函数调用的方法直接内嵌到方法内部,减少函数调 ...

  4. 安卓TV插件化9.0内联崩溃原因及解决方案

    安卓 TV 端应用的更新比较困难,一方面是受限于各个设备厂商的规则,应用更新策略比较慢,另一方面是 TV 用户主动更新的意愿比较低.因此插件化热更新在安卓 TV 端就成为了有效更新应用业务能力的必要技 ...

  5. 内联函数和编译器对Go代码的优化

    什么是内联函数 图片版权:Renee French. 在很多讲 Go 语言底层的技术资料和博客里都会提到内联函数这个名词,也有人把内联函数说成代码内联.函数展开.展开函数等等,其实想表达的都是 Go ...

  6. Javascript性能优化【内联缓存】 V8引擎特性

    javascript 是单线程.动态类型语言,那么我们在编码时候如何编写性能最优代码呢?下面将讲解V8引擎的内联优化.利用内联缓存这个特性我们可以编写更加优秀的代码. 什么是内联缓存 引用官方的描述: ...

  7. 抖音Android包体积优化探索:从Class字节码入手精简DEX体积

    前言 众所周知,应用安装包的体积会十分影响用户的应用下载速度和安装速度.据 GoolgePlay 平台对外发布相关的包大小对转化率影响的数据,我们可以看到随着包大小的增加,安装转化率总体呈下降的趋势. ...

  8. 深入探索 Android 包体积优化(匠心制作-下)

    前言 成为一名优秀的Android开发,需要一份完备的 知识体系,在这里,让我们一起成长为自己所想的那样~. 在 Android 性能优化的知识体系当中,包体积优化一直被排在优先级比较低的位置,从而导 ...

  9. 提高C++性能的编程技术笔记:内联+测试代码

    内联类似于宏,在调用方法内部展开被调用方法,以此来代替方法的调用.一般来说表达内联意图的方式有两种:一种是在定义方法时添加内联保留字的前缀:另一种是在类的头部声明中定义方法. 虽然内联方法的调用方式和 ...

最新文章

  1. 中国科学:拟南芥二半萜类化合物调控根系微生物组
  2. matlab丢失icuuc54,icuuc56.dll下载|
  3. linux 擦 日志,linux日志清除脚本(擦屁股必备)
  4. gh0st源码分析与远控的编写(二)
  5. leetcode 148. Sort List | 148. 排序链表(最优解归并排序,O(1)空间)
  6. html5 接收蓝牙广播_蓝牙定位技术浅析(化工厂应用)
  7. java线程池返回线程状态_Java线程的不同状态
  8. C#经典系列-键值对
  9. Python 字符编码 b
  10. 程序员都知道的那点(97件)事儿!
  11. 兄弟连新版PHP视频教程(共346讲)
  12. lj245a引脚功能图_74HC245引脚图应用电路与中文资料
  13. ios 加速计效果实现
  14. 负重下肢外骨骼的运动意图预测和运动状态辨识
  15. 苹果宣布 2022 年 Apple 设计大奖得主
  16. 面试必备--手写Promise.all与.race
  17. python操作pdf与图片相互转换
  18. 深圳市梅沙尖登山攻略(2019.8.10 深圳盐田检查站或者东部华侨城出发)
  19. 3.5寸服务器硬盘v4,六碟巨兽 希捷Enterprise Capacity 3.5 HDD v4评测
  20. beast软件linux用法,显卡设置项 - 黑苹果驱动高手篇 MultiBeast用法进阶_Linux教程_Linux公社-Linux系统门户网站...

热门文章

  1. RationalDMIS 2020 图纸中位置度评价标有最大实体要求如何实现?
  2. Spring Cloud学习笔记(一)概要
  3. Google Earth Engine(GEE)批量下载NPP产品
  4. 01-02istio架构概念了解
  5. golang中的图像image处理之马赛克效果
  6. DedeCms5.7自由列表使用教程
  7. 魔乐科技安卓开发教程----李兴华----11使用摄像头拍照
  8. 从投资者的视角——区块链简史
  9. 水果之王猕猴桃之系列八(猕猴桃的营养诉说)
  10. 豌豆荚里有没有一种软件可以根据父母的照片测试出未来官宝宝的样子,父母照片重叠是宝宝的模样?看到关晓彤,网友:这颜值没谁了!...