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的加载入口。

  • 相关阅读:
    MySQL中文显示乱码
    mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
    mysql 分表的3种方法
    mysql 清空或删除表数据后,控制表自增列值的方法
    MySQL 下优化SQL语句的一些经验
    mysql 常用命令
    MySQL获得指定数据表中auto_increment自增id值的方法及实例
    SQL Server Alwayson创建代理作业注意事项
    LinkedList子类与Queue接口
    List接口
  • 原文地址:https://www.cnblogs.com/lukelmouse/p/14521513.html
Copyright © 2011-2022 走看看