EMAS热修复Sophix适配App加固的技术方案

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 本文将介绍阿里云EMAS热修复Sophix适配App加固技术方案。

一、问题描述

某阿里云EMAS客户的APK基于最新的线上版本发布了第十个补丁发布1小时后在崩溃检测平台收集到crash日志,并收到用户反馈:部分手机上的APP会闪退

客户开发人员紧急上报EMAS技术支持,双方沟通后初步判断是补丁加载导致APP闪退。同时我们本地和客户本地经过多次、多轮测试,没有一台手机可以复现闪退,此时崩溃率已达到9% 左右,经讨论决定先回滚本次补丁。


二、调查难点

难点一:该问题当时无法在本地复现,技术支持同学经过充分、多次测试,包括用户出问题的同款手机,均无法复现闪退问题。

难点二:日志平台抓取的日志signal 6为系统层面日志,无法指导定位代码层面问题。 唯一一条有用日志:/data/app/com.xxx.xxx-l-Lc_A9dXeo8oWIupXFKxA==/oat/arm64/base.odex。

*备注:EMAS远程日志提供客户端全量日志拉取、诊断、管理能力,帮助开发者建立分钟级线上问题定位能力


三、调查方向

1.日志抓到的报错对代码没有用,但是可以看出来是odex问题。我们需要反编译APK文件,查看具体class内容。

2.在APP中关键节点加日志, 判断该类是否成功加载到补丁里以及加载补丁的时候有没有加载这个类,两个重要节点


四、调查经过

第一阶段:根据抓到的日志显示崩溃在odex中:

image.png

怀疑和加固有关,经确认,客户使用了加固,但是日志上看走的是非加固模式,我们提供热修复走加固模式的API(下图,适配后重新测试。

image.png

第二阶段:客户走加固模式后,提供了测试包(APK未加固),经测试有10%的手机会崩溃(如荣耀、华为品牌的手机,失败日志如下:)

image.png

日志上看是崩溃在外部类调用内部类的checkInputTxt方法上,通过方法签名看,外部类是旧包中的,内部类是补丁包的,但是外部类有变更,理论上应该加载补丁中的外部类。此时,我们怀疑外部ChatRoomManager没打包进补丁包反编译补丁包检查如下图

image.png

image.png

image.png

可以看出外部打包进了补丁包,此步骤和流程没有问题,但是从补丁加载日志上看,加载的补丁包中也有外部类,此时我们怀疑外部类在加载补丁之前已经被类加载器加载。(由于部分机型必现崩溃,部分机型正常,开始怀疑不同机型系统的类加载机制问题,但是普遍认知中类加载机制一般不会出问题。)

第三阶段:此时重点关注类加载的时机和类加载器对象:加了类加载过程的日志和类加载器哈希打印。

image.png

日志中崩溃的设备在加载补丁包前后都没有看到外部类的加载日志。此时确定是类加载器的问题。考虑到加固本身也会使用自定义类加载器,让客户对APK进行加固测试正常。


五、问题解决

基于结论,我们给客户适配了加固模式测试,加固模式会使用自己的类加载器,避免了双亲委派机制失效的影响。经过monkey测试30台机器均无问题,至此反馈客户问题解决。


六、总结

  1. 匿名内部类的热修的需要加一些java代码来确保所有的方法都被打进补丁包。
  2. 适配加固的方案需要严格适配加固模式。
目录
相关文章
|
3天前
|
前端开发 Android开发 iOS开发
应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
【2月更文挑战第31天】应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
34 2
|
3天前
|
运维 监控 测试技术
应用研发平台EMAS常见问题之热修复补丁导致线上出常见问题如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
26 0
|
3天前
|
运维 监控 安全
应用研发平台EMAS常见问题之sophix ios flutter热更新如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
84 0
|
5月前
|
API 开发工具 iOS开发
在应用研发平台EMAS中,ios的推送有没有办法在app端设置在收到通知后是否展示的逻辑
在应用研发平台EMAS中,ios的推送有没有办法在app端设置在收到通知后是否展示的逻辑
35 1
|
8月前
应用研发平台EMAS的公共云热修复功能
应用研发平台EMAS的公共云热修复功能
46 1
|
9月前
在EMAS应用研发平台上进行热修复补丁的生成可能遇到的问题
在EMAS应用研发平台上进行热修复补丁的生成可能遇到的问题
59 1
|
10月前
|
机器学习/深度学习 自然语言处理 小程序
阿里云EMAS-专家测试服务,提供项目兼容性测试,适合APP等项目测试
如何确定自己的APP等项目是否能在阿里云服务器上运行,是很多用户在购买阿里云产品完成业务上云之前比较关心的问题,为此,阿里云提供了EMAS-专家测试服务,一站式移动测试平台,用户只需提交测试需求,即可轻松体验高质量专家团队测试服务。
222 0
阿里云EMAS-专家测试服务,提供项目兼容性测试,适合APP等项目测试
|
3天前
|
运维 监控 Android开发
应用研发平台EMAS产品常见问题之热更新和云发布不能共存如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
3天前
|
缓存 运维 Android开发
应用研发平台EMAS产品常见问题之私有云部署失败如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
3天前
|
缓存 测试技术 开发工具
应用研发平台EMAS产品常见问题之拿不到推送如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。