tinker icon indicating copy to clipboard operation
tinker copied to clipboard

1.9.14.18之后删除无用theme异常 & 启动崩溃

Open 18320877747 opened this issue 1 year ago • 0 comments

异常类型:app运行时异常

手机型号:all

手机系统版本: all

tinker版本:1.9.14.18之后

gradle版本:gradle-6.1.1

问题描述: 问题场景一,styles删除无用theme,导致其他theme失效:

  1. 使用tinker 官方demo
  2. 模拟一种场景,给MainActivity增加一个theme, 如下 image styles.xml中的定义如下, 在styles 中我增加AThem和BTheme,其中ATheme没有被任何地方引用: image
  3. 打基础包后正常,BTheme正常生效,如图 1706152666233
  4. 删除styles.xml中的ATheme, 同时在activity_main中随便加点东西来确认补丁生效,如下 image image
  5. 打热补丁,并应用,MainActivity指定BTheme的失效 image 6.分析生成的R文件 image image ID发生了移位(我不确定这个移位是否是正常的,1.9.14.18的表现是ATheme删除后 BTheme的ID是不会发生变化的)

问题场景二(同样是使用 1.9.14.18之后的版本出现的),启动崩溃:

  1. 同样使用tinker 官方demo
  2. 在打基础包时指定了AndroidManifest application的 android:icon="@mipmap/ic_launcher"
  3. 同时在mipmap中增加几个无用的png资源,要保证一点的是这几个资源生成R文件时ID比ic_launcher先生成,比如下图: image image
  4. 基础包正常
  5. 删除除ic_launcher的其他任何一个资源,比如删除arrow_loading_1, 然后打patch并安装patch,启动崩溃,堆栈如下 image 找不到ic_launcher对应的id, 反复测试发现,只有application指定的ic_launcher在生成mipmap分配的ID的最后一个会出现问题 image 这个id发生了变化

18320877747 avatar Jan 25 '24 04:01 18320877747