Meituan-Dianping / Robust

Robust is an Android HotFix solution with high compatibility and high stability. Robust can fix bugs immediately without a reboot.
Apache License 2.0
4.4k stars 805 forks source link

Kotlin中集成出现空指针 #421

Open triplesky opened 3 years ago

triplesky commented 3 years ago

异常类型:app运行时异常

手机型号:

手机系统版本:

Robust版本:0.4.99

Gradle版本:4.0

系统:Mac

堆栈/日志:

private fun getPatch() { PatchExecutor(applicationContext, PatchManipulateImp(), RobustCallBackImp()).start() } 这样一个方法,在基础包是这样的 想修改为 private fun getPatch() { viewModel.getPatch() } viewModel是这样定义的 val viewModel by viewModel() @Modify 和RobustModify.modify()都试过了,都会报下面的错 W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[])' on a null object reference 2020-08-14 11:16:17.682 22236-22236/? W/System.err: at com.meituan.robust.utils.EnhancedRobustUtils.invokeReflectMethod(EnhancedRobustUtils.java:2) 2020-08-14 11:16:17.682 22236-22236/? W/System.err: at xxx.robust.patch.MainTabActivityPatch.getPatch(MainTabActivityPatch.java:131) 2020-08-14 11:16:17.682 22236-22236/? W/System.err: at xxx.robust.patch.MainTabActivityPatch.RobustPublicgetPatch(MainTabActivityPatch.java) 2020-08-14 11:16:17.682 22236-22236/? W/System.err: at xxx.robust.patch.MainTabActivityPatchControl.accessDispatch(PatchTemplate.java) 2020-08-14 11:16:17.682 22236-22236/? W/System.err: at com.meituan.robust.PatchProxy.accessDispatch(PatchProxy.java:9) 2020-08-14 11:16:17.682 22236-22236/? W/System.err: at com.meituan.robust.PatchProxy.proxy(PatchProxy.java:4)

triplesky commented 3 years ago

我有测试了一下上面的, private fun getPatch() { val temp : String = getArray()[0] } private fun getArray():Array{ return arrayOf("啊啊啊啊","ssssssss") } 修改为 @Modify private fun getPatch() { Log.i("lldebug", "maintab detail") Log.i("lldebug", "maintab detail") Log.i("lldebug", "maintab detail") val temp : String = getArray()[1] } 还是会报Attempt to invoke virtual method 'java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[])' on a null object reference 我反编译patch.jar应该是没找到getArray()这个方法,怎么会找不到这个方法呢,我又 @Add了一个和getArray相同功能的方法,还是找不到,这是为什么?在patch.jar中没有我新加的方法 @w4lle @mivanzhang