Tencent / tinker

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

4.4.4加载插件,运行到MultiDex.install()抛Class ref in pre-verified class resolved to unexpected implementation #1053

Open wangjkjuststart opened 5 years ago

wangjkjuststart commented 5 years ago

问题描述:补丁加载成功,重启崩溃,(Android7,8,9没问题)

异常类型:app运行时异常

手机型号:Lenovo K80M

手机系统版本:Android 4.4.4

tinker版本:1.9.9

gradle版本:2.3.0

build.gradle配置: dex { dexMode = "jar" pattern = ["classes*.dex", "assets/secondary-dex-?.jar"] loader = [] }

是否使用热更新SDK:否

系统:Win10

Application 初始化:

public class AppRootContext extends TinkerApplication {

    static {
        try {
            Class<?> delegateClass = Class.forName("com.lenovo.club.app.AppContext");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public AppRootContext() {
        super(7, "com.lenovo.club.app.AppContext", "com.tencent.tinker.loader.TinkerLoader", false);
    }
}

堆栈/日志:

03-28 16:15:39.429 D/Tinker.DefaultAppLike: onBaseContextAttached:
03-28 16:15:39.449 W/dalvikvm: Unable to resolve superclass of Lcom/tencent/tinker/lib/service/TinkerPatchService$JobServiceRunner; (75)
03-28 16:15:39.449 W/dalvikvm: Link of class 'Lcom/tencent/tinker/lib/service/TinkerPatchService$JobServiceRunner;' failed
03-28 16:15:39.449 E/dalvikvm: Could not find class 'com.tencent.tinker.lib.service.TinkerPatchService$JobServiceRunner', referenced from method com.tencent.tinker.lib.service.TinkerPatchService.getExpectedRealRunnerClass
03-28 16:15:39.449 W/dalvikvm: VFY: unable to resolve const-class 3399 (Lcom/tencent/tinker/lib/service/TinkerPatchService$JobServiceRunner;) in Lcom/tencent/tinker/lib/service/TinkerPatchService;
03-28 16:15:39.449 E/dalvikvm: Could not find class 'android.app.job.JobInfo$Builder', referenced from method com.tencent.tinker.lib.service.TinkerPatchService.runPatchServiceByJobScheduler
03-28 16:15:39.449 W/dalvikvm: VFY: unable to resolve new-instance 71 (Landroid/app/job/JobInfo$Builder;) in Lcom/tencent/tinker/lib/service/TinkerPatchService;
03-28 16:15:39.449 D/dalvikvm: DexOpt: unable to opt direct call 0x0160 at 0x19 in Lcom/tencent/tinker/lib/service/TinkerPatchService;.runPatchServiceByJobScheduler
03-28 16:15:39.449 D/dalvikvm: DexOpt: unable to opt direct call 0x0563 at 0x1e in Lcom/tencent/tinker/lib/service/TinkerPatchService;.runPatchServiceByJobScheduler
03-28 16:15:39.469 I/Tinker.ComponentHotplug: method install() is not invoked, ignore ensuring operations.
03-28 16:15:39.469 D/Tinker.DefaultAppLike: onCreate
03-28 16:15:40.009 I/Tinker.PatchInfo: rewritePatchInfoFile file path:/data/data/com.lenovo.club.app/tinker/patch.info , oldVer:, newVer:a08f552520c6926f5c3ac099ad3a1763, fingerprint:Lenovo/K80M/K80M:4.4.4/S100/VIBEUI_V2.0_1535_1.144.1_ST_K80M:user/release-keys, oatDir:odex
03-28 16:15:40.019 I/Tinker.PatchFileUtil: safeDeleteFile, try to delete path: /data/data/com.lenovo.club.app/tinker_temp/temp.apk
03-28 16:15:40.139 I/Tinker.PatchFileUtil: safeDeleteFile, try to delete path: /storage/emulated/legacy/LenovoClub/download/V3.0.2/patch-1.apk
03-28 16:15:40.219 D/Tinker.DefaultAppLike: onTrimMemory level:5
03-28 16:15:40.379 D/Tinker.DefaultAppLike: onTrimMemory level:5
03-28 16:16:04.579 W/Tinker.TinkerLoader: tryLoadPatchFiles:isEnabledForResource:true
03-28 16:16:04.579 I/Tinker.PatchInfo: rewritePatchInfoFile file path:/data/data/com.lenovo.club.app/tinker/patch.info , oldVer:a08f552520c6926f5c3ac099ad3a1763, newVer:a08f552520c6926f5c3ac099ad3a1763, fingerprint:Lenovo/K80M/K80M:4.4.4/S100/VIBEUI_V2.0_1535_1.144.1_ST_K80M:user/release-keys, oatDir:odex
03-28 16:16:04.589 I/Tinker.TinkerLoader: tryLoadPatchFiles:success to rewrite patch info, kill other process.
03-28 16:16:04.589 W/Tinker.TinkerInternals: getSafeModeCount: preferName:tinker_own_config_com.lenovo.club.app count:0
03-28 16:16:04.599 W/Tinker.TinkerInternals: setSafeModeCount: preferName:tinker_own_config_com.lenovo.club.app count:1
03-28 16:16:04.599 I/Tinker.TinkerDexLoader: classloader: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/org.simalliance.openmobileapi.jar", zip file "/data/app/com.xx.xx.xx-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.xx.xx.xx-1, /vendor/lib, /system/lib, /system/lib/arm]]]
03-28 16:16:04.599 I/Tinker.ClassLoaderAdder: installDexes dexOptDir: /data/data/com.lenovo.club.app/tinker/patch-a08f5525/odex, dex size:3
03-28 16:16:04.599 I/Tinker.ClassLoaderAdder: after loaded classloader: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/data/com.xx.xx.xx/tinker/patch-a08f5525/dex/classes.dex.jar", zip file "/data/data/com.xx.xx.xx/tinker/patch-a08f5525/dex/classes2.dex.jar", zip file "/data/data/com.xx.xx.xx/tinker/patch-a08f5525/dex/test.dex.jar", zip file "/system/framework/org.simalliance.openmobileapi.jar", zip file "/data/app/com.xx.xx.xx-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.xx.xx.xx-1, /vendor/lib, /system/lib, /system/lib/arm]]], dex size:3
03-28 16:16:04.599 W/Tinker.ClassLoaderAdder: checkDexInstall result:true
03-28 16:16:04.609 I/Tinker.IncrementCompMgr: package has no incremental component meta, skip init.

03-28 16:16:04.609 I/Tinker.TinkerLoader: tryLoadPatchFiles: load end, ok!

03-28 16:16:04.609 D/Tinker.DefaultAppLike: onBaseContextAttached:
03-28 16:16:04.609 E/Tinker.UncaughtHandler: TinkerUncaughtHandler catch exception:java.lang.RuntimeException: Unable to instantiate application com.xx.xx.xx.AppRootContext: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:null
        at android.app.LoadedApk.makeApplication(LoadedApk.java:507)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4353)
        at android.app.ActivityThread.access$1500(ActivityThread.java:138)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:149)
        at android.app.ActivityThread.main(ActivityThread.java:5061)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:null
        at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:144)
        at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152)
        at android.app.Application.attach(Application.java:181)
        at android.app.Instrumentation.newApplication(Instrumentation.java:991)
        at android.app.Instrumentation.newApplication(Instrumentation.java:975)
        at android.app.LoadedApk.makeApplication(LoadedApk.java:502)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4353) 
        at android.app.ActivityThread.access$1500(ActivityThread.java:138) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:149) 
        at android.app.ActivityThread.main(ActivityThread.java:5061) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610) 
        at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:136)
        at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152) 
        at android.app.Application.attach(Application.java:181) 
        at android.app.Instrumentation.newApplication(Instrumentation.java:991) 
        at android.app.Instrumentation.newApplication(Instrumentation.java:975) 
        at android.app.LoadedApk.makeApplication(LoadedApk.java:502) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4353) 
        at android.app.ActivityThread.access$1500(ActivityThread.java:138) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:149) 
        at android.app.ActivityThread.main(ActivityThread.java:5061) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610) 
        at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
        at com.xx.xx.xx.tinker.app.ToolApplicationLike.onBaseContextAttached(ToolApplicationLike.java:75)
        at com.xx.xx.xx.common.BaseApplication.onBaseContextAttached(BaseApplication.java:48)
        at com.xx.xx.xxAppContext.onBaseContextAttached(AppContext.java:71)
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:136) 
        at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152) 
        at android.app.Application.attach(Application.java:181) 
        at android.app.Instrumentation.newApplication(Instrumentation.java:991) 
        at android.app.Instrumentation.newApplication(Instrumentation.java:975) 
        at android.app.LoadedApk.makeApplication(LoadedApk.java:502) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4353) 
        at android.app.ActivityThread.access$1500(ActivityThread.java:138) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1296) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:149) 
        at android.app.ActivityThread.main(ActivityThread.java:5061) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610) 
        at dalvik.system.NativeStart.main(Native Method) 
SwitchDestiny commented 4 years ago

试一下,用运行生成补丁包命令后,生成的apk文件作为基准包,然后在此基础上修改代码,我这样操作在4.4设备上成功了