KJFrameForAndroid 之 PluginLibrary
CJFrameForAndroid 简介
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 模块根据提示操作
注意事项
- APP 项目和插件项目中,都需要使用到 CJFrameForAndroid 的 jar 包。
- 在项目中必须加入托管所声明。
- 在开发插件的时候,必须继承 CJ 框架相应基类;
- 在插件的 Activity 中,一切使用 this 的部分必须使用that来替代;
- 在插件 Activity 跳转时,推荐使用 CJActivityUtils 类来辅助跳转;
- 在插件和 APP 两个工程中不能引用相同的 jar 包;
名词解释
- APP项目:指要调用插件 apk 的那个已经安装到用户手机上的应用。
- 插件项目:指没有被安装且希望借助已经安装到手机上的项目运行的 apk。
- 插件化:Activity 继承自 CJActivity,且与 APP 项目 jar 包冲突已经解决的插件项目称为已经被插件化。
- Activity 事务:在 CJFrameForAndroid 中,一个 Activity 的生命周期以及交互事件统称为 Activity 的事务。
- 托管所:指插件中的一个委派/代理 Activity,通过这个 Activity 去处理插件中 Activity 的全部事务,从而表现为就像插件中的 Activity 在运行一样。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论