Tencent / tinker

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

项目集成热修复后,5.0以下手机会出现崩溃。 #895

Open NullCrazy opened 6 years ago

NullCrazy commented 6 years ago

异常类型:app运行时异常 手机型号:小米4 手机系统版本:4.4.4 tinker版本:1.9.8 gradle版本:2.3.3 是否使用热更新SDK: TinkerPatch SDK 系统:windows

堆栈/日志: java.lang.RuntimeException: Unable to start activity ComponentInfo{com..view/com..view.WelcomeActivity}: android.view.InflateException: Binary XML file line #78: Error inflating class com..view.widget.LockPatternView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2201) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250) at android.app.ActivityThread.access$900(ActivityThread.java:141) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1213) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5072) 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:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #78: Error inflating class com..view.widget.LockPatternView at android.view.LayoutInflater.createView(LayoutInflater.java:623) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:699) at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) at android.view.LayoutInflater.inflate(LayoutInflater.java:495) at android.view.LayoutInflater.inflate(LayoutInflater.java:400) at com..view.base.BaseActivity.setContentView(BaseActivity.java:319) at com..view.WelcomeActivity._onCreate(WelcomeActivity.java:216) at com..view.base.BaseActivity.onCreate(BaseActivity.java:304) at android.app.Activity.performCreate(Activity.java:5246) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2165) ... 11 more Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.constructNative(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at android.view.LayoutInflater.createView(LayoutInflater.java:597) ... 22 more Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation at com..view.widget.LockPatternView.(LockPatternView.java:229) ... 25 more tInflater.java:495) at android.view.LayoutInflater.inflate(LayoutInflater.java:400) at com..view.base.BaseActivity.setContentView(BaseActivity.java:319) at com..view.WelcomeActivity._onCreate(WelcomeActivity.java:216) at com.***.view.base.BaseActivity.onCreate(BaseActivity.java:304) at android.app.Activity.performCreate(Activity.java:5246) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)

这个问题经过反复测试 ,找到一个规律。 1,使用graldew assembleDebug 打出基准包。 2,修改tinker.gradle 使用刚打出的包做为基准包,修改项目代码,使用命令gradlew tinkerPatchDebug,生成补丁包。(此时补丁包中存在R$styleable类,很奇怪的类。。。) 3,使用小米8(android 8.0) vivo(8.0) 华为(6.0)这些手机加载补丁包,重启进程,正常使用。 4,使用小米4 (android 4.4.4) 加载补丁包成功,弹出成功提示。重启进程,崩溃。 5,将刚才运行tinker指令生成的对比包,作为新的基准包,然后修改项目代码,运行gradlew tinkerPatchDebug指令,生成补丁包。(此时补丁包中不存在R$styleable类) 6,新的补丁包则所有手机加载正常,重启进程也不出现崩溃。

qStars commented 6 years ago

你好,你的第五步骤是什么意思?你用生成patch的新的工程包作为基准包。再次生成patch补丁包。给第一次生成的基准包打上?

NullCrazy commented 6 years ago

不是,是运行tinkerPatchdebug之后的生成的apk,将apk安装到手机上,以他作为基准包,修改部分代码(这里加了一句toast),再次运行tinkerPatchdebug 打出差分包。push到目录下,此时的补丁包正常使用。

qStars commented 6 years ago

好的我测试下,然后按照你说的我也试试

qStars commented 6 years ago

我按照你的操作,依然还是崩溃,可能我和你的问题是两个问题。

NullCrazy commented 6 years ago

头疼。

qStars commented 6 years ago

我的问题也到了你这一步了。也是出现不能启动activity

liangxianshen commented 5 years ago

嗯 5.0以下会出现这个crash,我是主dex里方法数太多,所以自己指定了maindexlist.txt,不知道和这个有没有关系

系统:Mac

as:3.2.1

gradle:3.2.1

buildtools 28.0.3

d8+aapt2

12-27 21:46:20.576 23584-23584/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.duia.cet6, PID: 23584 java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation at com.duia.cet.application.CetTinkerApplication.onCreate(Unknown Source) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4691) at android.app.ActivityThread.access$1500(ActivityThread.java:172) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1453) at android.os.Handler.dispatchMessage(Handler.java:110) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:5468) 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:860) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:676) at dalvik.system.NativeStart.main(Native Method)

lhkzx007 commented 5 years ago

@liangxianshen 你们这个问题有解决吗?我刚刚接入, 在5.0以下机型也出现了这种情况

fishsoft commented 4 years ago

我这边也出现了这个问题,android版本4.4.4