本期移动开发精英社群讨论的主题是「插件化」,上网查了一下,发现一篇 CSDN 博主写的文章《Android 使用动态加载框架DL进行插件化开发》。此处引用原作者的话:

随着应用的不断迭代,应用的体积不断增大,项目越来越臃肿,冗余增加。项目新功能的添加,无法确定与用户匹配性,发生严重异常往往牵一发而动全身,只能紧急发布补丁版本,强制用户进行更新。结果频繁的更新,反而容易降低用户使用黏性,或者是公司业务的不断发展,同系的应用越来越多,传统方式需要通过用户量最大的主项目进行引导下载并安装。怎么办?这里就可以参考浏览器-插件开发模式。

同时,笔者也在网络上发现了一些开源的插件化框架,包括:

(1) DynamicLoadApk

这个项目实现了一部分的动态加载,原理是 DexClassLoader 加 Activity 代理,可以看看。即在容器中注册几个代理的 Activity,启动插件的 Activity 时实际启动的都是代理的 Activity,这样就解决了 Activity 必须注册的问题。

(2) AndroidDynamicLoader

这是点评一个工程师介绍的方式,和上面不同的是:它不是用代理 Activity 的方式实现而是用 Fragment 以及 schema 的方式实现

(3) Android PluginManager

这个项目的原理实际也是 DexClassLoader 加 Activity 代理,不同的是上面的 dynamic-load-apk 项目中,插件需要依赖框架的 lib,插件组件继承框架 lib 的 Base 组件。而这个框架通过字节码操作动态生成一个子类去继承插件组件解决插件必须依赖框架的问题,从而达到插件无需做任何改动(理论上)即可加载的效果。

希望,上述的资料和内容,能够对大家了解插件化有所帮助,本期讨论的主题如下,文章系 ITOM 管理平台 OneAPM 整理。

  • 什么是插件化?
  • 为什么要插件化?
  • 插件化需要哪些技术支撑?
  • 插件化的坑都有哪些?
  • 如何将插件化接入到项目中?

什么是插件化

主持人-龙伟: 大家是如何理解插件化的?

杨天飞-用友超客-android: 动态加载?

杨春-深圳杰为-android开发: 插件化我觉得就是将一个apk改成多个apk。

王岳明:移动平台插件化一般来说,通过后台下发业务模块到终端,实现业务系统的动态更新吧?

安琪: 多apk?

Struggle:不一定是apk。

追寻: dex jar。

小诺理财android-何思敏 : 目前的插件化,还是为了补充 C 端更新修复问题吧。比如热修复、插件load、组件技术等等。

王岳明: 另外插件化也是一种系统架构方式,降低各子系统的耦合性。

主持人-龙伟: 插件化主要是解耦合、热更新、热修复、分布式团队开发。

杨维杰: 主要是把业务逻辑拆分,在需要的时候加载,减少体积吧?依赖加载.

为什么需要插件化?

王岳明:即插即用。

主持人-龙伟:这个类似 USB 接口。

安琪: 不一定是 apk,也许是特有的接口格式特有的压缩包

陈昱:高效率。

刘光利:我用插件化最大出发点就是:模块化,解耦,复用,至于热更新要看业务场景的需要。

千里走单骑:业务驱使,易于团队协作。

小可爱:跟搭积木一样,可以自由组装,实现业务模块化,方便开发和维护。

追寻:节省流量。

Sirius:随时上线,灵活。

安琪:Lua 在 Cocos2dx 热更新比较多。

小诺理财android-何思敏: 核心还是模块化,业务分离,组件设计。

安琪:增量更新。

主持人-龙伟: 这些都是插件化的原因。大家看过市面上插件化框架的代码了吗? 比如 Droidplugin,插件化说起来就一句话,加载代码,加载资源。

插件化需要哪些技术支撑?

主持人-龙伟: 插件化需要的技术,首插件化需要懂类加载机制,资源加载机制,大家对着两种技术理解如何,说说自己的看法。

安琪:apk 包机制,assert。

追寻:没超过就一个 dex 吧!

杨天飞-用友超客-android: DexclassLoader

主持人-龙伟:类加载有引导加载,扩展加载,系统加载,我们平时安装的 apk 使用的哪个类加载来加载,大家可以说说。

安琪:也有 cpp 写的。

小可爱: PathClassloader。

主持人-龙伟:Dexclassloader,这个是我们作为插件化加载代码的加载器之一。非 apk 代码可以用这个来加载,一般常见加载的包有 dex jar 插件化 apk 包。

小可爱:目前一般是做成 apk 文件吧,插件的?

刘光利:还可以扩展其他格式吗?

主持人-龙伟:可以,只要符合文件内容协议。

主持人-龙伟:资源的处理是比较麻烦的。首先要保证资源的正确加载,然后要解决很多坑。

刘光利:如何防止插件 apk 中的资源和宿主 apk 中的资源引用冲突?

王岳明:你说的资源是什么?

主持人-龙伟:图片、文本、颜色等等,这些都是资源。

非默:不过你的插件 apk 如何引用宿主 apk 的资源,尤其你的宿主 apk 做了主题之后?

主持人-龙伟:这个需要协商主与宿。

非默:这个我觉得才是插件化相对困难的地方,要么你就互相传递引用,但那样可能会把你的耦合度提高。

刘光利: accd 就是定制 aapt 工具,我觉得不是太好。

非墨:个人觉得,目前没有最优解。

主持人-龙伟:对,插件化是不断发现问题,埋坑!

插件化都有哪些坑?

主持人-龙伟:插件化的中的难点与坑。Android 组件代码加载的特殊性,比如 Activity 的加载。

刘光利:由系统掌握生命周期的类。

非墨:fragment。

小可爱:瞒天过海,360 的框架思想,欺骗系统,把框架层弄于鼓掌之中。

主持人-龙伟:其实就是一个平台,提供上下文。

非墨:这个其实说的有点抽象了,举个例子就是 Android 系统平台,所有的 apk 本身是插件,其实就是中间件的概念。

主持人-龙伟:上下文是一个操场,里面很多活动的对象,这些对象就是 apk,大家这样理解了吗?

安琪:插件化安全吗?会产生依赖病毒吗?

非墨:没有绝对的安全。

主持人-龙伟:既然是插件,那么肯定有缺陷。

王岳明:请教个问题,Android 的插件涉及到签名验证吗?

非墨:系统认证还是代码认证?

刘光利:认证很重要,一般是签名认证吧,不然会有注入攻击的分享。

主持人-龙伟:加载之前必须认证,认证通过才加载。

熊生-迈科技-android:如何认证呢?

王岳明:宿主与主体采用相同的签名方式可以相互调用吗?

主持人-龙伟:可以的,双向的。

非墨:这种方式需要安装么?

主持人-龙伟:插件无需安装,可以通信,我说说代码加载认证。

非墨:我主要没理解,相互调用跟签名相不相同有什么关系?

主持人-龙伟:没关系,看认证机制,无需安装的,就没有系统认证的说法了,其实 apk 安装的时候才会去认证,插件话是绕过去了。但是本身的代码认证还需要。一般可以用sha1算法认证。

Wallace:可以自定义二进制。

主持人-龙伟:二进制难度有点大。

Wallace:不是要校验下载包吗?

主持人-龙伟:这个是比较差异。

Wallace:打包跟解包都靠自己的算法。

非墨:你如果自定义二进制文件不能 loader,load 除非你有一层解码。

Wallace:别人解不了。

如何将插件化接入到项目中?

主持人-龙伟:插件化接入到项目中,大家的理解是什么样的?

Wallace:先说一个场景,然后怎么处理用插件化解决的场景。

主持人-龙伟:首先我们有3个团队开发,有三个业务方向,有个主 APP,类似容器,开发组都是各自的工程,各自工程之间有通信,那么我们如何保证单独开发了,各自工程之间如何相互通信了。

Fish-jenny:contentprovider。

主持人-龙伟:不能,这个是数据库的吧?本质是binder,这里可能实际到插件的运行环境。

安琪:远程广播作为接口。

刘光利:广播很耗性能啊?

非墨:广播涉及到进程间调用,效率低,而且不安全。

安琪:eventbus 跨进程呢?

主持人-龙伟:不可以

刘光利:插件与宿主共享数据,逻辑可以定义接口,抽成公用库。

主持人-龙伟:这个是通用解决方案,跨进程就不太方便了,大家对 android 系统跨进程的理解是什么样的?

Sirius:binder。

Willace:套接字,

非墨:共享内存? 管道,

安琪:aidl,

熊生-迈科技-android:共享 sp 文件算不算?

小可爱:直接写 parcle 进行通信吧?

主持人-龙伟:这个是本质,一般可以插件包有个 plugincontext,这个是插件接口切入点。借助这个接口可以实现插件之间通信。插件化通用平台只是理想化的目标,实际场景很难。插件化确实难度大,一晚上讲透彻不太现实,下次有机会再和大家一起探讨。谢谢大家今天的主题会参与!

如何将「插件化」接入到项目之中?相关推荐

  1. 怎样将「插件化」接入到项目之中?

    本期移动开发精英社群讨论的主题是「插件化」,上网查了一下,发现一篇 CSDN 博主写的文章<Android 使用动态载入框架DL进行插件化开发>.此处引用原作者的话: 随着应用的不断迭代, ...

  2. 指令集与应敏科技达成战略合作,国产原创物联网操作系统助力电力检测「智慧化」...

    2022年6月6日下午,指令集智能科技与应敏科技签署了战略合作框架协议:该签约仪式在启迪创智谷隆重举行. 根据协议,双方将充分发挥各自的行业技术优势,通力合作,通过战略合作牵引,促进电力检测行业数智化 ...

  3. 降维打击:这款GAN可以让真人「二次元化」

    选自arXiv 作者:Kaidi Cao.Jing Liao.Lu Yuan 机器之心编译 来自清华.香港城市大学和微软的研究者最近提出了 CariGAN,可以在没有成对图像的情况下将真人照片自动转换 ...

  4. 「场景化」增长的践行者:探寻大数据时代的商业变革

    今日世界,产品与服务的可替代性日益显著,因此,企业必须知道并深入了解用户的期望与需求,这样才能赢得关键竞争优势.大数据分析可以将所有数据源集中起来,并提供获得用户数据的简易途径,之后便可对用户数据加以 ...

  5. PC端抖音HTML布局,从抖音网页版上线、微信PC版可发朋友圈,看互联网「全端化」布局...

    三哥觉得,不管是用户价值,还是商业价值,都极大. 先说用户价值. 比如,当你在用电脑期间,想发或看朋友圈,之前只能打开手机进行操作,这很割裂,现在直接在电脑上完成了,很顺畅. 短视频.娱乐视频,适合手 ...

  6. android插件化原理

    最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接.随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内 ...

  7. Android插件化思考

    最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接.随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内 ...

  8. Android插件化原理解析——ContentProvider的插件化

    目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案:那么对于Co ...

  9. ContentProvider插件化

    ContentProvider插件化 目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特 ...

最新文章

  1. Linux rsync目录同步功能实现
  2. 网络推广外包——竞价账户网络推广外包时怎样进行关键词推广?
  3. check $m2_home environment variable and mvn script match
  4. Cisco PT模拟实验(12) 路由器静态路由的配置
  5. 02 | 服务治理:Nacos 如何实现微服务服务治理
  6. 学习新 api 的思考过程 4.18
  7. Apache Hudi 在 B 站构建实时数据湖的实践
  8. 计算机画画作品 人物 游泳,夏天主题的儿童画-游泳的儿童绘画作品
  9. mysql测试什么鬼,where 1=1 是什么鬼?SQL中有这玩意?
  10. 地壳中元素含量排名记忆口诀_地壳中含量最多的元素--氧元素
  11. java中json转map
  12. esp32实现万能红外遥控器 基于开源红外码库IREXT
  13. 投票 java_Java基础之简单投票程序
  14. ✖ subject may not be empty [subject-empty]
  15. ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn
  16. kali中无线密码的破解
  17. 一般熟练盲打需要多久_如何学会盲打, 大概需要多长时间?
  18. 支付宝商家二维码收款、订单状态查询、退款API试用笔记
  19. hdf知道这些就够了
  20. Android项目实战--手机卫士

热门文章

  1. c++编写手机小游戏代码_经典小游戏大集合(C++ 源码)
  2. mysql里all什么意思_mysql中all的用法是什么
  3. QT+PCL+VS制作点云显示界面(彩色显示xyz点云)
  4. 易协软件:workflow与BPM区别
  5. 交换机和路由器的区别?
  6. TensorFlow实现梯度下降法求解一元和多元线性回归问题
  7. arduino仿真平台有哪些
  8. js - 关于对象,数组和字符串的方法 总结
  9. 使用ltp进行三元组提取的实战代码
  10. Python脚本制作exe程序超详细!