Android Apk的Repair方案(系统支持多dex)

    最近简单研究了一下apk在线修复处理方式,有部分心得,就此分享下吧,这里指在线修复dex文件,不修复资源,但是可以扩展。

    Android系统有个分水领,即支持一个dex和支持多个dex

   1.如果系统支持多个dex,分享的方案可以支持不需要重启App就可以直接在线修复。

   2.如果系统不支持多个dex,分享的方案则需要重启App后才能看到修复方案。

        先说支持多个dex的吧,Android app默认是pathclassloader,父classloader一般BootClassloader,pathclassloader加载App本身的资源,bootclassloader一般加载android sdk资源,如果我们通过反射处理把pathclassloader的父classloader置换成我们自定义的Myclassloader,Myclassloader的父loader置换成BootClassloader,同时获取到pathclassloader的DexFile对象,这样所以非sdk的资源加载时必定通过Myclassloader加载,这样原来的classloader委派线路 pathclassloader-->BootClassloader  ,就转变成pathclassloader-->Myclassloader-->BootClassloader.

      当App通过补丁服务器获取补丁信息(包含补丁class全路径及下载路径),就可以在Myclassloader加载时进行class全路径过滤,加载对应的补丁dex/jar,此时如果补丁class里面依赖其他非补丁类,则使用pathclassloader的DexFile对象加载,这样就解决了大量依赖导致补丁包过大问题。但是此时系统必须支持多个dex,否则将采用下面的方案。

     如果系统只支持一个dex则看下一个处理方案。

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值