百度面试笔试题,Android组件化和插件化的概念,详细解说

  • 用户更新代价较大,每次用户更新都需要下载整个Apk包,整个Apk包括了一个应用的所有代码,要消耗用户较多的流量。

  • 如果是一些重要的更新,为了确保用户都能更新到,还需要强制更新,即用户打开App后如果不更新则退出应用,这种对用户来说是极其不友好的。

  • 还有另外一种情况,某些较大的App功能很多,比如支付宝、微信等,如果将这些功能全部塞到一个Apk中,那将会是一个巨型Apk,用户在安装或者更新Apk时将会经过漫长的等待时间。

基于以上几点,Android的插件化技术应运而生**,**插件化技术可以将整个巨型Apk按照功能模块划分,不同的功能打包成不同的Apk,然后应用的主Apk按需加载对应功能的Apk,用户只需要安装应用的主Apk即可。主Apk相当于一个壳,它会按需加载其他功能模块的Apk。通过这种模式,不仅解决了巨型Apk的问题,而且当某个功能模块需要变化时,也只需要修改对应功能的代码,打包功能Apk并更新即可,这样不仅可以让用户及时更新,而且更新的代价也很小。但是,我们知道,在Android中,没有安装的apk是不能直接运行的,那么要想实现插件化,我们就必须让宿主Apk能够加载功能Apk并运行。

2、插件化的好处:

  • 宿主和插件分开编译

  • 并发开发,宿主和插件都是apk,开发是互不影响的,只需要宿主给插件一个上下文

  • 动态更新插件,不需要安装,下载之后就可以直接打开

  • 按需下载模块

  • 可以解决方法数或变量数爆棚问题

3、插件化的标准:

是不是每个app都能运行在我们的宿主app里面呢?答案肯定不是。我们必须在宿主app里面设计一套标准,让插件app满足我们这个标准才能够运行。最主要的是插件app因为没有安装,所以是没有上下文的,就需要我们的宿主将上下文传过去。插件化的activity也没有生命周期,所以我们的宿主也要对插件的生命周期进行管理,以及资源、layout等。

4、插件化技术的发展

大概从2012年开始,前前后后出现了很多插件化/组件化的框架,各种框架都有自己的特色。

AndroidDynamicLoader:2012年7月,基于Fragement实现,通过动态加载不同的Fragement来替换界面,首次使用addAssetPath来读取插件中的资源。

Altas技术沙龙分享:2014年初,阿里的一次技术沙龙分享,主要讲淘宝Alta这项技术的概念,并没有涉及详细实现,当时已经应用于淘宝客户端,未开源。

android-pluginmgr:2014年7月,主要通过操作java虚拟机字节码,通过动态生成一个插件类的子类如四大组件(需要在manifest中提前声明),达到插件化的功能(最新的已经改成hook系统的一些对象如Instrumentation、ActivityThread等)

dynamic-load-apk:2014年底,该框架使用代理的方式实现,并没有hook系统的底层对象、方法。比较有代表性,后文中会详细分析。

OpenAltas:2015年4月,后来改名为ACDD。该框架参考了淘宝App的很多经验,主要就是Hook的思想(据说是反编译代码),同时,还首次提出来通过扩展AAPT(android assert packaging tool)来解决插件与宿主的资源id冲突的问题。

Android-Plugin-Framework:2015年5月,采用hook系统底层很多方法,感觉是把能hook的对象基本都hook住了,功能相对完整,但不支持so插件,兼容性不好,目前在实际应用的实践比较少。

DroidPlugin:2015年8月,它也hook了很多Android系统的底层代码,包括本地的PMS、AMS、ActivityThread、Instrumentation、H等对象,能把任意的App都加载到宿主里运行。比较有代表性,后文也会详细分析。

DynamicAPK:2015年10月,参考了之前提到的ACDD的设计方案,并通过扩展aapt解决资源问题。

Small:2015年底,是一个比较轻巧的跨平台插件化框架,比DroidPlugin更加轻量一点,基本原理也是对底层的对象进行hook,并使用gradle脚本来解决资源冲突的问题,可以通过配置url来支持插件跳转。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

重要知识点

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。

高级进阶篇——高级UI,自定义View(部分展示)

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

  • 面试题部分合集

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

  • 30
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值