结合动态加载系列文章的分析,现在开始设计并开发一个 Android 的插件化框架,命名为 Frontia。Frontia 有 “前端” 的意思,寓意着 Android 插件能像前端开发那样动态发版,同时,这一词出自 Macross 动画系列,有 “繁星” 的意思,“我们的征途是星辰大海 KIRA!!(

基本信息

Frontia 是一个 Android 的插件化框架(基于 ClassLoader 的动态加载技术),相比其他开源项目,Frontia 的特点是扩展性强,更加专注于插件的下载、更新、安装、管理,以及插件和宿主之间的交互。在深入介绍 Frontia 之前,我们先想想开发一个插件化框架需要考虑的问题有哪些。

满足多种业务需求的插件

现在的插件化需求有许多花样,首先,有的只需要将一些特定的类(或者接口的实现类)插件化,比如一些游戏的 SDK,需要把登录功能和支付功能的实现插件化,这样 SDK 就能实现动态升级。其次,有一些业务需要将 so 库给做成插件化,因为一些 so 库需要同时内置多个 CPU 类型(x86/arm64 等)的版本,所以会占用非常可观的体积,如果这些 so 库并不是核心的业务,完全可以做成插件,等到需要的时候再动态加载。再则,也有一些相对独立的业务需要独立升级,而不希望随着 APP 一起发版。比如 “游戏广场” 这样的一个业务,APP 只提供一个入口启动游戏广场,启动后接下来就不管了,这样的业务可以做成插件,插件可以动态升级(游戏广场可以自由设计自己的界面,甚至增加新的页面),也可以在多个 APP 之间使用同一插件业务(许多 APP 都有游戏广场的推广业务)。

考虑到种种需求,我们的插件有时只需要加载一些普通的类,有时候需要加载 res 资源,有时候需要加载 so 库,有时候需要加载新的组件类(Activity、Service 等)甚至调用宿主 APP 的某些功能(比如获取用户账号信息)。因此,我们的插件化框架在处理插件加载的具体过程时,应该能够灵活地扩展,以满足以上以及将来的各种插件需求。

插件的更新策略

除了处理插件的加载问题外,插件化框架还需要处理插件的更新问题,要不然插件化开发就没有意义了。加载插件前,我们需要从服务器下载插件,或者判断是否需要从服务器下载新的插件版本,下载新版本插件失败的时候,我们有又需要判断本地是否有可用的旧版本。因此,插件化框架需要提供一个完善的插件更新策略,以从服务器的插件版本列表和本地的缓存插件版本列表中,挑选出最佳的插件版本(目标插件)。

当我们插件的某个版本出现严重问题的时候,我们希望所有的下载过这个版本的插件的 APP 都要抛弃这个插件,所以插件化框架需要有 “及时吊销” 功能。当我们插件的最新版本更新了某些重要的功能,我们希望所有的 APP 都立刻升级到这个插件版本,如果下载最新版本插件失败,需要重新下载或者直接抛弃插件,而不能使用旧版本的插件,也就是说框架需要 “强制升级” 功能。

插件的安装策略

同一个版本的插件只需要下载一次就可以了,不能重复下载。插件化框架需要将下载下来的插件需要存放到指定的目录(我们可以把这个过程当作是 “安装插件”),以便于知道当前 APP 已经安装了哪些插件,以及这些插件有哪些版本,这样我们才可以判断需不需要从服务器下载新版本的插件。

同时,存放在本地文件系统上的插件是不安全的,可能被其他人恶意修改,但插件被加载进宿主 APP 后,它就是 APP 程序的一部分,可以访问 APP 的所有内存数据,插件化框架还需要提供对本地已安装插件的安全校验功能。

插件投入生产前需要解决的问题

上面谈到的问题大致可以归类成插件的更新、安装以及加载问题,这些都是插件化框架应该解决的基本问题。当然除了这些问题之外,在将插件化开发引入实际生产的项目中的时候,还有一些问题不得不考虑,比如在开发插件的时候如何快捷地调试和构建插件,当插件出现 BUG 的时候如何快速定位问题(因为一个插件的 BUG 可能是由 “具体的设备型号 + 具体的宿主 APP 版本号 + 具体的插件版本号” 导致的,这也是插件化开发的诟病,尽量不要吧频繁变动的业务插件化),如何做好数据上报统计以评估插件的工作效果,当然,必不可少的,我们还需要一个可靠的服务器来托管我们插件(理想的情景是,我们调试完把代码推到构建系统,构建系统构建完把插件入库并把插件的版本信息上传到服务器,服务器更新新插件版本的可用信息,整个过程不需要手动操作)。

类似之前谈到的 Android 动态加载技术需要解决的两个主要问题,插件化开发投入生产需要解决的问题大致可归纳如下:插件的更新、安装、加载策略;

插件的安全性校验;

插件与宿主的通讯(互调)方式,甚至插件间互相调用的方式;

插件调试和构建的方法;

出现 BUG 时定位问题的方法;

插件数据统计;

插件托管的服务器(插件的持续集成);

一言以蔽之,插件化开发不仅仅需要解决一个开发框架的问题,从整体上来看更像是需要解决一个开发平台的问题,除了解决代码的问题(粗体部分),还需解决生产工具或者效率的问题。

android中的插件开发框架,设计并开发一个 Android 的插件化框架相关推荐

  1. 基于Android的健康医疗论坛的设计与开发(android studio)

    提示:文章为原创,仅供参考 基于Android的健康医疗论坛的设计与开发(android studio,提供源码) 提供源码:链接:https://pan.baidu.com/s/1JnbfJ67UC ...

  2. rails开发利器:视频播放插件plugin(如何开发一个简单的插件)

    For: rails2.3.8   因为我的项目是基于rails2.3.8的,以后在做rails3.0的 plugin的名称是 video_player, 新建plugin ruby script/g ...

  3. Android 3D 魔方游戏的设计与开发

    Android 3D 魔方游戏的设计与开发 5.1 Feature 定义 魔方是一个有趣的益智游戏,相信很多人都玩过.本次毕业设计,欲完成的主要的功能如下: (1) 开始游戏:开始一个新的游戏 (2) ...

  4. 基于android平台的手机安全卫士的设计与实现 开题报告,开题报告-基于android的手机安全卫士的设计与开发.doc...

    毕业设计开题报告 题 目: 基于Android的手机安全卫士的设计与开发 专 业 计算机科学与技术 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 电气信息工程学院 专 业 负 责 人 ...

  5. 基于android的2048游戏设计,基于Android平台的2048游戏设计与开发.docx

    基于Android平台的2048游戏设计与开发 高级操作系统论文(设计) 题 目 基于Android个人2048 小游戏的设计与开发姓 名 学 号 院. 系 信息学院 专 业 指导教师 职称(学历)目 ...

  6. android日程管理开发,基于Android日程管理工具的设计与开发.doc

    PAGE PAGE i 基于android日程管理工具的设计与开发 摘 要 随着移动平台的崛起,越来越多的传统PC软件被移植到移动平台,比如ipad,iphone,Android等智能终端设备,在这些 ...

  7. asp.net web开发框架_Web前端开发必不可少的9个开源框架

    大多数人想到Web开发时,通常会想到HTML或JavaScript,往往忽略了CSS,根据Wikipedia的说法,CSS既是网页中最重要也是最常被遗忘的部分之一,尽管它是万维网的三大基础技术之一. ...

  8. 【Android 安装包优化】Android 中使用 SVG 图片 ( SVG 矢量图简介 | Android 中生成 Vector 矢量图资源 )

    文章目录 一.SVG 矢量图简介 二.Android 中生成 Vector 矢量图资源 三.参考资料 一.SVG 矢量图简介 Android SVG 参考文档 : https://developer. ...

  9. 基于android的视频采集系统的设计与实现,基于Android的视频通话系统的设计与实现.docx...

    基于Android的视频通话系统的设计与实现 基于Android的视频通话系统的设计与实现摘 要近年来,智能手机操作系统发展迅速,尤其是Android系统的迅猛发展已经将全球智能手机市场引领到了非常火 ...

最新文章

  1. 微信小程序中base64格式的小程序码通过canvas画出来无效
  2. 邮件实用技巧一:如何让你的邮件畅通全球
  3. 处女座的签到题 (暴力+局部排序)
  4. 联想一体机电源键不亮_联想/兄弟打印机复印一体机激光器清洁教程
  5. STM32M CUBE实现printf打印调试信息以及实现单字节接收
  6. Android开发之Socket通信的方法
  7. dj鲜生-38-项目上线简介-从本地小项目到云服务的调试
  8. 在Ubuntu 14.04上安装 Webmin
  9. 使用CompletionService结合ExecutorService批处理任务
  10. 【SRM-07 D】天才麻将少女KPM
  11. 利用unlocker在VMware里解锁macOS操作系统
  12. 生活随记-很有意思的评论
  13. 六度分离 (Floyd算法)
  14. 数据库笔试面试(第一版)——根据题目完成以下50道SQL语句
  15. python任务栏都隐藏了_如何隐藏PyQt4 Python应用程序的任务栏图标?
  16. 将win7笔记本电脑变身WiFi热点,让手机、笔记本共享上网
  17. 用相关函数法计算信号的延迟量
  18. 共享店铺靠谱么?共享店铺哪家好?全方位测评企雀共享店铺,黑谷共享店铺!
  19. 使用python制作读取示波器波形的GUI小工具
  20. EJB到底是什么?(推荐)

热门文章

  1. 王思聪「随手」装了台服务器,跑分全球第 4,网友:壕无人性!
  2. 【浅尝辄止】《汇编语言》入栈出栈操作
  3. C51---9 LED点阵屏
  4. 低度酒赛道进入洗牌期,新品牌如何破局三大难题?
  5. [Python] PyQt5+Pycharm 实现省、市、区/县三级联动效果
  6. php接口请求跨域问题
  7. 【云游戏】云游戏学习与实践(一)——云游戏概述
  8. 360加固框架Gradle实现
  9. 数据链路层的封装-HDLC协议
  10. Wireshark抓包分析三次握手四次挥手