Tencent / tinker

Tinker is a hot-fix solution library for Android, it supports dex, library and resources update without reinstall apk.
Other
17.1k stars 3.33k forks source link

1.9.14.5版本开启protectedApp,Android 5.1、6.0.1、8.0合成失败 #1331

Open BzCoder opened 4 years ago

BzCoder commented 4 years ago

异常类型:

之前由于Android10无法修复,所以从1.9.9升级到1.9.14.5。

在1.9.14.5中,加固包,补丁开启了protectedApp = true。Android 9 10 合成完全没有问题,修复速度合成很快。

但在Android 5.1 6.0.1 8.0上,无论安装的是未加固包还是加固包,均合成失败。但是以上失败版本在1.9.9都可以正常修复。

使用未加固包且补丁关闭protectedApp选项,以上版本可以成功。

手机系统版本与手机型号: Android 5.1(TAG_TL100) Android 6.0.1(RedMi Note 3) Android 8.0 (EVA_AL10)

tinker版本:1.9.14.5

gradle版本:3.1.4

是否使用热更新SDK:TinkerPatch SDK

系统:Mac

以下为报错信息

01-10 15:39:56.413 21508-21543/? E/Tinker.ParallelDex: Failed to optimize dex: /data/data/com.leoao.fitness/tinker/patch-d68150b0/dex/tinker_classN.apk
    java.io.IOException: Failed to open dex file '/data/data/com.leoao.fitness/tinker/patch-d68150b0/dex/tinker_classN.apk' from memory: Unrecognized version number in /data/data/com.leoao.fitness/tinker/patch-d68150b0/dex/tinker_classN.apk: 0 3 9 
        at dalvik.system.DexFile.openDexFileNative(Native Method)
        at dalvik.system.DexFile.openDexFile(DexFile.java:295)
        at dalvik.system.DexFile.<init>(DexFile.java:111)
        at dalvik.system.DexFile.loadDex(DexFile.java:151)
        at com.tencent.tinker.loader.TinkerDexOptimizer$OptimizeWorker.run(TinkerDexOptimizer.java:134)
        at com.tencent.tinker.loader.TinkerDexOptimizer.optimizeAll(TinkerDexOptimizer.java:82)
        at com.tencent.tinker.loader.TinkerDexOptimizer.optimizeAll(TinkerDexOptimizer.java:59)
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.dexOptimizeDexFiles(DexDiffPatchInternal.java:371)
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.patchDexExtractViaDexDiff(DexDiffPatchInternal.java:194)
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.tryRecoverDexFiles(DexDiffPatchInternal.java:85)
        at com.tencent.tinker.lib.patch.UpgradePatch.tryPatch(UpgradePatch.java:157)
        at com.tencent.tinker.lib.service.TinkerPatchService.doApplyPatch(TinkerPatchService.java:141)
        at com.tencent.tinker.lib.service.TinkerPatchService.onHandleIntent(TinkerPatchService.java:96)
        at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
        at android.os.Handler.dispatchMessage(Handler.java:111)
        at android.os.Looper.loop(Looper.java:194)
        at android.os.HandlerThread.run(HandlerThread.java:61)
     Caused by: java.io.IOException: Failed execv(/system/bin/dex2oat --runtime-arg -classpath --runtime-arg  --instruction-set=arm --instruction-set-features=default --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --dex-file=/data/data/com.leoao.fitness/tinker/patch-d68150b0/dex/tinker_classN.apk --oat-fd=31 --oat-location=/data/data/com.leoao.fitness/tinker/patch-d68150b0/odex/tinker_classN.dex --runtime-arg -Xms64m --runtime-arg -Xmx512m) because non-0 exit status
        at dalvik.system.DexFile.openDexFileNative(Native Method) 
        at dalvik.system.DexFile.openDexFile(DexFile.java:295) 
        at dalvik.system.DexFile.<init>(DexFile.java:111) 
        at dalvik.system.DexFile.loadDex(DexFile.java:151) 
        at com.tencent.tinker.loader.TinkerDexOptimizer$OptimizeWorker.run(TinkerDexOptimizer.java:134) 
        at com.tencent.tinker.loader.TinkerDexOptimizer.optimizeAll(TinkerDexOptimizer.java:82) 
        at com.tencent.tinker.loader.TinkerDexOptimizer.optimizeAll(TinkerDexOptimizer.java:59) 
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.dexOptimizeDexFiles(DexDiffPatchInternal.java:371) 
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.patchDexExtractViaDexDiff(DexDiffPatchInternal.java:194) 
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.tryRecoverDexFiles(DexDiffPatchInternal.java:85) 
        at com.tencent.tinker.lib.patch.UpgradePatch.tryPatch(UpgradePatch.java:157) 
        at com.tencent.tinker.lib.service.TinkerPatchService.doApplyPatch(TinkerPatchService.java:141) 
        at com.tencent.tinker.lib.service.TinkerPatchService.onHandleIntent(TinkerPatchService.java:96) 
        at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
        at android.os.Handler.dispatchMessage(Handler.java:111) 
        at android.os.Looper.loop(Looper.java:194) 
        at android.os.HandlerThread.run(HandlerThread.java:61) 
     Caused by: java.io.IOException: Failed to find dex file '/data/data/com.leoao.fitness/tinker/patch-d68150b0/dex/tinker_classN.apk' in oat location '/data/data/com.leoao.fitness/tinker/patch-d68150b0/odex/tinker_classN.dex': Failed to find existing oat file at /data/data/com.leoao.fitness/tinker/patch-d68150b0/odex/tinker_classN.dex: File size of 0 bytes not large enough to contain ELF header of 52 bytes: '/data/data/com.leoao.fitness/tinker/patch-d68150b0/odex/tinker_classN.dex'
        at dalvik.system.DexFile.openDexFileNative(Native Method) 
        at dalvik.system.DexFile.openDexFile(DexFile.java:295) 
        at dalvik.system.DexFile.<init>(DexFile.java:111) 
        at dalvik.system.DexFile.loadDex(DexFile.java:151) 
        at com.tencent.tinker.loader.TinkerDexOptimizer$OptimizeWorker.run(TinkerDexOptimizer.java:134) 
        at com.tencent.tinker.loader.TinkerDexOptimizer.optimizeAll(TinkerDexOptimizer.java:82) 
        at com.tencent.tinker.loader.TinkerDexOptimizer.optimizeAll(TinkerDexOptimizer.java:59) 
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.dexOptimizeDexFiles(DexDiffPatchInternal.java:371) 
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.patchDexExtractViaDexDiff(DexDiffPatchInternal.java:194) 
        at com.tencent.tinker.lib.patch.DexDiffPatchInternal.tryRecoverDexFiles(DexDiffPatchInternal.java:85) 
        at com.tencent.tinker.lib.patch.UpgradePatch.tryPatch(UpgradePatch.java:157) 
        at com.tencent.tinker.lib.service.TinkerPatchService.doApplyPatch(TinkerPatchService.java:141) 
        at com.tencent.tinker.lib.service.TinkerPatchService.onHandleIntent(TinkerPatchService.java:96) 
        at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 
        at android.os.Handler.dispatchMessage(Handler.java:111) 
        at android.os.Looper.loop(Looper.java:194) 
        at android.os.HandlerThread.run(HandlerThread.java:61) 
xjy2061 commented 4 years ago

遇到同样的的问题,使用的是1.9.14.6

betroy commented 4 years ago

Tinker:1.9.14.5 使用爱加密加固后 也是同样问题 目前测试下来只有Android 10、9 能正常合成

YummyLau commented 4 years ago

@betroy @xjy2061 @BzCoder 各位朋友,这个问题目前你们有解决方法吗?

TracyZhangLei commented 4 years ago

坑是越来越多了。

YummyLau commented 4 years ago

目前我是可以的。只是确认了1.9.14.6版本存在加固bug,参考 https://github.com/Tencent/tinker/issues/1391 作者已经在开发分支修复了。