Tencent / tinker

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

Unable to instantiate application:Tinker Exception:createDelegate failed #943

Open thymleaf opened 6 years ago

thymleaf commented 6 years ago

异常类型:app运行时异常

手机型号:红米 HM 2A

手机系统版本:红米 Android版本:4.4.4; MIUI版本:8.1.2

tinker版本:1.9.9

gradle版本:3.0.0

是否使用热更新SDK:没有使用

系统:Win7

问题描述:编译正常,启动直接报错 Tinker Exception:createDelegate failed

堆栈/日志: 09-30 10:56:09.678 27385-27385/com.qiandw E/Tinker.UncaughtHandler: TinkerUncaughtHandler catch exception:java.lang.RuntimeException: Unable to instantiate application com.qiandw.android.app.App: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed at android.app.LoadedApk.makeApplication(LoadedApk.java:509) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427) at android.app.ActivityThread.access$1500(ActivityThread.java:147) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5135) 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:798) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614) at dalvik.system.NativeStart.main(Native Method) Caused by: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:115) at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:121) at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:135) at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152) at android.app.Application.attach(Application.java:185) at android.app.Instrumentation.newApplication(Instrumentation.java:991) at android.app.Instrumentation.newApplication(Instrumentation.java:975) at android.app.LoadedApk.makeApplication(LoadedApk.java:504) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427)  at android.app.ActivityThread.access$1500(ActivityThread.java:147)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5135)  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:798)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.ClassNotFoundException: com.library.common.hotfix.LocalApplicationLike at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:251) at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:109) at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:121)  at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:135)  at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152)  at android.app.Application.attach(Application.java:185)  at android.app.Instrumentation.newApplication(Instrumentation.java:991)  at android.app.Instrumentation.newApplication(Instrumentation.java:975)  at android.app.LoadedApk.makeApplication(LoadedApk.java:504)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427)  at android.app.ActivityThread.access$1500(ActivityThread.java:147)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5135)  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:798)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.NoClassDefFoundError: com/library/common/hotfix/LocalApplicationLike at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:251)  at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:109)  at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:121)  at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:135)  at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152)  at android.app.Application.attach(Application.java:185)  at android.app.Instrumentation.newApplication(Instrumentation.java:991)  at android.app.Instrumentation.newApplication(Instrumentation.java:975)  at android.app.LoadedApk.makeApplication(LoadedApk.java:504)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427)  at android.app.ActivityThread.access$1500(ActivityThread.java:147)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5135)  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:798)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.ClassNotFoundException: Didn't find class "com.library.common.hotfix.LocalApplicationLike" on path: DexPathList[[zip file "/data/app/com.qiandw-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.qiandw-2, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:497) at java.lang.ClassLoader.loadClass(ClassLoader.java:457) at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:251)  at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:109)  at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:121)  at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:135)  at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152)  at android.app.Application.attach(Application.java:185)  at android.app.Instrumentation.newApplication(Instrumentation.java:991)  at android.app.Instrumentation.newApplication(Instrumentation.java:975)  at android.app.LoadedApk.makeApplication(LoadedApk.java:504)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427)  at android.app.ActivityThread.access$1500(ActivityThread.java:147)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5135)  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:798)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)  at dalvik.system.NativeStart.main(Native Method) 


09-30 10:56:09.678 27385-27385/com.qiandw E/AndroidRuntime: FATAL EXCEPTION: main Process: com.qiandw, PID: 27385 java.lang.RuntimeException: Unable to instantiate application com.qiandw.android.app.App: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed at android.app.LoadedApk.makeApplication(LoadedApk.java:509) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427) at android.app.ActivityThread.access$1500(ActivityThread.java:147) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5135) 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:798) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614) at dalvik.system.NativeStart.main(Native Method) Caused by: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:createDelegate failed at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:115) at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:121) at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:135) at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152) at android.app.Application.attach(Application.java:185) at android.app.Instrumentation.newApplication(Instrumentation.java:991) at android.app.Instrumentation.newApplication(Instrumentation.java:975) at android.app.LoadedApk.makeApplication(LoadedApk.java:504) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427)  at android.app.ActivityThread.access$1500(ActivityThread.java:147)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5135)  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:798)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.ClassNotFoundException: com.library.common.hotfix.LocalApplicationLike at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:251) at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:109) at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:121)  at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:135)  at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152)  at android.app.Application.attach(Application.java:185)  at android.app.Instrumentation.newApplication(Instrumentation.java:991)  at android.app.Instrumentation.newApplication(Instrumentation.java:975)  at android.app.LoadedApk.makeApplication(LoadedApk.java:504)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427)  at android.app.ActivityThread.access$1500(ActivityThread.java:147)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5135)  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:798)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.NoClassDefFoundError: com/library/common/hotfix/LocalApplicationLike at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:251)  at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:109)  at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:121)  at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:135)  at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152)  at android.app.Application.attach(Application.java:185)  at android.app.Instrumentation.newApplication(Instrumentation.java:991)  at android.app.Instrumentation.newApplication(Instrumentation.java:975)  at android.app.LoadedApk.makeApplication(LoadedApk.java:504)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427)  at android.app.ActivityThread.access$1500(ActivityThread.java:147)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5135)  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:798)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.ClassNotFoundException: Didn't find class "com.library.common.hotfix.LocalApplicationLike" on path: DexPathList[[zip file "/data/app/com.qiandw-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.qiandw-2, /vendor/lib, /system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:497) at java.lang.ClassLoader.loadClass(ClassLoader.java:457) at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:251)  at com.tencent.tinker.loader.app.TinkerApplication.createDelegate(TinkerApplication.java:109)  at com.tencent.tinker.loader.app.TinkerApplication.ensureDelegate(TinkerApplication.java:121)  at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:135)  at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:152)  at android.app.Application.attach(Application.java:185)  at android.app.Instrumentation.newApplication(Instrumentation.java:991)  at android.app.Instrumentation.newApplication(Instrumentation.java:975)  at android.app.LoadedApk.makeApplication(LoadedApk.java:504)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4427)  at android.app.ActivityThread.access$1500(ActivityThread.java:147)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5135)  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:798)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)  at dalvik.system.NativeStart.main(Native Method) 

tys282000 commented 6 years ago

看下找不到的这个类是不是没在主dex?另外一个issue也提到这个问题了,就是找不到的类没分在主dex,所以就报错了。

然后看下这个类: com.library.common.hotfix.LocalApplicationLike 是不是间接实现了com.tencent.tinker.entry.ApplicationLike?

thymleaf commented 6 years ago

实现了ApplicationLike:

@DefaultLifeCycle(application = "com.xxx.android.app.App", flags = ShareConstants.TINKER_ENABLE_ALL) public class LocalApplicationLike extends DefaultApplicationLike implements IApp { private AppDelegate mAppDelegate;

public LocalApplicationLike(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag,
                            long applicationStartElapsedTime, long applicationStartMillisTime,
                            Intent tinkerResultIntent)
{
    super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime,
            tinkerResultIntent);
}
....

}

只不过LocalApplicationLike是在library里,不知道会不会对分包有影响,目前只在红米 Android版本:4.4.4发现该异常,其他机型加载补丁正常、运行正常。请帮忙看看,谢谢~

@tomystang

FTDShanCai commented 5 years ago

这个问题就是 找不到的类没分在主dex ,gradle 配置参考。https://www.jianshu.com/p/78f2e2d9484a