tinker
tinker copied to clipboard
1.9.14.18之后删除无用theme异常 & 启动崩溃
异常类型:app运行时异常
手机型号:all
手机系统版本: all
tinker版本:1.9.14.18之后
gradle版本:gradle-6.1.1
问题描述: 问题场景一,styles删除无用theme,导致其他theme失效:
- 使用tinker 官方demo
- 模拟一种场景,给MainActivity增加一个theme, 如下
styles.xml中的定义如下, 在styles 中我增加AThem和BTheme,其中ATheme没有被任何地方引用:
- 打基础包后正常,BTheme正常生效,如图
- 删除styles.xml中的ATheme, 同时在activity_main中随便加点东西来确认补丁生效,如下
- 打热补丁,并应用,MainActivity指定BTheme的失效
6.分析生成的R文件
ID发生了移位(我不确定这个移位是否是正常的,1.9.14.18的表现是ATheme删除后 BTheme的ID是不会发生变化的)
问题场景二(同样是使用 1.9.14.18之后的版本出现的),启动崩溃:
- 同样使用tinker 官方demo
- 在打基础包时指定了AndroidManifest application的 android:icon="@mipmap/ic_launcher"
- 同时在mipmap中增加几个无用的png资源,要保证一点的是这几个资源生成R文件时ID比ic_launcher先生成,比如下图:
- 基础包正常
- 删除除ic_launcher的其他任何一个资源,比如删除arrow_loading_1, 然后打patch并安装patch,启动崩溃,堆栈如下
找不到ic_launcher对应的id, 反复测试发现,只有application指定的ic_launcher在生成mipmap分配的ID的最后一个会出现问题
这个id发生了变化