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

TGTAlica 8年前
   <p style="text-align:center"><img alt="APP项目如何与插件化无缝结合(一)" src="https://simg.open-open.com/show/bf4313cbd72544531b076b1a01bb309b.png"></p>    <p style="text-align:center">插件化之旅</p>    <p>一直热衷于插件化,热更新相关,利用每天下班后的空余时间去研究,踩过很多坑,曾经为了一个坑,不解决难以入睡。都是血泪史,请珍爱每一个搬砖码字的程序猿。好吧,废话不多说,进入正题。由于内容太多,很多人看到字太多,就没有特别大的耐心,我将分为几篇来介绍。希望能够帮助大家理解,并且对于自身项目接入插件化有所帮助!</p>    <h2><strong>一、什么是插件化</strong></h2>    <p>   谈到插件化,很多人会想到热修复,热更新,组件化这些名词。最近有网友在<a href="/misc/goto?guid=4959675767585796047">热补丁介绍及Andfix的使用</a> 看了这篇文章给我发私信问,想把Andfix集成在自身项目里面。因为阿里出品,而且比较火。其实我当时也有过这个考虑,后面真正深入后,发现其实还有很多坑,而且github上面也很久没有代码更新了。综合各种原因,后面放弃了。(这里并不是诋毁Andfix,因为我自己也投入很多精力去研究,我敬佩每一个开源贡献者!但是至少它确实还存在很多问题,现在还不适合)。其实准确的说,热修复应该算是插件化过程中的一种附属产物。另外,我们自己的项目中也开始组件化,组件化和插件化其实大体思路是差不多,但是还是有本质上的区别。组件化开发就是将一个项目app拆分成多个模块,每个模块都是一个组件,组件化开发过程中相互依赖或单独调试,最终发布的时候是将这些组件合并统一成一个apk。插件化开发也是将一个项目app拆分成多个模块,这些模块包括宿主和插件。每个模块相当于一个apk,而组件化相当于一个lib。最终发布的时候将宿主apk和插件apk单独打包或者联合打包。</p>    <h2><strong>二、插件化的作用</strong></h2>    <h3>1.并发开发</h3>    <p>当公司发展越来越大,项目越来越多,如何提高开发效率。这时插件化就将启动巨大的作用,就想前面说的,可以把开发人员分成很多组,每个组负责一个插件,彼此之间没有过多的依赖,可以单独调试打包。有时发版其实就相当于发插件。</p>    <h3>2.动态更新插件或远端调试</h3>    <p>app如果出现问题,不会像后台或者web那样,去改下线上的代码就可以了。因为app发版是在多个应用市场里面,你很难有权利或者很麻烦去应用市场把有bug的包替换。这时就需要插件。app每次启动回去校验是否有插件更新,有的话,就去服务器上下载最新的插件替换掉已有的。另外还有在实际工作会出现的场景,就是其他用户没有问题,某个用户,某个版本出现有问题,这时用户的情况开发人员大概知道什么问题,修复好之后,却找不到场景重现。这时可以通过给特定用户推送插件更新,已确保确实已经修复成功。</p>    <h3>3.按需下载模块</h3>    <p>app的设计,为了增加用户量,可能会偏向于“全功能”,但是有些用户又不需要太多功能,这时就可以按需下载。用户需要使用到的时候,才去下载相应模块。</p>    <h3>4.方法数或变量数爆棚</h3>    <p>Android应用方法数不能超过65k一直是硬伤,尤其是项目越来越大的情况。关于为什么方法数不能超过65k,自行谷歌。我就不过多介绍。插件化可以完美解决。想想如果有10个插件,每个插件60k的方法数,话说,你项目真的用得了这么多吗?</p>    <h3>5.数据统计</h3>    <p>主要是A/B test,比如产品经理同一套逻辑,可能有两种不同的交互体验,那究竟哪种用户体验更好呢?插件化可以给不同的用户更新不同的插件,然后去观察他们的相关数据。</p>    <h2><strong>三、Small</strong></h2>    <p>前面提到放弃了Andfix,那么插件化应该是以后的主流趋势,我该如何抉择?我查了很多资料,也单独去把插件化开源项目,一个个下载编译研究,里面的血泪就省略很多字。然后发现了Small,顿时仿佛看到了曙光!!先上一张图看看。</p>    <p style="text-align: center;"><img alt="APP项目如何与插件化无缝结合(一)" src="https://simg.open-open.com/show/f66eec638140e812d4a67f2264fe7903.png"></p>    <p style="text-align: center;">开源插件化项目对比</p>    <p>可以看到项目开发常用需要更新的地方,Small都支持,关于Service动态注册不支持,small作者的解释,我个人理解是因为sevice相关直接放在宿主apk里面就行了,service的更新不是特别频繁,没有必要花费精力去做不是特别有用的事情。也可以顺便减少代码量。关于AppCompat,是AndroidStudio默认添加的主题包,Google主推的Metrial Design包也依赖于此。未来的趋势。</p>    <p>其实前面同事提出是否考虑携程的DyAPK即DynamicAPK,因为携程的,毕竟大公司。我后面也确实去看了下。后面发现release版本没有,2个贡献者,从去年11低到现在大半年都没有更新维护过,而且我自己表示花了很长时间没有编过,或许是我自身的问题。反观Small,加了一个群,作者积极的帮助开发者去了解small,release版本也有,代码更新维护也快,另外small慢慢也得到更多人的青睐。代码的设计也很科学。我不是帮small作者打广告,他可能也不需要我打广告。我只是个人感受,实话实说。另外,对于携程的开源插件化,并不是一点用没有,里面有很多设计还是值得学习的,还有也算是对插件化的一种促进作用。</p>    <p>接下来来谈谈Small的原理,想要使用它,控制它,必须了解它的原理。<a href="http://www.open-open.com/lib/view/open1469700370696.html">APP项目如何与插件化无缝结合(二)</a></p>    <p> </p>    <h2>系列文章</h2>    <p>APP项目如何与插件化无缝结合(一)<br> <a href="http://www.open-open.com/lib/view/open1469700370696.html">APP项目如何与插件化无缝结合(二)</a><br> <a href="http://www.open-open.com/lib/view/open1469700440926.html">APP项目如何与插件化无缝结合(三)</a><br>  </p>    <p> </p>    <p>参考资料:</p>    <p>1.https://github.com/wequick/Small</p>    <p>2.http://www.tuicool.com/articles/NB32EjY</p>    <p>3.http://www.tuicool.com/articles/RR3QrmV</p>    <p><br> 来自:http://www.jianshu.com/p/230311b9a16b<br>  </p>    <p> </p>