插件框架代码已经开源,欢迎使用并反馈。https://github.com/cmguo/android-plugins
基本功能需求:
项目 | 子项目 | 说明 |
代码插入 | Java类 |
|
Dex优化 |
| |
预置Dex | 支持系统预置ODEX库 | |
资源插入 | 数值资源 | 支持 |
图片资源 | 支持,当是图片资源需要share到主Context,具体机制还有待升入研究 | |
布局资源 | 支持,创建的View可以在Context之间共享 | |
| 不支持Activity、Service、Provider,他们需要在Manifest中注册 | |
Native库 | CPU体系 | 支持多体系的SO库,但是需要与主程序一致 |
解压更新 | 插件APK更新时,更新从其解压出来的SO库 | |
系统预置 | 支持系统预置SO库,插件APK不包含SO库 | |
内置方式 | Android6.0以上支持内置Native库,不需要解压安装 | |
插件依赖 | 代码依赖 |
|
环境依赖 | 声明在特定主程序环境下被加载 | |
| 资源依赖需要静态分配资源ID空间,操作比较复杂,也不是Android公开支持的方式,Android使用AAR机制,不能用于插件,所以插件不支持资源依赖 | |
资源覆盖 | 覆盖目标 | 多目标同时覆盖 |
依赖关系 | 资源包也有依赖关系 | |
覆盖样式 | View、TextView,ListView,更多样式可以快速添加 | |
切换皮肤 | 同时选择多个皮肤,立即生效 | |
覆盖方式 | 覆盖Resource接口,覆盖LayoutFactory | |
插件管理 | 插件形式 | APK,JAR |
环境管理 | 对插件执行环境的组织管理 | |
集成方式 | 集成方式包括:系统预置,应用内置,外部存储和动态下载等 | |
动态更新 | 检测新版本,下载更新。 | |
| 不重启应用完成更新。插件已经暴露的类(class)不能回收,类的实例释放需要等待回收,多线程同步处理也有挑战,难度很大。 | |
其他项目 | SDK兼容性 | 支持兼容性检查。插件的SDK Level如果在目标平台不匹配,会加载失败 |
插件描述 | 插件名称,作者,描述,版本,图标 | |
| 不支持,插件不能声明特殊权限,需要主程序声明 | |
| 不支持,插件使用的共享库需要在主程序声明 |