CJFrameForAndroid 是一个实现 android 插件化开发的框架。使用 CJFrameForAndroid,apk 动态加载不再是难题,更重要的是可以轻松实现插件与 APP 项目之间的解耦。
CJFrameForAndroid 的实现原理是通过类加载器,动态加载存在于 SD 卡上的 apk 包中的 Activity。通过使用一个托管所,插件 Activity 全部事务(包括声明周期与交互事件)将交由托管所来处理,间接实现插件的运行。
一句话概括:CJFrameForAndroid 中的托管所,复制了插件中的 Activity,来替代插件中的 Activity 与用户交互。
使用 CJFrameForAndroid 插件开发框架需要在你项目的 AndroidManifest.xml 文件中加入托管所的声明。
- <activity android:name="org.kymjs.aframe.plugin.CJProxyActivity" /> <!-- 如果使用了插件Activity,需要添加 -->
- <service android:name="org.kymjs.aframe.plugin.service.CJProxyService"/> <!-- 如果使用了插件Service,需要添加 -->
让插件应用中的 Activity 继承 CJActivity,并且一切使用 this 调用的方法都使用 that 替代。例如 this.setContentView(); 需要改为 that.setContentView();
插件中涉及到的 Android 权限,须在 APP 项目清单中具有声明。
插件 Activity 跳转时,推荐使用 CJActivityUtils 类来辅助跳转。若一定要 startActivity 或 startActivityForResult,在跳转过程中的 Intent 不能自己 new,必须使用 CJActivityUtils.getPluginIntent();
在插件和APP两个工程中不能引用相同的 jar 包。解决办法是:在插件工程的项目中添加一个 /cjlibs 的文件夹,将需要调用的 jar 包放到这个文件夹中,并在插件项目目录下的 .classpath 中加入如下语句,系统会自动处理相关细节
- <classpathentry kind="lib" path="cjlibs"/>
下载 KJFrameForAndroid 项目,并运行 demo;下载 插件化演示Demo,点击 KJFrameForAndroid 的 Demo 中 Plugin 模块根据提示操作