Open tianzhilanat2010 opened 1 year ago
我看代码 isPatch变量是通过差分包中添加text.dex (包含TinkerTestDexLoad类并且isPatch为true),然后在加载合成好的包后判断是test.dex插入到tinker_classN.apk中,这样以覆盖基础包中的 TinkerTestDexLoad。但是目前看下来是有问题的,无法确保test.dex中的TinkerTestDexLoad class在base包中的TinkerTestDexLoad前面
我使用的插件版本是:com.android.tools.build:gradle:4.0.2;
有两个办法解决:
第一个:可以通过修改minSdkVersion 小于21;
第二个:自定义一个tinker-android-loader库,修改SystemClassLoaderAdder 中的checkDexInstall永远返回true;
implementation("com.tencent.tinker:tinker-android-lib:${TINKER_VERSION}"){
exclude group: 'com.tencent.tinker', module: 'tinker-android-loader' //移除tinker自带的库
}
引入自定义的tinker-android-loader
implementation("xxxxx:xxxxx:1.0.0")
如果是minSdkVersion >=21的话可以添加 allowLoaderInAnyDex=true removeLoaderForAllDex=true
我前面是通过自定义一个tinker-android-loader库修复的。 我再试试 allowLoaderInAnyDex=true removeLoaderForAllDex=true
如果是minSdkVersion >=21的话可以添加 allowLoaderInAnyDex=true removeLoaderForAllDex=true
这个貌似不行
异常类型:app运行时异常/编译异常
手机型号:如:RedMi
手机系统版本:如:Android 11 (如是编译异常,则可以不填)
tinker版本:如:1.9.14.25.1
gradle版本:如:4.10.3
是否使用热更新SDK: TinkerPatch SDK
系统:Mac
Log:2022-11-23 15:04:10.368 11299-11299/com.xxxxx.activity D/Tinker.TinkerInternals: same fingerprint:Redmi/chopin/chopin:11/RP1A.200720.011/V12.5.5.0.RKPCNXM:user/release-keys 2022-11-23 15:04:10.368 11299-11299/com.x x x x x.activity W/Tinker.TinkerInternals: getSafeModeCount: recFileName:safemode_count_rec_com.xxxxx.activity failed, return 0 instead. 2022-11-23 15:04:10.369 11299-11299/com.xxxxx.activity I/Tinker.TinkerInternals: setSafeModeCount: count: 1 2022-11-23 15:04:10.369 11299-11299/com.xxxxx.activity I/Tinker.TinkerDexLoader: classloader: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/
ENs-pZzQPqaICMN1pUyFUQ==/com.xxxxx.activity-AK7qGpzt7v98SVwd-dtldQ==/base.apk"],nativeLibraryDirectories=[/data/app/ENs-pZzQPqaICMN1pUyFUQ==/com.xxxxx.activity-AK7qGpzt7v98SVwd-dtldQ==/lib/arm64, /data/app/~~ENs-pZzQPqaICMN1pUyFUQ==/com.xxxxx.activity-AK7qGpzt7v98SVwd-dtldQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]] 2022-11-23 15:04:10.369 11299-11299/com.xxxxx.activity I/Tinker.TinkerDexLoader: verify dex file:/data/user/0/com.xxxxx.activity/tinker/patch-3cadb0ab/dex/tinker_classN.apk md5, use time: 0 2022-11-23 15:04:10.369 11299-11299/com.xxxxx.activity I/Tinker.ClassLoaderAdder: installDexes dexOptDir: /data/user/0/com.xxxxx.activity/tinker/patch-3cadb0ab/odex, dex size:1 2022-11-23 15:04:10.376 11299-11299/com.xxxxx.activity I/Tinker.ClassLoaderAdder: after loaded classloader: dalvik.system.DelegateLastClassLoader[DexPathList[[zip file "/data/user/0/com.xxxxx.activity/tinker/patch-3cadb0ab/dex/tinker_classN.apk"],nativeLibraryDirectories=[/data/app/ENs-pZzQPqaICMN1pUyFUQ==/com.xxxxx.activity-AK7qGpzt7v98SVwd-dtldQ==/lib/arm64, /data/app/ENs-pZzQPqaICMN1pUyFUQ==/com.xxxxx.activity-AK7qGpzt7v98SVwd-dtldQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]], dex size:1 2022-11-23 15:04:10.376 11299-11299/com.xxxxx.activity I/Tinker.ClassLoaderAdder: checkDexInstall result: false, checker_classloader: dalvik.system.DelegateLastClassLoader[DexPathList[[zip file "/data/user/0/com.xxxxx.activity/tinker/patch-3cadb0ab/dex/tinker_classN.apk"],nativeLibraryDirectories=[/data/app/ENs-pZzQPqaICMN1pUyFUQ==/com.xxxxx.activity-AK7qGpzt7v98SVwd-dtldQ==/lib/arm64, /data/app/ENs-pZzQPqaICMN1pUyFUQ==/com.xxxxx.activity-AK7qGpzt7v98SVwd-dtldQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]] 2022-11-23 15:04:10.376 11299-11299/com.xxxxx.activity E/Tinker.TinkerDexLoader: install dexes failed 2022-11-23 15:04:10.376 11299-11299/com.xxxxx.activity W/Tinker.TinkerLoader: tryLoadPatchFiles:onPatchLoadDexesFail 2022-11-23 15:04:10.426 11299-11299/com.xxxxx.activity I/Tinker.TinkerInternals: setSafeModeCount: count: 0 2022-11-23 15:04:10.556 11299-11299/com.xxxxx.activity E/Reflection: reflect bootstrap failed: