Tinker Versions Save

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.

v1.9.14.11

3 years ago

已知问题

AGP 4.1 环境下 MultiDex 主 Dex Keep 规则 Hack 会失败,AGP 版本为 4.1 且 minSdkVersion < 21 的项目请先不要接入此版本。

Bugfix & ChangeLog

  1. 兼容 AGP 3.x ~ AGP 4.1
  2. 修改反复 crash 后回退策略:修改后只有主进程能触发回退,其他进程在启动时若闪退次数超限,则只标记移除 patch,不直接回退,这样回退操作会延迟到主进程重启,以避免主副进程版本不一致的问题。
  3. 将反射移除字段 final 标志的逻辑改为 Unsafe 直接获取字段值,以支持 JDK 12+ 环境。(感谢 @fengdai )
  4. oldApk 配置为目录的情况下若 newApk 配置的目录中 apk 与 oldApk 配置的目录中的 apk 不匹配(数量、名称不匹配),则报错中断编译。

v1.9.14.10

3 years ago

Bugfix & ChangeLog

  1. 解决了编译阶段补丁生成时误判 loader 类被修改的问题。
  2. 解决了 BSDiff 导致 StackOverflow 的问题。
  3. 将 TinkerClassLoader 的父类改成了 PathClassLoader,避免 getClassLoader 时的 ClassCastException。
  4. 编译阶段增加对 manifest 里除了四大组件外其他节点修改的校验,如不允许修改 versionCode 等。
  5. 编译阶段增加对 abi 变化的校验,若新包新增了 abi,编译会被中断。

v1.9.14.9

3 years ago

Bugfix & ChangeLog

  1. 适配AGP3.6.0 mapping.txt和R.txt路径。(感谢 @colton.liang )
  2. 修改useDelegateLastClassLoaderOnAPI29AndAbove开关为useDelegateLastClassLoader,修改后此开关将控制 Android 8.0 及以上的系统是否使用 DelegateLastClassLoader 加载 patch。
  3. 修复 base Context 的 ClassLoader 未替换的问题。

v1.9.14.8

3 years ago

Bugfix & ChangeLog

  1. 修改 applicationid 获取的方式,避免设置 flavors 后 applicationid 不对。(感谢 @liuling07 )
  2. 当新包 dex 数量多于旧包的dex数量时编译补丁时会NPE。
  3. 同步 nop 版本和普通版本间的部分差异。(感谢 @simpleton )
  4. 部分编译环境会生成乱序的 catch block,导致误判新包有修改。
  5. 在 API 29 的机器上尝试一些 hack 操作主动触发 dex2oat。
  6. 在 ApplicationLike 中增加接口适配魅族的夜间模式开关。
  7. 修复 nop 版本启动时可能产生的 NPE 问题。

v1.9.14.7

4 years ago

Bugfix & ChangeLog

  1. 彻底消除对 Android Support Library / AndroidX Library 的依赖。
  2. 继续修复 Android Q 上卡顿的问题,理论上此版本加载 patch 后会引入约 800ms ~ 1000ms 的额外开销,暂时没想到好办法规避。
  3. 修复 #1391 中提到的问题。
  4. 修复热修后 SharedLibrary R 类中的资源 ID 与 AssetManager 中 Package ID 不一致导致的资源找不到问题。(多谢 @wanglianbao)
  5. 在给 TinkerLog 设置实现类之前缓存 TinkerLog 打的日志,App 启动后可调用 TinkerLog.printPendingLogs() 将这些日志通过设置的实现类输出。
  6. 修复因魅族机器首次加载 dex 时不生成 oat 导致 patch 加载失败的问题。
  7. 尝试修复 APPLICATION_INFO_CHANGED 事件引起的 ClassLoader 检查异常。
  8. 修复 OTA 之后主副进程状态不一致的问题。

v1.9.14.6

4 years ago

注意:

如果接入此版本后编译时报如下错误:

More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'

在 app 工程的 build.gradle 中加入以下内容即可解决问题:

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Bugfix & ChangeLog

  1. 修复漏传 dexOptDir 导致 Android N 上卡顿,以及 ClassLoader Hack 新方案导致的部分 Android Q 机型卡顿的问题。
  2. 使用新方法解决 Android Q 上 Verify Class 导致的卡顿问题,不再引入 parent PathClassLoader,避免部分框架出现问题。( 这样一来 @yuany 的变更就没机会起作用了,不过还是感谢提交 ci 哇)
  3. 修复了华为方舟补丁接口 isArkHotRuning 总是返回 false 的问题。
  4. 修复了 Gradle 6 和 AS 4.0 下的一些兼容性问题。(感谢 @fmoda3 )
  5. Tinker 运行时库改用 androidx 作为 support 库。(感谢 @fmoda3 )

v1.9.14.5

4 years ago

Bugfix & ChangeLog

  1. 修复 Tinker 在 Android Q 上导致启动和运行卡顿的问题。
  2. 修复已加载 patch 的情况下再次 Apply 一个新 patch 之后马上清除 patch 会导致主进程和其他进程的 patch 版本不一致的问题。

v1.9.14.3

4 years ago

Bugfix & ChangeLog

  1. 修复 TinkerApplicationInlineFence 类没有被自动 keep 到主 dex 的 bug。
  2. 保护 BindService 提高 patch 进程优先级的逻辑偶尔在 unbind 的时候产生的 crash。
  3. 四字节对齐 patch 中的 dex,避免加载时产生 mmap 放大的问题。
  4. 使用 PathClassLoader 触发合成 patch 后的 dex2oat,避免因 patch 失去 jit 支持导致性能问题。(多谢华为的建议)
  5. 修改 maindex keep 规则,避免主 dex 中引入过多的类。

v1.9.14

4 years ago

Bugfix & ChangeLog

  1. 改用Try-catch+特殊方法名隔离Application和ApplicationLike以阻止AOT/JIT内联,避免部分ClassCastException等问题。
  2. 修复补丁在乐固和360加固宝环境下加载失败导致闪退的问题。
  3. 通过BindService提高patch进程优先级,加快补丁合成速度。(感谢 @dodola !)
  4. 继续修复在最新AGP上的部分兼容问题。(感谢 @lizhangqu !)
  5. 增加华为方舟环境补丁支持(作为Tinker的旁路逻辑接入,方舟化补丁的具体使用流程将在华为提交的文档中说明。)

v1.9.13.2

4 years ago

Bugfix & ChangeLog

  1. Fix AGP 3.5.0 上MultiDex Task查找失败。 ( 感谢 @lizhangqu !)
  2. Fix #1127