关于android热修复中的CLASS_ISPREVERIFIED

时间:2021-08-25 19:43:31
我写了一个demo,类A的构造函数里引用到了类B,并且调用了类B的一个函数打印了一段信息,然后我修改类B并且把它的class文件单独用dx打包成一个补丁dex文件放到应用的私有目录下,并在application的attachBaseContext方法里把这个补丁加载进系统默认ClassLoader的dexPathList的element数组的第一个位置,应用运行时能够正常打印补丁里修改后的内容,并没有出现网上资料所说的CLASS_ISPREVERIFIED的问题这是为什么?是因为我使用的是模拟器?

4 个解决方案

#1


这个问题只会发生在dalvik模式下, 你的模拟器是使用ART模式(5.0 以上默认为ART模式)?
另外这个问题与模拟器是没有关系的,只会与dalvik模式有关。

///

#2


引用 1 楼 crash163 的回复:
这个问题只会发生在dalvik模式下, 你的模拟器是使用ART模式(5.0 以上默认为ART模式)?
另外这个问题与模拟器是没有关系的,只会与dalvik模式有关。
///

我在android 4.4模拟器下也试了一下,打印了" java.vm.version "的值是1.6,确认使用的是dalvik模式,但是补丁仍然生效

#3


1、apk是在Android studio 开启instant run后, 编译出来的debug版? instant run可能影响结果。编译release版试下。

2、A类本身就有引用其它未在本dex的类么,那样A本身就不会打上preverified标记了。

///

#4


引用 3 楼 crash163 的回复:
1、apk是在Android studio 开启instant run后, 编译出来的debug版? instant run可能影响结果。编译release版试下。

2、A类本身就有引用其它未在本dex的类么,那样A本身就不会打上preverified标记了。

///

把apk换成release版之后就报pre-verified的错误了,多谢你的回复 关于android热修复中的CLASS_ISPREVERIFIED

#1


这个问题只会发生在dalvik模式下, 你的模拟器是使用ART模式(5.0 以上默认为ART模式)?
另外这个问题与模拟器是没有关系的,只会与dalvik模式有关。

///

#2


引用 1 楼 crash163 的回复:
这个问题只会发生在dalvik模式下, 你的模拟器是使用ART模式(5.0 以上默认为ART模式)?
另外这个问题与模拟器是没有关系的,只会与dalvik模式有关。
///

我在android 4.4模拟器下也试了一下,打印了" java.vm.version "的值是1.6,确认使用的是dalvik模式,但是补丁仍然生效

#3


1、apk是在Android studio 开启instant run后, 编译出来的debug版? instant run可能影响结果。编译release版试下。

2、A类本身就有引用其它未在本dex的类么,那样A本身就不会打上preverified标记了。

///

#4


引用 3 楼 crash163 的回复:
1、apk是在Android studio 开启instant run后, 编译出来的debug版? instant run可能影响结果。编译release版试下。

2、A类本身就有引用其它未在本dex的类么,那样A本身就不会打上preverified标记了。

///

把apk换成release版之后就报pre-verified的错误了,多谢你的回复 关于android热修复中的CLASS_ISPREVERIFIED