• Android 插件化


    插件化技术和热修复技术都属于动态加载技术

    动态加载技术是他们的前身,分别派生出热修复技术和插件化技术

    区别

    其中热修复技术主要用来修复Bug

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

    插件化

    插件化的客户端由宿主和插件两个部分组成,宿主就是指先被安装到手机中的APK,就是平常我们加载的普通APK。

    插件一般是指经过处理的APK、so和dex等文件,插件可以被宿主进行加载,有的插件也可以作为APK独立运行。

    Activity插件化

    Hook技术实现(主流)

    主要的方案就是先用一个在AndroidManifest.xml中注册的Activity来进行占坑,用来通过AMS的校验,

    接着在合适的时机用插件Activity替换占坑的Activity。

    反射实现

    接口实现

    Service 插件化

    代理分发实现

    • ProxyService需要长时间对Service进行分发处理,所以在参数条件不满足、出现异常和代码执行完毕时需要返回START_STICKY,这样ProxyService会重新被创建并执行onStartCommand方法。

    • 创建targetService并反射调用targetService的attach方法。

    • 进行代理分发,执行targetService的onCreate方法。

    ContentProvider 插件化

    ContentProvider插件化的关键在于将ContentProvider插件共享给整个系统。

    BroadcastReceiver的插件化

    BroadcastReceiver的注册分为两种,分别是静态注册和动态注册

    首先把静态注册的BroadcastReceiver全部转换为动态注册来处理,虽然静态和动态的BroadcastReceiver的生命周期不同,

    但是为了实现插件化,这个缺点显然不是关键问题。

    然后利用 VirtualApk 的实现

    资源的插件化

    资源的插件化方案主要有两种:

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

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

    VirtualApk 实现

    so的插件化

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

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

  • 相关阅读:
    spring多数据源配置笔记
    谈谈设计对软件工程目标实现的影响
    Spring之webMvc异常处理
    设计基础软件架构笔记
    spring数据验证
    C# 进行用(反)序列化方法实现xml与对象进行互相转换
    离线数仓kettle 传统企业性价比超高的数字化转型技术方案
    kafka源码1:基本概念和核心架构
    银行数据中台架构之旅
    离线数仓hive互联网大厂的数字化转型设计方案
  • 原文地址:https://www.cnblogs.com/lukelmouse/p/14521513.html
Copyright © 2020-2023  润新知