KJFrameForAndroid 之 PluginLibrary

发布于 2023-01-07 12:20:30 字数 2226 浏览 133 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文