关于android热修复中的CLASS_ISPREVERIFIED

NodeLance 2016-07-18 05:31:31
我写了一个demo,类A的构造函数里引用到了类B,并且调用了类B的一个函数打印了一段信息,然后我修改类B并且把它的class文件单独用dx打包成一个补丁dex文件放到应用的私有目录下,并在application的attachBaseContext方法里把这个补丁加载进系统默认ClassLoader的dexPathList的element数组的第一个位置,应用运行时能够正常打印补丁里修改后的内容,并没有出现网上资料所说的CLASS_ISPREVERIFIED的问题这是为什么?是因为我使用的是模拟器?
...全文
475 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独灬啸月 2018-04-25
  • 打赏
  • 举报
回复
你好,我使用的是 AndFix 的C代码继续测试,卸了个 demo,使用17模拟器,也是A类引用B类,B类单独打包 dex,然后加载修复。AndFix 中有对 B 类进行这个标志位的设置。但是把标志位这个去掉,也是正常可以修复。希望能分享我一下经验,非常感谢
NodeLance 2016-07-22
  • 打赏
  • 举报
回复
引用 3 楼 crash163 的回复:
1、apk是在Android studio 开启instant run后, 编译出来的debug版? instant run可能影响结果。编译release版试下。 2、A类本身就有引用其它未在本dex的类么,那样A本身就不会打上preverified标记了。 ///
把apk换成release版之后就报pre-verified的错误了,多谢你的回复
网易云捕 2016-07-20
  • 打赏
  • 举报
回复
1、apk是在Android studio 开启instant run后, 编译出来的debug版? instant run可能影响结果。编译release版试下。 2、A类本身就有引用其它未在本dex的类么,那样A本身就不会打上preverified标记了。 ///
NodeLance 2016-07-20
  • 打赏
  • 举报
回复
引用 1 楼 crash163 的回复:
这个问题只会发生在dalvik模式下, 你的模拟器是使用ART模式(5.0 以上默认为ART模式)? 另外这个问题与模拟器是没有关系的,只会与dalvik模式有关。 ///
我在android 4.4模拟器下也试了一下,打印了" java.vm.version "的值是1.6,确认使用的是dalvik模式,但是补丁仍然生效
网易云捕 2016-07-18
  • 打赏
  • 举报
回复
这个问题只会发生在dalvik模式下, 你的模拟器是使用ART模式(5.0 以上默认为ART模式)? 另外这个问题与模拟器是没有关系的,只会与dalvik模式有关。 ///

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧