Open qianqianyixia opened 1 year ago
+1
使用tinker-sample-android,LOAD PATCH成功之后, 第一次KILL SELF 打开demo patch加载成功, 再次 KILL SELF 打开demo patch加载不成功
不知道哪里有问题
只生效一次的问题 解法也比较常见 在自己的项目中 引入一个 tinker-android-loader-fix(工程内容是tinker-android-loader的拷贝)的工程 用来替换掉 tinker-android-loader 工程 替换办法也较为容易 api("com.tencent.tinker:tinker-android-lib:$tinker_version") { exclude module: 'tinker-android-loader' } 然后 对 fix工程中的 SystemClassLoaderAdder.checkDexInstall 方法屏蔽掉 直接返回true不检查 然后再次打基准包 再打补丁包尝试下 能否正常使用
只生效一次的问题 解法也比较常见 在自己的项目中 引入一个 tinker-android-loader-fix(工程内容是tinker-android-loader的拷贝)的工程 用来替换掉 tinker-android-loader 工程 替换办法也较为容易 api("com.tencent.tinker:tinker-android-lib:$tinker_version") { exclude module: 'tinker-android-loader' } 然后 对 fix工程中的 SystemClassLoaderAdder.checkDexInstall 方法屏蔽掉 直接返回true不检查 然后再次打基准包 再打补丁包尝试下 能否正常使用
这样改是可以的,就是担心 既然tinker自己有意这样写 我们再强行给改掉 会不会有问题啊 目前测试发现使用 1.9.14.21版本的没有问题的
@qianqianyixia 有更好的解决方案了吗
确实是,降低版本到 1.9.14.21 就好了,感觉这个方案比上面不check 的好些
Issue/提问须知
问题描述: 补丁安装成功重启后生效后又被自动clean掉了 测试中发现1.9.14.22-25版本中都会有次问题,18-21版本均正常 1 :补丁能安装成功但是很慢需要90s,期间一直有报错日志(java.lang.IllegalStateException: Cannot query transaction code of performDexOptSecondary. at com.tencent.tinker.loader.TinkerDexOptimizer.performDexOptSecondaryByTransactionCode(TinkerDexOptimizer.java:340)) 2:补丁重启生效后 日志里输出 Tinker Exception:checkDexInstall failed Tinker.DefaultLoadReporter: tinker load exception, welcome to submit issue to us: https://github.com/Tencent/tinker/issues 执行checkAndCleanPatch 导致补丁被清除