zoukankan      html  css  js  c++  java
  • 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的加载入口。

  • 相关阅读:
    算法时间复杂度、空间复杂度(大O表示法)
    六、Java“毒丸”使用示例,实现取消任务
    四、获取IP地址工具包
    SEDA架构程序实现
    二十一、curator recipes之TreeCache
    二十、curator recipes之NodeCache
    十九、curator recipes之PathChildrenCache
    十八、curator recipes之DistributedDelayQueue
    Mysql学习笔记【一、环境安装&配置】
    Go学习笔记【一、概述】
  • 原文地址:https://www.cnblogs.com/lukelmouse/p/14521513.html
Copyright © 2011-2022 走看看