Android插件化技术总结与对比

文章目录

  • 插件化历史
  • 插桩式实现插件化
    • 插状是如何解决生命周期的
    • 插桩化实现的缺点
  • Hook式实现插件化演进
    • Hook技术绕开系统限制 实现无注册式跳转
  • 解决插件之间耦合性-LoadedApk
  • 商业化插件之旅
  • DroidPlugin插件化
    • 基本原理
    • 特点
    • 缺点

插件化历史

2014 - 任玉刚推出新一代插件技术dynamic-load-apk

2015 - 360公司推出插件技术DroidPlugin

后面陆续推出 Small 、DynamicApk 、Atlas、 VirtualApk 都是基于DroidPlugin来展开

目前正在维护的有 DroidPlugin 、 atlas 、 VirtualApk

插桩式实现插件化

dynamic-load-apk

通过在宿主内声明一个代理Activity 来实现加载插件的功能
Android插件化技术总结与对比_第1张图片
Android插件化技术总结与对比_第2张图片
这样插件的 资源与class都能正确的被加载到宿主中,并且能够完整的显示与交互

但是生命周期怎么办呢?

插状是如何解决生命周期的

Android插件化技术总结与对比_第3张图片

插桩化实现的缺点

  • 不支持IntentService,不支持 Provider,静态广播;

  • 插件编写规范上有一定的限制,比如无法直接使用this,需要继承指定的类

  • 不支持LaunchMode
    虽然启动了Activity,也通过接口的方式来跟随了生命周期,但是它也只能算是一个普通的类那样。

  • 主题管理,需要给每个Activity单独设置主题

  • 插件和宿主资源 id 可能重复的问题没有解决,需要修改 aapt 中资源 id 的生成规则;

Hook式实现插件化演进

集中登陆式:

  • 优点 :无需注册,集中式管理

实现原理:通过系统的 API欺骗机制 瞒过系统

这里的API有两个 :

  • startActivity

  • luanchActivity

Hook技术绕开系统限制 实现无注册式跳转

Android插件化技术总结与对比_第4张图片

解决插件之间耦合性-LoadedApk

Android插件化技术总结与对比_第5张图片

商业化插件之旅

目的:

   APK文件解析与安装原理

   理解PMS在Android系统做的角色

   理解AMS服务在Android中的作用

   更好理解插件进程管理

   解决插件中组件启动模式的问题

DroidPlugin插件化

基本原理

  • 共享进程:为android提供一个进程运行多个apk的机制,通过API欺骗机制瞒过系统

  • 占坑:通过预先占坑的方式实现不用在mainfest注册,通过一带多的方式实现服务管理

  • Hook机制:动态代理实现函数hook,Binder代理绕过部分系统服务限制,然后动态代理Hook AMS PMS后–>Write回去,达到瞒天过海的目的)

特点

  • 支持Androd 2.3以上系统

  • 插件APK完全不需做任何修改,可以独立安装运行、也可以做插件运行。要以插件模式运行某个APK,你无需重新编译、无需知道其源码。

  • 插件的四大组件完全不需要在Host程序中注册,支持Service、Activity、BroadcastReceiver、ContentProvider四大组件

  • 插件之间、Host程序与插件之间会互相认为对方已经”安装”在系统上了。
    API低侵入性:极少的API。HOST程序只是需要一行代码即可集成Droid Plugin

  • 超强隔离:插件之间、插件与Host之间完全的代码级别的隔离:不能互相调用对方的代码。通讯只能使用Android系统级别的通讯方法。
    支持所有系统API

  • 资源完全隔离:插件之间、与Host之间实现了资源完全隔离,不会出现资源窜用的情况。

  • 实现了进程管理,插件的空进程会被及时回收,占用内存低。

  • 插件的静态广播会被当作动态处理,如果插件没有运行(即没有插件进程运行),其静态广播也永远不会被触发。

缺点

  • 安全性担忧(可以修改,hook一些重要信息)

  • 机型适配(不是所有机器上都能行,因为大量用反射相关,如果rom厂商深度定制了framework层,反射的方法或者类不在,容易插件运用失败)

  • 缺乏对Native层的Hook,对某些带native代码的apk支持不好,可能无法运行。比如一部分游戏无法当作插件运行。

Android插件化技术总结与对比_第6张图片
图:droidplugin插件化流程详解

你可能感兴趣的:(#,Android插件化)