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

在某些设备上ShareTinkerInternals#processName静态变量类型初始化有问题 #1690

Open CodeIdeal opened 1 year ago

CodeIdeal commented 1 year ago
异常类型:app运行时异常

手机型号:天猫魔盒S1+

手机系统版本:如:Android 6.1

tinker版本:1.9.14.25.1

gradle版本:6.1.1

是否使用热更新SDK: 否

系统:如:Mac

堆栈/日志:
FATAL EXCEPTION: main
                                      Process: com.tvbc.mddtv, PID: 2456
                                      java.lang.RuntimeException: Unable to instantiate application com.tvbc.mddtv.MainApplication: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:java.lang.String cannot be stored in an array of type int[]
                                        at android.app.LoadedApk.makeApplication(LoadedApk.java:516)
                                        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4334)
                                        at android.app.ActivityThread.access$1500(ActivityThread.java:141)
                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                        at android.os.Looper.loop(Looper.java:153)
                                        at android.app.ActivityThread.main(ActivityThread.java:5038)
                                        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:851)
                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667)
                                      Caused by: com.tencent.tinker.loader.TinkerRuntimeException: Tinker Exception:java.lang.String cannot be stored in an array of type int[]
                                        at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:176)
                                        at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:186)
                                        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:511)
                                        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4334) 
                                        at android.app.ActivityThread.access$1500(ActivityThread.java:141) 
                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262) 
                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                        at android.os.Looper.loop(Looper.java:153) 
                                        at android.app.ActivityThread.main(ActivityThread.java:5038) 
                                        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:851) 
                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667) 
                                      Caused by: java.lang.ArrayStoreException: java.lang.String cannot be stored in an array of type int[]
                                        at com.tencent.tinker.loader.shareutil.ShareTinkerInternals.getProcessName(ShareTinkerInternals.java:552)
                                        at com.tencent.tinker.loader.shareutil.ShareTinkerInternals.isInMainProcess(ShareTinkerInternals.java:471)
                                        at com.tencent.tinker.lib.tinker.Tinker$Builder.<init>(Tinker.java:338)
                                        at com.tencent.tinker.lib.tinker.TinkerInstaller.install(TinkerInstaller.java:63)
                                        at com.tvbc.hotpatch.app.HotpatchApplicaitonLike.installTinker(HotpatchApplicaitonLike.kt:95)
                                        at com.tvbc.hotpatch.app.HotpatchApplicaitonLike.initTinker(HotpatchApplicaitonLike.kt:77)
                                        at com.tvbc.hotpatch.app.HotpatchApplicaitonLike.onBaseContextAttached(HotpatchApplicaitonLike.kt:69)
                                        at com.tencent.tinker.entry.TinkerApplicationInlineFence.handleMessageImpl(TinkerApplicationInlineFence.java:72)
                                        at com.tencent.tinker.entry.TinkerApplicationInlineFence.handleMessage_$noinline$(TinkerApplicationInlineFence.java:60)
                                        at com.tencent.tinker.entry.TinkerApplicationInlineFence.handleMessage(TinkerApplicationInlineFence.java:53)
                                        at com.tencent.tinker.loader.app.TinkerInlineFenceAction.callOnBaseContextAttached(TinkerInlineFenceAction.java:47)
                                        at com.tencent.tinker.loader.app.TinkerApplication.onBaseContextAttached(TinkerApplication.java:168)
                                        at com.tencent.tinker.loader.app.TinkerApplication.attachBaseContext(TinkerApplication.java:186) 
                                        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:511) 
                                        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4334) 
                                        at android.app.ActivityThread.access$1500(ActivityThread.java:141) 
                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262) 
                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                        at android.os.Looper.loop(Looper.java:153) 
                                        at android.app.ActivityThread.main(ActivityThread.java:5038) 
                                        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:851) 
                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667)

我debug调试看了眼, 发现ShareTinkerInternals类中的静态常量processName初始化的类型就是错的, 是int数组.

image