菜单

产品设计插件化,将拉动更为灵敏的App升级方式!Android 插件化与组件化。

2018年9月27日 - 中甲报道

章开始:本文是Mandy权先生上在成品壹佰的篇章(http://www.chanpin100.com/article/105763)转载文章就供大家习,不作其他商业用途。

一、组件化

组件化,就是将APP拆分成不同功能模块,形成独立组件,让宿主调用。
组件化不自然是插件化,组件化是一个重复可怜的定义:把模块解耦,组件之间代码不依赖,宿主可以依靠组件;而插件化则具体到了技术点上,宿主通过
动态加载 来调用组件,宿主不依靠组件,达到 完全解耦
的目的(比如图片缓存就可以看成一个零部件为多个 App 共用)。

活之计划与以如开车一样,随时都亟需产品“握紧”方向盘,调整行驶方向。

二、插件化

Android程序每次换代都使下载一个完完全全的apk,而多时光软件只是更新了一个稍微作用而已,这样的话,就显得甚麻烦。如果拿android程序做成主程序+插件化的款式吗,这样才有益于小作用的恢弘(比如一般
App 的皮层样式就可以看成一个插件)。

经 gradle 配置的法,将打 debug 包和 release
包分开。这样见面出一个好处,开发一个模块,在 debug 的时候,可以打成一个
apk ,独立运作测试,可以完全独立为一体宿主 APP
的别具备组件;待至如果打 release 包的当儿,再管此模块作为一个
library ,打成 aar ,作为周宿主 APP 的同等有的。而 debug 和 release
的切换都是透过 gradle
配置,可以好无缝切换。至于模块之间的跳转,可以为此别名的法门,而不是为此
Activity 和 Fragment 类名。这样有着的模块和宿主 APP
都是全然解耦的,彻底解决了相互开发之或者致的接力依赖等问题。

要害原理是:主要用 Java ClassLoader 的法则,如 Android 的
DexClassLoader,可动态加载的始末连 apk、dex、jar 等。如下

DexClassLoader pluginClassLoader = 
    new DexClassLoader(dexPath, optimizedDirectory, libraryPath, parentClassLoader);

当软件升级成效受到,一般分为强制,提示和沉默三种。静默一般就是一味盖红点或字样显示,干扰最小。具体的情,可参照《细节体验|你相差用户只有差一个吓的互》一致温柔举例说明。

插件化的优势:

淘宝之框架是为此了osgi的bundle概念,整个应用框架生命周期完整。

App升级创新是活持续演变调优的必进之路。更新提升之目的就是是在满足用户的基本要求的前提之下,增强原有需求的感受并增强相关的机能,免去或者减弱有利用频次较逊色、相关度低之作用,从而被产品看起大概且易用。一般的话,用户给升级翻新,都见面展示挺懒而休情愿升级,其原因大约分成三类:

插件化弊端:

每一个插件都是一个apk,插件多之时光管理起来呢麻烦。

认为提升是要是消费大量部手机流量的,不情愿浪费;

老三、Android 动态加载机制

咱清楚,apk必须安装才会运行,apk未安装是免可知给直接调起来的,但是咱得以用一个次(称之为宿主程序)去动态加载apk文件并拿其放在自己之过程被实行。

以为中心需求在存活版本现已赢得解决,没必要更新;

季、Android 动态升级、增量更新

Google I/O 上提及的 Smart App
update,即祭增量升级,或者称差分升级的做法,并于初本子的Google
Play中取支持。

早就沉默的用户,已经不见面常常用产品,其履新意愿也不见面愈。

原理

骨子里增量升级之法则非常粗略,即首先以用之原本子Apk与新本子Apk做差分,得到更新的一部分的补丁。
在用户下载了不同分包之后,需要以大哥大端将他们做起来。可以参考的做法是预先拿手机端的老本子软件(多半在/data/下),复制到SD卡或者cache中,将其同事先的异分patch进行结合,得到一个初本子的apk应用。如果开过android手机OTA升级之同窗应该注意到,在update.zip中之patch文件夹着发生得和系统文件同名但是因xxx.p
为后缀的文件,他们虽是变化的不同分patch文件。

为此,为了避免“懒惰”的用户,尽量采用你精心设计的机能,第一步就是是设学会引导他们乐于升级App。对于升级翻新,通常来讲有强制升级、非强制升级两近似。接下来,我们现实说明及时半接近升级方式的不同之处。首先,我们询问有限栽更新方式的逻辑流程如图所示,请细读:

前提

增量升级成之前提是,用户手机端必须产生会被您拷贝出来都与您服务器用于差分的版相同的apk,这样就在,例如,系统放的apk无法取到,无法展开增量升级;对于一些与君差分版本一样,但是内容有了修改的(比如破解版apk),这样为是无能为力进展增量升级的,为了预防合成补丁错误,最好以补丁合成前对原来本子的apk进行sha1sum校验,保证基础包之一致性。

强制升级

弊端:

增量升级是因半只应用版本之间的区别来变化补丁的,你无法确保用户每次的立提升到新型,所以若必须对您所发表的各国一个版都跟行的版本作差分,以便使拥有版本的用户还得差分升级,这样操作相对于本来的整包升级较为麻烦,不过好由此自动化的脚本批量转。

出现气象:适用于老版用废弃,全面启用新本子时,如:重大Bug影响核心职能利用,造成经济损失等

五、Class Loader类加载的法门:DexClassLoader 、 PathClassLoader与URLClassLoader

来得方式:显示弹窗,无法撤

安的Class可以Load?

Java 里面一直拿 .class 文件包到 .jar 文件里就是可以了,但是 Android 的
Dalvik VM 是免认 Java 的 byte code 的,所以未能够直接这么打包,而如果就此 dx
工具转成 Dalvik byte code 才堪。当然,dx 工具转了今后,jar
包里面纵使无是 .class 文件了,而是 .dex 文件。

非强制升级

Class Loader 的选要包括DexClassLoaderPathClassLoaderURLClassLoader

File dexOutputDir = context.getDir("dex", 0);   
DexClassLoader cl = 
    new DexClassLoader(jarFile.toString(), "/sdcard/test", null, ClassLoader.getSystemClassLoader()); 

 PathClassLoader cl =
     new PathClassLoader(jarFile.toString(), "/data/app/", ClassLoader.getSystemClassLoader()); 

//转换命令 :
dx --dex --output=dest.jar src.jar

并发状况:新职能上线,新的移动情,部分插件内容更新

六、热门Android插件化框架

Small、Dynamic-load-apk、ACDD、DroidPlugin(360部手机助手的开源框架)

亮方式:通过小红点提示用户可提升,用户可自行掌控是否更新

(一)、Small官网

官网
Small插件化方案适用于以一个APK拆分为多独公共库插件、业务模块插件的景(如:插件化加载dex、资源拆分、hook)。

用户开启App后,后台拉取更新协议(通常48钟头一不行),判断是非强制性更新的状态下,App更新的输入出一般会停小红点,示意有新本子的得创新。稍微好的体会是,先检查是不是当WIFI环境下,若是WIFI环境则网后台一直静默更新,更新了前端展示更新弹窗引导用户手动更新。产品如果无若激发用户需要,从而影响用户失去做到产品创新提升吗?更新提升的弹窗的设计以及感受有啊窍门呢?这里总结两单标准:

(二)、Dynamic-load-apk

斯类别实现了同片的动态加载,原理是 DexClassLoader 加 Activity
代理,可以省。即以容器中注册几个代理的 Activity,启动插件的 Activity
时实际启动之且是代理的 Activity,这样就算化解了 Activity
必须注册之题目。当然者路里吧发无数问题尚未解决,有趣味可以投入她们。

格一致,言简意赅又如果中用户的需要或痛点地告诉升级之显要内容;

(三)、AndroidDynamicLoader)

当下是点评一个工程师介绍的计,和方面不同之是:他非是用代理 Activity
的艺术实现而是用 Fragment 以及 schema 的不二法门实现

标准化二,保持版本更新的力量及过,降低升级给用户所带来的免信任感。

(四)、360 的 DroidPlugin

对此事情丰富且偏平台化的成品来说,每一样坏版本的翻新可能波及商业模式的轮流,主干流程的调动和分支流程的调优。为了降低App升级所带来的用户体验最好优化。越来越多App的制品经营开始学会用插件化的方式,处理临时更新的模块和内容。

参考

Android
apk动态加载机制的钻

插件化设计,如同玩乐高拼接,同样的资料,如何完成有想象力的范,这就是用产品经营在统筹产品的下巧思并转移。一点发出矣插件化的思,那么产品版本的创新就变得更其自由了。插件化设计-组件,小Q已在《一仿照副To
B产品经营利用的行事章程》一致温柔遭遇产生详尽的解释与案例解析,可查并了解。

插件的意是:满足小众化需求,这好像需求相对来说不是主流需求,把他们身处二级页面内或者可配置的,可以满足好用底用户,也本着莫立即要求的人尚未外影响。其优势是,降低产品试错成本,简化产品核心规则,无需在成品最初便落实非常复杂的出品形象。

可插件化的科普模块:运营活动模块、嵌入式引导文案模块(在线参数可放)、业务模块(主程序外的插件式程序支持,通过插件的款式支持不同工作需,如淘宝App的逐条频道)等。

除开系统下的创新机制外,如果是生产新的于店铺的营业好之比重要作用的初本子时,则好出移动来刺激用户更新,例如升级送积分。

有鉴于此,对于非强制性的升官的引导,我们用根据App自身所处之号来设想,一般生少数类可能:

第一接近:发展期的App。这个时的App通常已积累比大量的用户群,且用户对App的功能于熟悉,那么尽管直采用提示更新的弹窗即可;

第二接近:成遥远的App,新版功能的目的是为着累积用户,拓宽用户渠道,那么就是待上加新力量引导,首页上提示(采用蒙层操作提醒等等),增加用户粘性。

最终,强调一点尽管是用户是绝无喜被打扰的,所以对于非强制性升级之提示,可以不择手段的使用能“跳了”的弹窗方式。可“跳了”的弹窗通常包括个别接近:一类似是特出新本子第一涂鸦跻身时弹出并提示用户,另外一好像是弹窗上加以一个”忽视这个版本“的抉择项,点击后这版本就不再提拔了。

小Q来总结

履新提升是一款App长期迭代的重大办法。因为于App设计之处在,不容许拿所有用户的求以及功效都落实,因此即使必定会并发不止调优,更改之也许。产品的筹划及利用如开车一样,随时都亟待产品“握紧”方向盘,调整行驶方向,根据产品一定人群,产品即周期,使用数据以及创新的始末展开解析下哪种提醒或引导方式,保证非打搅用户用习惯的前提之下,合理利用插件化的统筹,让你希望用户看到底职能,被用户以。

文章最后:再次表明所有转载文章就供上,感谢Mandy权先生的享用,苟爱我们的稿子点关注**吧!比心呦!**

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图