Android插件化主流框架和实现原理

写在前面;

这几年移动开发业界兴起的「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接。随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内满足需求和项目的增长,同时又能快速响应问题和迭代新需求,这就是一个矛盾点。此时,插件化技术正好风生水起,去了解各个主流框架实现思路,看看能对目前工作是否有帮助,是很有必要的。

主要分为以下几个部分

  • 插件化介绍
  • 入门知识
  • 实现原理
  • 主流框架
  • 实战
  • 小结
  • 进阶资料

插件化介绍

百度百科里是这么定义插件的:「 是一种遵循一定规范的应用程序接口编写出来的程序,只能运行在程序规定的系统平台下,而不能脱离指定的平台单独运行。」,也就是说,插件可以提供一种动态扩展能力,使得应用程序在运行时加载原本不属于该应用的功能,并且做到动态更新和替换。

那么在 Android 中,何为「 插件化 」,顾名思义,就是把一些核心复杂依赖度高的业务模块封装成独立的插件,然后根据不同业务需求进行不同组合,动态进行替换,可对插件进行管理、更新,后期对插件也可进行版本管理等操作。在插件化中有两个概念需要讲解下:

  • 宿主

    所谓宿主,就是需要能提供运行环境,给资源调用提供上下文环境,一般也就是我们主 APK ,要运行的应用,它作为应用的主工程所在,实现了一套插件的加载和管理的框架,插件都是依托于宿主的APK而存在的。

  • 插件

    插件可以想象成每个独立的功能模块封装为一个小的 APK ,可以通过在线配置和更新实现插件 APK 在宿主 APK 中的上线和下线,以及动态更新等功能。

那么为何要使用插件化技术,它有何优势,能给我们带来什么样好处,这里简单列举了以下几点:

  • 让用户不用重新安装 APK 就能升级应用功能,减少发版本频率,增加用户体验。
  • 提供一种快速修复线上 BUG 和更新的能力。
  • 按需加载不同的模块,实现灵活的功能配置,减少服务器对旧版本接口兼容压力。
  • 模块化、解耦合、并行开发、 65535 问题。

入门知识

首先我们要知道插件化技术是属于比较复杂一个领域,复杂点在于它涉及知识点广泛,不仅仅是上层做应用架构能力,还要求我们对 Android 系统底层知识需要有一定的认知,这里简单罗列了其中会涉及的知识点:

首先,要介绍的是 Binder ,我们都知道 Android 多进程通信核心就是 Binder ,如果没有它真的寸步难行。 Binder 涉及两层技术,你可以认为它是一个中介者模式,在客户端和服务器端之间, Binder 就起到中介的作用。如果要实现四大组件的插件化,就需要在 Binder 上做修改, Binder 服务端的内容没办法修改,只能改客户端的代码,而且四大组件的每个组件的客户端都不一样,这个就需要深入研究了。学习Binder的最好方式是 AIDL ,这方面在网上有很多资料,最简单的方式就是自己写个 aidl 文件自动生成一个 Java 类,然后去查看这个Java类的每个方法和变量,然后再去看四大组件,其实都是跟 AIDL 差不多的实现方式。

其次,是 App 打包的流程。代码写完了,执行一次打包操作,中途经历了资源打包、 Dex 生成、签名等过程。其中最重要的就是资源的打包,即 AAPT 这一步,如果宿主和插件的资源id冲突,一种解决办法就是在这里做修改。

第三, App 在手机上的安装流程也很重要。熟悉安装流程不仅对插件化有帮助,在遇到安装 Bug 的时候也非常重要。手机安装 App 的时候,经常会有下载异常,提示资源包不能解析,这时需要知道安装 App 的这段代码在什么地方,这只是第一步。第二步需要知道, App 下载到本地后,具体要做哪些事情。手机有些目录不能访问, App 下载到本地之后,放到哪个目录下,然后会生成哪些文件。插件化有个增量更新的概念,如何下载一个增量包,从本地具体哪个位置取出一个包,这个包的具体命名规则是什么,等等。这些细节都必须要清楚明白。

第四,是 App 的启动流程。 Activity 启动有几种方式?一种是写一个 startActivity ,第二种是点击手机 App ,通过手机系统里的 Launcher 机制,启动 App 里默认的 Activity 。通常, App 开发人员喜闻乐见的方式是第二种。那么第一种方式的启动原理是什么呢?另外,启动的时候,Main 函数在哪里?这个 Main 函数的位置很重要,我们可以对它所在的类做修改,从而实现插件化。

第五点更重要,做 Android 插件化需要控制两个地方。首先是插件 Dex 的加载,如何把插件 Dex 中的类加载到内存?另外是资源加载的问题。插件可能是 Apk 也可能是 so 格式,不管哪一种,都不会生成 R.id ,从而没办法使用。这个问题有好几种解决方案。一种是是重写 Context 的 getAsset 、 getResource 之类的方法,偷换概念,让插件读取插件里的资源,但缺点就是宿主和插件的资源 id 会冲突,需要重写 AAPT 。另一种是重写 AMS中保存的插件列表,从而让宿主和插件分别去加载各自的资源而不会冲突。第三种方法,

安卓之热修复&插件
slave_of_life的博客
05-20 647
安卓之热修复&插件
不可多得的干货!Android插件主流框架实现原理
m0_57700605的博客
06-12 622
###写在前面; 这几年移动开发业界兴起的「 插件技术 」的旋风,各个大厂都推出了自己的插件框架,各种开源框架都评价自身功能优越性,令人目不暇接。随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内满足需求和项目的增长,同时又能快速响应问题和迭代新需求,这就是一个矛盾点。此时,插件技术正好风生水起,去了解各个主流框架实现思路,看看能对目前工作是否有帮助,是很有必要的。 主要分为以下几个部分 插件介绍 入门知识 实现原理 主流框架 实战 小结 进阶资料 插件介绍 百度百科里是这么定
Android插件主流框架实现原理,那些被大厂优的程序员们
2401_83620959的博客
03-21 672
百度百科里是这么定义插件的:「 是一种遵循一定规范的应用程序接口编写出来的程序,只能运行在程序规定的系统平台下,而不能脱离指定的平台单独运行。」,也就是说,插件可以提供一种动态扩展能力,使得应用程序在运行时加载原本不属于该应用的功能,并且做到动态更新和替换。那么在 Android 中,何为「 插件 」,顾名思义,就是把一些核心复杂依赖度高的业务模块封装成独立的插件,然后根据不同业务需求进行不同组合,动态进行替换,可对插件进行管理、更新,后期对插件也可进行版本管理等操作。宿主。
2024年安卓最全Android开发的艺术:插件框架Virtual APK实现原理解析,2024年最新移动端面试题
最新发布
2401_84519718的博客
05-15 238
Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。上面分享的字节跳动公司2020年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。// 创建插件的资源管理器// 创建 一个dexClassLoader// 保存插件apk的Activity信息// 保存插件apk的Service信息。
安卓学习之插件 - 自制简单插件框架(一)
qq_14826519的博客
07-08 1524
学习记录,写的不一定准确。在之前的插件开发中,大多数情况下都是使用别人创建好的轮子,比如奇虎的插件框架Replugin,使用轮子无疑给开发带来速度的提升。但是现在很多插件框架早就停止了维护,接入起来也是麻烦的很,甚至无法接入。今天就自学一下自制插件框架。首先我们知道,给主APP开发插件需要有一个插件的接入标准,所有插件APK皆按照这个接入标准进行开发,所以第一步就是写一个接入标准Library,不过在写之前还是捋一下大纲。
Android 插件插件框架整理
让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 )
10-10 4495
一、Altas ( 阿里巴巴 )、 二、DynamicAPK ( 携程 )、 三、VirtualApp ( 罗迪 )、 四、DroidPlugin ( 360 )、 五、dynamic-load-apk ( 任玉刚 )、 六、Shadow ( 腾讯 )、 七、Phantom ( 满帮 )、 八、RePlugin ( 360 )、 九、Small、 十、VirtualAPK ( 滴滴 )、
Android大型组件:揭秘Android插件主流框架实现原理,助你突破瓶颈HarmonyOS
IsdCoding的博客
09-17 293
插件框架的基本原理是通过动态加载插件的代码和资源,并使用独立的ClassLoader加载插件的类和资源。三、HarmonyOS的插件抱歉,但是由于我是基于2021年9月的知识进行训练的,对于HarmonyOS插件相关的内容了解有限。插件框架是指将应用的功能模块以插件的形式进行开发和管理,实现模块的动态加载和卸载。插件的加载是插件框架的核心步骤。在加载插件之前,需要将插件的APK文件通过IO流写入到设备的存储中,并获取到插件的文件路径。插件的启动是指在宿主应用中调用插件的入口方法,以启动插件的功能。
Android插件(一、插件基本原理)
qq_36390114的博客
11-15 6114
插件简介 插件概念 插件开发就是将整个app拆分成很多模块,每个模块都是一个apk,最终打包的时候将宿主apk和插件apk分开打包,插件apk通过动态下发到宿主apk。 插件优点 宿主和插件分开编译 可并发开发,都是apk,开发互不影响(宿主需要给插件下发一个context) 动态更新插件 按需下载模块 可解决方法数超过65536的问题 插件难点 插件需要解决的问题 插件中代码的加载与主工程的相互调用 插件中资源的加载与主工程的相互访问 四大组件生命周期的管理 解决方法 插件中代码的加载
Android插件原理和开发实战
09-07
Android插件原理和开发实战
亲自动手实现Android App插件
08-31
Android开发中,插件是一项重要的技术,它允许开发者将应用程序拆分为多个模块,每个模块(即插件)可以在运行时动态加载和卸载,从而实现更灵活的应用架构。本教程将指导你如何亲自动手实现Android App的插件...
android插件开发框架
08-22
和微信一样,把插件分离出来。让你的项目更加灵活
Android插件框架研究.zip
09-23
Android插件框架研究.zip,AndroidPluginFramework公司
Android插件之资源动态加载
01-05
Android插件之资源动态加载 一.概述 Android插件的一个重要问题就是插件资源访问问题,先列出会面对的问题 1.如何加载插件资源 2.如何处理插件资源与宿主资源的处突:插件资源问题要做到的效果是,如果我们...
Android插件原理(一)—— 插件类加载、类加载原理、(双亲委托机制)
blankmargin的博客
02-11 1868
Acitivity启动原理(一),pauseActivity原理
Android主流插件
zhongshuiping的博客
09-05 2674
Android主流插件详解及优缺点对比
android插件框架,超详细讲解
m0_61331407的博客
03-06 1045
最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了…所以啊,不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流~
Android插件原理与方案详解
陆业聪
03-08 1595
Android插件是一种开发模式,它允许我们动态地加载和卸载APK,从而实现模块开发,热更新等功能。本文将详细介绍Android插件的原理,以及几种主流Android插件方案。
Android手写占位式插件框架之Activity通信、Service通信和BroadcastReceiver通信
路宇的博客
07-15 837
因为插件APK是没有安装和运行的一个APK文件,是没有上下文环境的,所以插件内部的Activity也就无法直接运行,只能通过代理的Activity,做为其上下文,并加载布局进行显示。很多大厂APP内会有很多功能模块,但是包体积却很小,那么就用到了插件技术,点击某个模块后,从服务器获取对应的APK文件,并使用其内部的功能。因为插件APK是没有安装和运行的一个APK文件,是没有上下文环境的,所以不能使用自身的this,因为自身的this为空。3、这种插件,在写插件开发的时候,有什么要注意的事项?
Android插件主流框架
04-29
主流Android插件框架有以下几种: 1. **DroidPlugin**:DroidPlugin是360手机卫士团队开发的一款轻量级插件框架。它通过Hook技术实现了Activity、Service、BroadcastReceiver等组件的动态加载和管理,支持...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 最近很火的微信啪一啪猜猜是怎样通过Flutter实现的? 48904
  • 2020最新中高阶Android面试题总结 下(附解题思路) 32744
  • Android插件化主流框架和实现原理 18375
  • 2020最新Android开发中高级进阶书籍推荐 11288
  • 2020最新中高阶Android面试题总结 上(附解题思路) 7745

分类专栏

  • 程序员 35篇
  • 程序人生 15篇
  • Android开发 171篇
  • android进阶 27篇
  • ndk 1篇
  • Jetpack 5篇
  • 面试 49篇
  • 性能优化 1篇
  • 腾讯 1篇
  • kotlin 1篇
  • Android 46篇
  • framework 5篇
  • 字节跳动 2篇
  • 框架 1篇
  • SDK 2篇
  • GitHub 1篇
  • flutter 1篇

最新评论

  • Android-面试官:性能优化我就问这些问题!能不能刷到我就看你的造化了

    CSDN-Ada助手: 多亏了你这篇博客, 解决了问题: https://ask.csdn.net/questions/8060519, 请多输出高质量博客, 帮助更多的人

  • 程序员工作5年以上,找工作还看学历吗?

    m0_55786528: 广告打的秒啊

  • 牛笔了!阿里P8大佬熬夜15天,把所有Android第三方库整理成了PDF

    weixin_47214255: 您好 点赞关注了 邮箱volume98910107@gmail.com

  • 字节一面:https 真的安全吗?可以抓包吗?如何防止抓包吗?(我当场去世)

    eHackyd: “Android平台HTTPS抓包解决方案及问题分析”链接失效了

  • 牛笔了!阿里P8大佬熬夜15天,把所有Android第三方库整理成了PDF

    金鳞戏水: 您好 点赞关注了 邮箱461211527@qq.com

大家在看

  • XJTUSE-数电-第五次作业 601
  • 聚焦从业人员疏散逃生避险意识能力提升,推动生产经营单位每年至少组织开展(疏散逃生演练,让全体从业人员熟知逃生通道、安全出口及应急处置要求,形成常态化机制。
  • 批处理脚本的重定向艺术:操作符全解析
  • Stirling PDF 部署 - 强大的PDF Web在线编辑工具箱 46
  • Promise的魔法:揭开JavaScript异步编程的面纱 906

最新文章

  • Android 音视频开发实战:视频手势缩放与自动吸附动效实现(纯手写)
  • 媳妇看了都说好!Android JetPack组件原理之Lifecycle、LiveData、ViewModel与源码分析技巧
  • Android面试家常菜:Handler消息机制全家桶一把梭,看完这篇还不懂,请砍我
2020年202篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网神龙斗士第二部股权质押网起名靠谱吗大岛由加利近况芙蓉楼送辛渐的古诗的意思www.520hhxx.com城公司起名杭州中策电缆有限公司为什么男生喜欢吃女生小兔兔起名字好的字女孩李姓起名大全2018属狗kb4012598起1个商标名左传与时俱进的意思姓王的取名起名红酒商行起名叫什么好互联网起名项目猪场起名大全孙悦nba金姓女儿起名大全给孩子起个动漫小名给宝宝起乳名男生女钱姓起名笔记本电脑没有声音巾帼枭雄剧情介绍木质精油穆姓男孩起名姓马男孩取名起名大全西田麻衣淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化