Android 进阶解密读书笔记(十四)——插件化原理
创始人
2024-06-02 05:13:17
0
  1. 动态加载技术

在应用程序运行时,动态加载一些程序中原本不存在的可执行文件并运行这些文件里的代码逻辑,可执行文件总的来说分为两种,一种是动态链接库so,另一种是 dex 相关文件(dex 以及包含 dex 的 jar、apk)

动态加载技术

  • 热修复技术:用来修复Bug

  • 插件化技术:用于解决应用越来越庞以及功能模块大的解耦

  1. 插件化的产生

应用的开发痛点和瓶颈,随着互联网的急速发展,会出现以下几种情况:

  1. 业务复杂,模块耦合

  1. 应用间的接入

  1. 65536 限制,内存占用增大

  1. 插件化定义

插件化的客户端由宿主和插件两部分组成,宿主就是指先被安装到手机中的apk,就是我们平常加载的普通apk。插件一般是指经过处理的apk、so和dex等文件,插件可以被宿主进行动态安装。常用的插件化框架 DynamicApk、DroidPlugin、RePlugin

  1. Activity插件化

主要的方案是先用一个在AndroidManifest.xml 中注册的 Activity 来进行占坑,用来通过 AMS 的校验,接着在合适的时机用插件的 Activity 替换占坑的 Activity

  1. Service的插件化

使用代理分发实现,当启动插件 Service 时,就会先启动代理 Service,当这个代理Service运行起来后,在它的 onStartCommand 等方法里面进行分发,执行插件 TargetService 的 OnCreat 等方法

  1. 资源的插件化

方案主要有两种:

  • 一种是合并资源方案,将插件的资源全部添加到宿主的 Resources 中,这种方案插件可以访问宿主的资源。

  • 另一种是构建插件资源方案,每个插件都构造出独立的 Resoureces 中,这种方案插件不可以访问宿主资源

  1. so 的插件化

so 的热修复方案有两种:

  • 将 so 补丁插入到 NativeLibraryElement 数组的前部,让so补丁的路径先被返回和加载

  • 调用系统 System 的 load 方法来接管 so 的加载入口

so的插件化方案和so的热修复第一种方案类似,简单来说就是将 so 插件插入到 NatvieLibraryElement 数组中,并且将存储 so 插件的文件添加到 nativeLibraryDirectories 集合中就可以了

总的来说 插件化的加载机制方案主要有两种

  1. Hook ClassLoader

  1. 委托给系统的 ClassLoader 帮忙加载

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...
科创AIETF(588790)... 8月22日,截止午间收盘,科创AIETF(588790)涨4.83%,报0.760元,成交额6.98...
创业板50ETF嘉实(1593... 8月22日,截止午间收盘,创业板50ETF嘉实(159373)涨2.61%,报1.296元,成交额1...
港股异动丨航空股大幅走低 中国... 港股航空股大幅下跌,其中,中国国航跌近7%表现最弱,中国东方航空跌近5%,中国南方航空跌超3%,美兰...
电网设备ETF(159326)... 8月22日,截止午间收盘,电网设备ETF(159326)跌0.25%,报1.198元,成交额409....
红利ETF国企(530880)... 8月22日,截止午间收盘,红利ETF国企(530880)跌0.67%,报1.034元,成交额29.0...