close
当前位置: 物联网在线 > 技术文库 > android >

APP项目如何与插件化无缝结合(一)

APP项目如何与插件化无缝结合(一)

插件化之旅

一直热衷于插件化,热更新相关,利用每天下班后的空余时间去研究,踩过很多坑,曾经为了一个坑,不解决难以入睡。都是血泪史,请珍爱每一个搬砖码字的程序猿。好吧,废话不多说,进入正题。由于内容太多,很多人看到字太多,就没有特别大的耐心,我将分为几篇来介绍。希望能够帮助大家理解,并且对于自身项目接入插件化有所帮助!

一、什么是插件化

谈到插件化,很多人会想到热修复,热更新,组件化这些名词。最近有网友在热补丁介绍及Andfix的使用 看了这篇文章给我发私信问,想把Andfix集成在自身项目里面。因为阿里出品,而且比较火。其实我当时也有过这个考虑,后面真正深入后,发现其实还有很多坑,而且github上面也很久没有代码更新了。综合各种原因,后面放弃了。(这里并不是诋毁Andfix,因为我自己也投入很多精力去研究,我敬佩每一个开源贡献者!但是至少它确实还存在很多问题,现在还不适合)。其实准确的说,热修复应该算是插件化过程中的一种附属产物。另外,我们自己的项目中也开始组件化,组件化和插件化其实大体思路是差不多,但是还是有本质上的区别。组件化开发就是将一个项目app拆分成多个模块,每个模块都是一个组件,组件化开发过程中相互依赖或单独调试,最终发布的时候是将这些组件合并统一成一个apk。插件化开发也是将一个项目app拆分成多个模块,这些模块包括宿主和插件。每个模块相当于一个apk,而组件化相当于一个lib。最终发布的时候将宿主apk和插件apk单独打包或者联合打包。

二、插件化的作用 1.并发开发

当公司发展越来越大,项目越来越多,如何提高开发效率。这时插件化就将启动巨大的作用,就想前面说的,可以把开发人员分成很多组,每个组负责一个插件,彼此之间没有过多的依赖,可以单独调试打包。有时发版其实就相当于发插件。

2.动态更新插件或远端调试

app如果出现问题,不会像后台或者web那样,去改下线上的代码就可以了。因为app发版是在多个应用市场里面,你很难有权利或者很麻烦去应用市场把有bug的包替换。这时就需要插件。app每次启动回去校验是否有插件更新,有的话,就去服务器上下载最新的插件替换掉已有的。另外还有在实际工作会出现的场景,就是其他用户没有问题,某个用户,某个版本出现有问题,这时用户的情况开发人员大概知道什么问题,修复好之后,却找不到场景重现。这时可以通过给特定用户推送插件更新,已确保确实已经修复成功。

3.按需下载模块

app的设计,为了增加用户量,可能会偏向于“全功能”,但是有些用户又不需要太多功能,这时就可以按需下载。用户需要使用到的时候,才去下载相应模块。

4.方法数或变量数爆棚

Android应用方法数不能超过65k一直是硬伤,尤其是项目越来越大的情况。关于为什么方法数不能超过65k,自行谷歌。我就不过多介绍。插件化可以完美解决。想想如果有10个插件,每个插件60k的方法数,话说,你项目真的用得了这么多吗?

5.数据统计

主要是A/B test,比如产品经理同一套逻辑,可能有两种不同的交互体验,那究竟哪种用户体验更好呢?插件化可以给不同的用户更新不同的插件,然后去观察他们的相关数据。

三、Small

前面提到放弃了Andfix,那么插件化应该是以后的主流趋势,我该如何抉择?我查了很多资料,也单独去把插件化开源项目,一个个下载编译研究,里面的血泪就省略很多字。然后发现了Small,顿时仿佛看到了曙光!!先上一张图看看。

APP项目如何与插件化无缝结合(一)

开源插件化项目对比

可以看到项目开发常用需要更新的地方,Small都支持,关于Service动态注册不支持,small作者的解释,我个人理解是因为sevice相关直接放在宿主apk里面就行了,service的更新不是特别频繁,没有必要花费精力去做不是特别有用的事情。也可以顺便减少代码量。关于AppCompat,是AndroidStudio默认添加的主题包,Google主推的Metrial Design包也依赖于此。未来的趋势。

其实前面同事提出是否考虑携程的DyAPK即DynamicAPK,因为携程的,毕竟大公司。我后面也确实去看了下。后面发现release版本没有,2个贡献者,从去年11低到现在大半年都没有更新维护过,而且我自己表示花了很长时间没有编过,或许是我自身的问题。反观Small,加了一个群,作者积极的帮助开发者去了解small,release版本也有,代码更新维护也快,另外small慢慢也得到更多人的青睐。代码的设计也很科学。我不是帮small作者打广告,他可能也不需要我打广告。我只是个人感受,实话实说。另外,对于携程的开源插件化,并不是一点用没有,里面有很多设计还是值得学习的,还有也算是对插件化的一种促进作用。

接下来来谈谈Small的原理,想要使用它,控制它,必须了解它的原理。APP项目如何与插件化无缝结合(二)

系列文章

APP项目如何与插件化无缝结合(一)
APP项目如何与插件化无缝结合(二)
APP项目如何与插件化无缝结合(三)
 

参考资料:

1.https://github.com/wequick/Small


(责任编辑:ioter)

用户喜欢...

滴滴插件化方案 VirtualApk 源码解析

之前一直没有写过插件化相关的博客,刚好最近滴滴和360分别开源了自家的插件化方案,赶紧学习下,写两篇博客,第一篇是滴滴的方案: https://github.com/didi/VirtualAPK 那么其中的难点很明显是...


Android开发周报:微信模块化重构实践、滴滴插件化项目开源

7月份安卓各版本份额:牛轧糖终于突破两位数:谷歌近日给出了安卓系统各版本最新的份额数据,去年推出牛轧糖版本(7.0,7.1)终于达到了两位数的市场份额,占11.5%。2015年推出的棉花糖...


如何解决 Android Studio 上远程依赖包重复的问题(com.android.dex.DexException)

你们是不是会经常遇到这样的一个错误:com.android.dex.DexException: Multiple dex files define XXXX,一般情况下,是我们项目中引用了重复的库或者jar包引起的,我们找到去掉即可解决,但是如果你远程...


Android Project 检查依赖库和插件版本

随着项目的开发,引用的库也不断增加,维护引用的版本也是一个耗时的问题.比如一个项目的依赖库如下: compile libraries.supportAppCompatcompile libraries.rxJavacompile libraries.rxAndroidcompile libraries.retrofit...


Android项目流程、设计原则、编码规范、技术特点和过时技术

Android开发者故事 该流程不仅适用于Android项目开发,也部分适用于其他互联网和IT产品。 史上最全APP前期、开发、后期工具 : 一、产品前期 1.市场调研: 可委托第三方调研机构 调研宝 问卷...


说一说Android Studio和IDEA中一个很有用的内存调试插件

JetBrains JVM Debugger Memory View plugin 在我最近的研发活动期间寻找新的工具,以提高我的开发经验,使Android Studio的生活更轻松,我发现一个有用的插件,我从来没有听说过。 这就是为什么,我决...


详解如何使用代码进行音频合成,以Java为示例语言,以Android为示例平台

音频合成在现实生活中应用广泛,在网上可以搜索到不少相关的讲解和代码实现,但个人感觉在网上搜索到的音频合成相关文章的讲解都并非十分透彻,故而写下本篇博文,计划通过讲解如何...


Android滑动效果是如何产生的

相对于Android2.X版本中常见的长按、点击操作,滑动的操作方式具有更好的用户体验性。因此,从Android4.X版本开始,滑动操作就大量出现在了Android系统中,各种第三方应用也竞相模仿这种效果...


Android 如何编写基于编译时注解的项目

在Android应用开发中,我们常常为了提升开发效率会选择使用一些基于注解的框架,但是由于反射造成一定运行效率的损耗,所以我们会更青睐于编译时注解的框架,例如: butterknife 免去我们...


如何提高 Android 代码质量 -工具篇

这是一篇翻译文章,原文: How to improve quality and syntax of your Android code ,为了理解连贯,翻译过程中我修改了一些陈述逻辑和顺序,同时也加了一些自己的补充。 在这片文章中,我将从工具使...