360手机卫士开源插件RePlugin已经开源了。GitHub地址:https://github.com/Qihoo360/RePlugin。欢迎您为RePlugin项目加Star、发送Pull Request,提Issue。我们会竭尽所能回答您们的疑惑。本文将详细的介绍360开源插件RePlugin的开源过程,已经该框架的原理。
RePlugin是什么
RePlugin是一套完整的、稳定的、适合全面使用的,占坑类插件化方案。其主要优势有:
- 极其灵活:主程序无需升级(无需在Manifest中预埋组件),即可支持新增的四大组件,甚至全新的插件;
- 非常稳定:Hook点仅有一处(Classloader)。其崩溃率做到仅为“万分之一”,并完美兼容市面上近乎所有的Android ROM;
- 特性丰富:支持近乎所有在“单品”开发时的特性,包括静态Receiver、Task-Affinity、自定义Theme、进程坑位、AppCompat等;
- 进程任意:可让各组件跑在UI、常驻,甚至是“任意坑位进程”;
- 易于集成:无论插件还是主程序,只需“数行”就能完成接入;
- 自由隔离:想隔离就隔离(如不稳定或占资源的插件,易于释放),不想隔离的模块就混用(如各种基础、UI插件,都跑在UI进程内,性能优异);
- 管理成熟:拥有成熟稳定的“插件管理方案”,支持插件安装、升级、卸载、版本管理,甚至包括进程通讯、协议版本、安全校验等
- 数亿支撑:有360手机卫士庞大用户量做支撑。
- 截止2017年6月底,RePlugin的:
- 插件数已达102个(其中,核心基础插件57个)。
- 插件占应用比(指把代码资源铺开,插件占整个应用的比例)高达83%。
- 年发版次数高达596次(平均每个工作日发版2-3次)。
此外,目前360公司几乎所有的亿级用户量的APP,以及多款主流第三方APP,都采用了RePlugin方案。
RePlugin的核心优势
上图为:RePlugin与现有插件化框架的对比。
RePlugin插件的愿景
让插件化能飞入寻常应用家,做到稳定、灵活、自由,大小项目兼用。
插件化的好处
在讲述我们团队为何要在2013年底,设计一套属于自己的插件化之前,我们先来简单谈谈,有了插件化方案后,能为我们带来多大的便利,它究竟解决了什么问题。
对于用户而言
- 一切按需:利用插件化方案,可以让您的应用变得“小而精”。只有当用户需要使用某个特定功能时,才可以下载并开启,且可以随时卸载插件。这不仅可以减小APK大小、节省流量,还可明显的减少内存、内部存储占用,将更多空间让给珍贵的相片、文档等资料;
- 随时体验新版:不用去应用市场等到大包升级,用户可以随时体验到新版的应用。现在红极一时的插件化、动态化(RN类)、热更新技术,都或多或少的在围绕此点而展开,可见其对用户带来的巨大价值。
对于开发者而言
- 发版灵活:不用等市场上线,等用户主动升级,结果错过宝贵的时机。插件化方案可让您做到“随时发版”,不受“发版窗口期”的限制。甚至可针对不同地域、不同用户群、不同时段来更新,且可以快速验证自己的构想;
- 组织结构灵活:一旦发版变得足够灵活,则组织结构上就可以由原来的“统一作战”变成“百团作战”,每个团队都在开发“自己的插件单品”,制定自己的发版计划;
- 模块思维:可以让团队形成“模块意识”。当然,插件间、插件与宿主间允许有适度的耦合,但不会是“毫无控制”的那种。这让开发者们意识到,我们之间是“插件间的协定”,而非“同一屋檐下,随便胡来”,迫使团队以全新又合适的方式来开发应用;
- Android原生优势:和动态化(RN类)不同,您可以使用最熟悉的Java/Kotlin语言,及各种原生API来开发您的插件。这使得应用能和系统更“契合”,充分利用原生的各种优势,且在性能上几乎感受不到影响。
如上所述,无论是对用户,还是对开发者而言,使用插件化框架都是大有益处的,理应做到“飞入寻常应用家”。
然而,在实际调查过程中,我们却发现了一个和这些好处完全不匹配的奇怪现象。究竟是什么呢?
既然插件化这么好,为什么360还采取插件化
虽然我事先已做好功课,然而在一次技术大会上的调查结果却让人大跌眼镜——在参会的200多位安卓开发者中,仅有不足5%的比例,使用了插件化方案。超过九成的开发者,目前上没有将插件化应用在软件开发之中。
实际上,这和我们在线下观察到的结果基本吻合。结合之前的调查,我们发现,有三大挑战制约了插件化在Android开发界的普及:
- 不够稳定:目前有很多比较灵活的插件化框架,虽然支持特性众多,但因Hook点较多,所以不是非常稳定。因此很多大型项目不是很愿意用它们来开发插件,担心出现应用崩溃、插件无法正常使用等问题。
- 不够灵活:有一些相对稳定的插件化框架,又存在“不够灵活、自由”的问题,一旦插件有较大改动,如新增Activity、Service、进程等,就需要主程序发版,更不用说能做到“一年前的主程序,无需升级,可以用新插件和组件”。也因此,很多项目的“接入动机”也就大打折扣了。
- 功能丰富项目专用:目前市面上的插件化方案,大多仅在功能丰富的大型项目中,才被考虑使用,且多用于边缘功能,比如“红包”、“天气”、“摇一摇”等,他们认为只有“非核心”模块,才会考虑做成插件。这也使得插件化的应用范围非常狭窄。
然而,通过我们多年的实践证明,以上三大挑战,其实是可以被攻克的。这也是我们今天要为您介绍的,360手机卫士首款Android开源项目——RePlugin。
既然这么大胆,那么,我们究竟是怎么做到的呢?
RePlugin插件的稳定性
前文提到,不够稳定的主要原因是Hook了太多。那么市面上比较灵活的插件化框架,究竟Hook了哪些呢?
很少,或者说基本没有。
360 RePlugin 目前已被上百家大型公司的应用所采用。
RePlugin 架构图
以360手机卫士为例:
- 系统层——Android:为Android Framework层。只有ClassLoader是Hook的,而AMS、Resources等都没有做Hook,确保了其稳定性。
- 框架层——RePlugin框架:RePlugin框架层,只有RePlugin是对“上层完全公开”的,其余均为Internal,或“动态编译方案”生效后的调用,对开发者而言是“无需关心”的。
- 插件层——各插件:“标蓝部分”是各插件,包括大部分的业务插件(如体检、清理、桌面插件等)。而其中“标黄部分”是支撑一个应用的各种基础插件,如WebView、Download、Share,甚至Protobuf都能成为基础插件。
限于篇幅,下篇文章中,我将给大家介绍如何使用RePlugin插件。
: » 360手机卫士开源插件RePlugin原理
原创文章,作者:jamestackk,如若转载,请注明出处:https://blog.ytso.com/251607.html