IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android插件化开发指南——插件化技术简介 -> 正文阅读

[移动开发]Android插件化开发指南——插件化技术简介

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

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

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

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

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

2. 插件化技术的历史

插件化框架名称作者Github地址支持类别需要在清单文件注册
AndroidDynamicLoader2012年大众点评的屠毅敏(最早的动态加载实现方案)【代理Fragmenthttps://github.com/mmin18/AndroidDynamicLoader只支持Activity
Altas2013年淘宝的伯奎 【hook底层】https://alibaba.github.io/atlas/支持四大组件
dynamic-load-apk2014年百度的任玉刚 【代理Activityhttps://github.com/singwhatiwanna/dynamic-load-apk只支持Activity
DroidPlugin2015年奇虎360的张勇【hookhttps://github.com/Qihoo360/DroidPlugin支持四大组件
DynamicAPK2015年携程【基于OpenAltashttps://github.com/CtripMobile/DynamicAPK只支持Activity
Small2015年二手车交易平台林光亮【hookhttps://github.com/wequick/Small支持四大组件
RePlugin2017年奇虎360手机卫士【hookhttps://github.com/Qihoo360/RePlugin支持四大组件
VisualApk2017年滴滴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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:27:21  更:2021-11-22 12:28:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:39:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码