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

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

随着应用的不断迭代,应用的体积不断增大,项目越来越臃肿,冗余添加。项目新功能的加入,无法确定与用户匹配性,发生严重异常往往牵一发而动全身,仅仅能紧急公布补丁版本号,强制用户进行更新。结果频繁的更新。反而easy减少用户使用黏性,或者是公司业务的不断发展,同系的应用越来越多,传统方式须要通过用户量最大的主项目进行引导下载并安装。

怎么办?这里就能够參考浏览器-插件开发模式。

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

(1) DynamicLoadApk

这个项目实现了一部分的动态载入。原理是 DexClassLoader 加 Activity 代理。能够看看。即在容器中注冊几个代理的 Activity,启动插件的 Activity 时实际启动的都是代理的 Activity。这样就攻克了 Activity 必须注冊的问题。

(2) AndroidDynamicLoader

这是点评一个project师介绍的方式,和上面不同的是:它不是用代理 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,相似容器,开发组都是各自的project。各自project之间有通信。那么我们怎样保证单独开发了,各自project之间怎样相互通信了。

Fish-jenny:contentprovider。

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

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

刘光利:广播非常耗性能啊?

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

安琪:eventbus 跨进程呢?

主持人-龙伟:不能够

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

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

Sirius:binder。

Willace:套接字,

非墨:共享内存? 管道,

安琪:aidl,

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

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

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

谢谢大家今天的主题会參与!

国内 ITOM 管理平台 OneAPM 致力于帮助企业用户提供全栈式的性能管理以及 IT 运维管理服务。通过一个探针就能够完毕日志分析、安全防护、APM 基础组件监控、集成报警以及大数据分析等功能。想阅读很多其它优秀文章。请訪问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

时间: 2024-08-02 15:10:32

怎样将「插件化」接入到项目之中?的相关文章

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

本期移动开发精英社群讨论的主题是「插件化」,上网查了一下,发现一篇 CSDN 博主写的文章<Android 使用动态加载框架DL进行插件化开发>.此处引用原作者的话: 随着应用的不断迭代,应用的体积不断增大,项目越来越臃肿,冗余增加.项目新功能的添加,无法确定与用户匹配性,发生严重异常往往牵一发而动全身,只能紧急发布补丁版本,强制用户进行更新.结果频繁的更新,反而容易降低用户使用黏性,或者是公司业务的不断发展,同系的应用越来越多,传统方式需要通过用户量最大的主项目进行引导下载并安装.怎么办?这

360手机卫士插件化RePlugin今日开源

写在前面 "RePlugin将在6月底开源,这将是我们献给安卓世界最好的礼物."当我们宣布这一消息时,心中的激动,无以言表.是的,三年的"厚积",如今的"薄发",看似平凡的话,实际上却饱含了我们太多的激动.辛酸与泪. 那么今天,我们就来详细的和您聊一聊,这个从2014年中旬,正式在手机卫士上启用,并即将开源的360 RePlugin,究竟能为我们,更为您能带来什么. GitHub地址:https://github.com/Qihoo360/ReP

微服务架构之「 配置中心 」

在微服务架构的系列文章中,前面已经通过文章<微服务架构之「服务网关 」>介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」.后面还会继续介绍 服务框架.服务监控.服务治理等.还是那句话,只有将这些基础设施弄清楚了,微服务实践的道路才能走的稳.走的远. 「配置中心」,顾名思义,就是用来统一管理项目中所有配置的系统.虽然听起来很简单,但也不要小瞧了这个模块.如果一个中型互联网项目,不采用配置中心的模式,一大堆的各类配置项,各种不定时的修改

android 广播的插件化

------本文转载自 Android插件化原理解析--广播的管理 这一系列的文章实在是写的好! 1, 概述 为了实现Activity的插件化我们付出了相当多的努力:那么Android系统的 其他组件,比如BroadcastReceiver,Service还有ContentProvider,它们又该如何处理呢? 相比Activity,BroadcastReceiver要简单很多--广播的生命周期相当简单:如果希望插件能够支持广播,这意味着什么? 回想一下我们日常开发的时候是如何使用Broadca

【vuejs面试题】务必熟知的vuejs面试题「务必收藏」

如果能帮到你,点个赞吧,务必熟知的vuejs面试题「务必收藏」 vuejs 基础必备 1.active-class 是哪个组件的属性?嵌套路由怎么定义 (1).active-class 是 vue-router 模块的 router-link 组件的属性 (2).使用 children 定义嵌套路由 2.怎么定义 vue-router 的动态路由? 怎么获取传过来的值 在 router 目录下的 index.js 文件中,对 path 属性加上 /:id. 使用 router 对象的 param

Chrome 扩展 Stylish :给不喜欢某个网站一键「换肤」

原文地址:http://whosmall.com/?post=419 本文标签: Chrome扩展 Chrome浏览器 Chrome插件 Chrome扩展Stylish Stylish是什么 Stylish 是什么? 开门见山,Stylish 的作用是,它可以把百度首页变成这样: 它还能把知乎「拍扁」,让微博网页版变得简洁无比,让 Feedly 用上Material Design-- 这个神奇的 Stylish实际上是一个浏览器插件,适用于 Chrome,Firefox,Opera 以及 Saf

王堅:「資料」改變了商業模式,運算能力決定企業的競爭力

阿里巴巴集團技術委員會主席.阿里巴巴的雲端建立者,王堅博士於上週來到台灣,出席了阿里巴巴針對台灣創業者舉辦的一場大會時,發表了他對於雲端運算.大數據以及人工智慧的一些看法以及建議. 由於是針對創業者的場合,王堅針對現在創業者最注意的四個趨勢:網際網路.大數據.雲端運算和人工智慧提出了建議.王堅表示,當初阿里巴巴談電子商務的時候,並不是大家想的簡單的把商店搬到網路上如此而已,而是從「相信網際網路是未來商業的基礎設施」這個基本觀念出發.而現在,你可以看到當初有這樣想法的網路公司,現在都已經成長為科技

「C语言」Windows+EclipseCDT下的C语言开发环境准备

之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Clion等IDE/编辑器搭建C语言开发环境,但也只是点到为止的介绍,对每一个开发环境的选择没有详细的步骤与过程: 这次借助C语言期末课程设计文档上介绍用Eclipse开发C语言的时机,逐步图文论证如何用Eclipse从安装到输出自己的第一个C语言Hello World: 欢迎探讨,欢迎互粉: 目录:

大數據時代浪潮的「弄潮兒」

進入2015年,海量的數據正在迅速膨脹並變大,它決定著企業的未來發展,雖然現在企業可能並沒有意識到數據爆炸性增長帶來的問題的隱患,但是隨著時間的推移,人們將越來越多的意識到數據對企業的重要性. 面臨海量數據的挑戰 大數據(big data)是時下非常熱門的話題,大數據是用來描述和定義信息爆炸時代產生的海量數據.大數據的發展能夠為人們獲得更為深刻.全面的洞察能力提供前所未有的空間與潛力,那麼如何看待大數據給IT市場帶來的機遇和挑戰呢? 紐約時報網站此前刊載文章稱,大數據時代已經來臨並且正在對每個領