Tinker 组件修复,踩坑

文章讲述了在应用使用Tinker进行热修复后遇到的两个主要问题:一是需要使用Theme.AppCompat主题避免闪退;二是Tinker在Android10及以上版本的AMShook失败,需要适配新的ActivityTaskManager。解决方案分别是对BaseActivity更改继承关系和适配Android10的API变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、You need to use a Theme.AppCompat theme (or descendant) with this activity.

复现步骤

补丁加载成功之后重启应用,再退出应用重进闪退

日志

TinkerUncaughtHandler catch exception:java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

解决方案

原先的 BaseActivity 继承 AppCompatActivity,改为继承自 Activity
[听说是 appcompat 依赖某个版本开始检查 theme,但是我没有找到合适的版本,暂且使用此方法临时解决]

思考

可能是资源修复存在问题导致,因为在调试其他问题过程中也遇到资源问题
[如 Activity 背景原本是白色的,补丁加载成功重启之后变成了黑色!]

2、Tinker AMS hook 失败?(在 Android 10 上 [及以上?])

注意:运行在 Android 8.1 正常

日志
在这里插入图片描述
在这里插入图片描述

解决方案

适配 Android 10 需 hook android.app.ActivityTaskManager
[看源码或读博客,发现 Android10 之后新增了 ActivityTaskManager 类,之前看源码记忆中注释写到 ‘某个类过于臃肿,后续版本计划拆分’ ]

思考

没有正确代理 startActivity 导致 Tinker 内部没有赋值,加载修复过程直接返回退出

持续更新,欢迎关注~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值