文章目录

  • 1. 为什么需要插件化技术
  • 2. 插件化技术的历史
  • 3. 插件化实现思路
    • 3.1 InfoQ:您在 GMTC 中的议题叫做《Android 插件化:从入门到放弃》,请问这个标题代表什么意思?
    • 3.2 InfoQ:请问您是如何学习的?对于初学者有什么建议?
  • 4. 其他

1. 为什么需要插件化技术

插件化技术最初源于将app中一些不常用的功能模块做成插件,主要有两个方面的好处:

  • 减小了安装包的大小;
  • 实现app功能的动态扩展;

但实际上现在插件化80%的使用场景都是为了修复线上BUG。当将一个项目的各个功能抽离为单独的可运行的模块的时候,也就是插件化的时候。如果项目的某个模块出现了问题,那么需要在短时间内修复这个问题,而重新打包发布Android版到各大应用市场却已经来不及了。而插件化就可以做到只需要重新打包这个模块的代码,生成增量包,放到服务器上供用户下载即可更新。

当然,针对上述场景可选的技术方案不止插件化开发,Android热修复技术也可以解决这个问题。但是插件化技术能做到的确不止是修复BUG。比如吃鸡中的地图更新、皮肤更新等,这些都不需要重新打包一个新的发布版本。因为此时各个业务模块不再是事先分离的组件(即:aar)包,而是一个打包好的APK文件,放在宿主APPassets的目录下,用户只需要下载就可以实现更新操作,而这个方面的内容才是插件化技术的价值所在。

2. 插件化技术的历史

插件化框架名称 作者 Github地址 支持类别 需要在清单文件注册
AndroidDynamicLoader 2012年大众点评的屠毅敏(最早的动态加载实现方案)【代理Fragment https://github.com/mmin18/AndroidDynamicLoader 只支持Activity
Altas 2013年淘宝的伯奎 【hook底层】 https://alibaba.github.io/atlas/ 支持四大组件
dynamic-load-apk 2014年百度的任玉刚 【代理Activity https://github.com/singwhatiwanna/dynamic-load-apk 只支持Activity
DroidPlugin 2015年奇虎360的张勇【hook https://github.com/Qihoo360/DroidPlugin 支持四大组件
DynamicAPK 2015年携程【基于OpenAltas https://github.com/CtripMobile/DynamicAPK 只支持Activity
Small 2015年二手车交易平台林光亮【hook https://github.com/wequick/Small 支持四大组件
RePlugin 2017年奇虎360手机卫士【hook https://github.com/Qihoo360/RePlugin 支持四大组件
VisualApk 2017年滴滴 https://github.com/didi/VirtualAPK 支持四大组件

值得注意的是,插件化开发技术一直是我们中国的开发者在积极探索。这是因为在国外一般都使用Google Play,在这个官方市场不允许插件化APP的存在。且因为国内的场景不同,在国内任何数据的显示错误或者奔溃都直接导致更过利润的丢失,所以在国内这个相对宽松的环境下,插件化技术运营而生。

3. 插件化实现思路

利用hook技术实现欺上瞒下。Android系统是多进程的,所以系统服务实际上不知道App进程中具体运行的代码,所以使得欺上瞒下成为了可能。欺上是指让系统不知道我们的插件在宿主App中运行;瞒下是指让插件以为自己已经被安装。当然也有使用Java动态代理来实现的欺上瞒下,比如DroidPlugin

无意间看到《Android插件化开发指南》这本书作者包老师的专访记录:专访包建强:为什么我说 Android 插件化从入门到放弃?。这里简单做一个摘要:

3.1 InfoQ:您在 GMTC 中的议题叫做《Android 插件化:从入门到放弃》,请问这个标题代表什么意思?

包建强:哈哈哈。我是觉得,如果这个演讲主题是《Android 插件化:从入门到精通》的话,就体现不出真是想明白了这个领域。所以最近冒出来各种从入门到放弃、改行、住院、出家的技术书籍,我觉得那反而是说明作者是真的大彻大悟了,武侠小说里面有写,虽“飞花摘叶皆可伤人,草木竹石均可为剑”,就是这种境界。
不过要声明的是,我对 Android 插件化的认识,远不如冯森林、张勇、罗迪这些人。
我有一个 Android 插件化研究的群,三十多人,都是国内各个插件化开源项目的作者、公司插件化的实施者,以及传经授道的博客作者。我们都感受到 Android 插件化技术基本已经成型了,随着 React Native 的横空出世,Android 插件化会慢慢退出历史舞台,也就是这一两年的事情吧,所以要给后人留下点什么,于是便有了这次技术分享
我的分享讲包括插件化技术的历史和各种八卦,各个技术流派,一些小例子,各个开源项目的思想,插件化实施过程中遇到的问题,以及未来的发展方向。45 分钟,我尽量讲的生动有趣一些。

3.2 InfoQ:请问您是如何学习的?对于初学者有什么建议?

  • 首先就是去写代码。有一个做 Android 的哥们升级为架构师,需要了解 iOS 这门技术,来问我怎么能迅速精通 iOS,我就告诉他,别玩虚的,脚踏实地跟着 iOS 开发团队做几个需求,半年之后再来谈这个话题。AndroidiOS 的很多现金思想可以相互借鉴,我建议做一门技术的同学,也适当学习另一门技术。
  • 咬着牙看开源项目。比如说 JSPatch,怎么看?我有个建议,你看 JSPatch 的版本提交历史,从第一次提交看起,这时候的功能应该是最简单的,也是最容易看懂的,然后看历史每次提交都修改了哪些东西,你能搞清楚作者的思路是什么
  • Android 插件化虽然有被 React Native 取代的势头,但还是要搞清楚插件化所涉及的各种思想和技术。我这一年来的心得是,这是提高自身内功的极好办法。尤其是涉及到 Android 系统底层的各种 Hook
  • 写技术博客吧。每天看文章只能是看过,一个月后能沉淀下来的没有多少,好记性不如烂笔头。一开始你可以转载或罗列精品文章的链接,慢慢的开始分享自己的心得,翻译些技术文章,技术水平提高是一个循序渐进的过程。

4. 其他

除了插件化和热修复可以用来修复bug以外,React Native也可以用来修复bug和动态发布新功能,和Android插件化开发有异曲同工之妙。值得注意的是React Native虽然是H5编写,但是和Hybrid技术不同。由于H5很慢所以React NativeHTML5翻译为了原生代码。

既然React Native也可以达到效果,且效率上可以得到满足。那么未来React Native会成为App开发的主流?


References

  • 专访包建强:为什么我说 Android 插件化从入门到放弃?

Android插件化开发指南——插件化技术简介相关推荐

  1. Android插件化开发指南——Hook技术(一)【长文】

    文章目录 1. 前言 2. 将外部dex加载到宿主app的dexElements中 3. 插件中四大组件的调用思路 4. Hook 2.1 对startActivity进行Hook 2.1.1 AMS ...

  2. Android插件化开发指南——Hook技术(二)

    文章目录 1. 前言 2. 分析 3. 加载外部资源文件代码 4. References 1. 前言 在上篇Android插件化开发指南--Hook技术(一)[长文]中提到最终的效果其实在插件中的Ma ...

  3. Android插件化开发指南——实践之仿酷狗音乐首页

    文章目录 1. 前言 2. 布局分析 3. 底部导航栏的实现 4. 顶部导航栏和ViewPager+Fragment的关联 1. 前言 在Android插件化开发指南--2.15 实现一个音乐播放器A ...

  4. Android插件化开发指南——实践之Activity转场效果(仿酷狗音乐启动页)

    文章目录 1. 前言 2. Activity退出动画 2.1 简单使用 2.2 overridePendingTransition 3. 后记 1. 前言 在Android插件化开发指南--2.15 ...

  5. 积木Sketch插件进阶开发指南

    前段时间,美团外卖技术团队积木Sketch插件"意外走红".为了帮助更多的设计师小哥哥.小姐姐落地设计规范,提升产研效率,积木Sketch团队开始着手打造一个平台化的产品.本文介绍 ...

  6. 从零开始实现ASP.NET Core MVC的插件式开发(五) - 插件的删除和升级

    标题:从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 作者:Lamond Lu 地址:https://www.cnb ...

  7. 从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装

    标题:从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11343141. ...

  8. Android Google Map 开发指南(一)解决官方demo显示空白只展示google logo问题

    这两天一直在做google map接入前的准备工作 特此在这里将自己在加载官方demo时出现的问题以及详细的接入步骤进行记录,已免后者踩坑 注:项目实际运行时不要使用虚拟机 因为电脑ip和虚拟机ip不 ...

  9. Android C/C++开发指南

    Android C/C++开发指南 1.Android C/C++简介 众所周知,Android作为目前主流的移动终端领域的开发平台,其主要的开发语言就是JAVA.Android借助于JAVA高效.灵 ...

最新文章

  1. travis ci_如何使用Travis CI和GitHub进行Web开发工作流程
  2. WEB页面多语言支持解决方案(转自CSDN)
  3. 思考题-算法小思考题
  4. 网上商城—管理员删除商品
  5. chromebook刷机_如何从Chromebook上的APK侧面加载Android应用
  6. 老刘在微软Ignite China大会上聊低代码
  7. guava和commons_使用Guava CharMatcher和Apache Commons Lang StringUtils确定字符串中字符或整数的存在...
  8. 在Windows上,迁移VisualSVN server
  9. HTML注释的表示方法,如何表示HTML注释
  10. 自己做的一个水印生成类
  11. android 平方常规字体,android - Android将Roboto字体设置为粗体,斜体,常规,…(类似于自定义字体系列) - 堆栈内存溢出...
  12. 电脑计算机无法找到脚本文件夹,电脑弹出无法找到脚本文件怎么办
  13. 故障处理 | 网站500,无法打开站点(突然无法打开,代码和服务器没做调整)
  14. Vulhub-DC-8靶场实战攻略
  15. vmware虚拟机序列号
  16. ECharts数据可视化项目
  17. js实现局部刷新数据
  18. python array类型取特定值
  19. 普元ESO 逻辑流返回值选择java--浏览卡住
  20. CF游戏技巧→永久炫彩昵称

热门文章

  1. 等差、等比数列求和公式
  2. 雷军微博晒晨练照片,暗示其已用上小米新机
  3. 云服务器配置怎么选?云服务器配置考虑哪些因素?
  4. 针对华为这件事,我思考了四点
  5. 16-GuliMall ElasticSearch安装分词器
  6. SubversionEdge安装及ldap接入
  7. 阿里版 ChatGPT 突然上线!
  8. Cognex VisionPro 安装详解
  9. iOS微信分享,提示“未验证应用”的解决办法
  10. android 开源fc模拟器_战舰开发板触摸屏运行NES模拟器