一个优雅的 Android 插件化框架
所谓插件化,作用是让应用能够免安装运行。Android 的插件化简单来说,原理是使用 Java 的反射机制使得 Apk 中的代码能够直接被执行。
插件化带来的优势也很明显,它使得一个完整的 Apk 可以作为一份资源被存储与下载,需要执行的时候再拿出来动态加载。我们常见的 QQ、Didi 等众多应用中,都使用了插件化技术,某些界面、逻辑可以在应用未重新安装的情况下,通过网络直接热更新。
众所周知,Android 中有四大组件:
ActivityServiceBroadcastReceiverContentProvider
另外还有:
ApplicationFragment
光让代码能够动态执行也不行,让 Apk 中的组件能够被系统认可也是一门学问,而插件化框架所作的事情,就是帮助 Apk 中的组件被系统认可,我们称这一技术为容器。
市面上的插件化框架很多,有 Tecent 的 Shadow,Didi 的 VirtualApk,你看见的 Zed,也终将成为它们中优秀的一员。
可以关注我的博客,我会在项目完成后逐步更新 ClassLoader、插件化容器 等相关课程,详细讲解其中原理。
计划支持的功能如下,将不定期更新:
- 容器
ActivityServiceBroadcastReceiverContentProviderApplicationFragment/XML Fragment
- 字节码替换
Gradle Transform API插件- 无缝切换插件 / 正常模式
- 插件管理服务
- 宿主子进程分配
- 多插件管理
- 插件安装 / 升级 / 卸载
- 插件负载均衡
- 插件通信
- 插件内置客户端与服务器
- 容器资源分配
- 其他
AndroidX/SupportSDK支持LayoutInflator注入Application、Activity主题支持- 部分系统主题支持,如
EMUI、MIUI - 自定义容器桩定制
Fork 本仓库,修改代码,发起 Pull Request 即可。UT 和流水线将逐步搭建。
当然因为她和影流都是劫,( 逃