《阿里、腾讯我来了》之插件化夺命5连问

420 阅读5分钟

1、聊聊插件化整体?

插件化技术可以说是Android高级工程师所必须具备的技能之一,从2012年插件化概念的提出(Android版本),到2016年插件化的百花争艳,可以说,插件化技术引领着Android技术的进步。

可以说,插件化技术涉及得非常广泛,其中最核心的就是Android的类加载机制和反射机制。

  • **类加载机制:**虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制
  • **反射机制:**反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。在计算机科学领域,反射是一类应用,它们能够自描述和自控制。这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义

2、知道插件化如何支持组件生命周期的管理吗?

大致分为两种方式:

  • ProxyActivity代理:

具体的过程如下:

  1. 首先需要通过统一的入口(如图中的PluginManager)启动插件Activity,其内部会将启动的插件Activity信息保存下来,并将intent替换为启动ProxyActivity的intent。
  2. ProxyActivity根据插件的信息拿到该插件的ClassLoader和Resource,通过反射创建PluginActivity并调用其onCreate方法
  3. PluginActivty调用的setContentView被重写了,会去调用ProxyActivtysetContentView。由于ProxyActivity。重写了getResource返回的是插件的Resource,所以setContentView能够访问到插件中的资源。同样findViewById也是调用ProxyActivit*8y的。
  4. ProxyActivity中的其他生命周期回调函数中调用相应PluginActivity的生命周期。
  • 预埋StubActivity,hook系统启动Activity的过程: 用一张图简要的介绍下系统是如何启动一个Activity的。 文末有具体步骤,可自行查阅。

3、资源加载如何实现?

Android系统通过Resource对象加载资源,下面代码展示了该对象的生成过程:

因此,只要将插件apk的路径加入到AssetManager中,便能够实现对插件资源的访问。 资源路径的处理

  • 合并式:addAssetPath时加入所有插件和主工程的路径;
  • 独立式:各个插件只添加自己apk路径

4、除了Activity,其他组件能讲述下原理吗?

  • **Service:**Service和Activity的差别在于,Activity的生命周期是由用户交互决定的,而Service的生命周期是我们通过代码主动调用的,且Service实例和manifest中注册的是一一对应的。实现Service插件化的思路是通过在manifest中预埋StubService,hook系统startService等调用替换启动的Service,之后在StubService中创建插件Service,并手动管理其生命周期。
  • **BroadCastReceiver:**解析插件的manifest,将静态注册的广播转为动态注册。
  • **ContentProvider:**类似于Service的方式,对插件ContentProvider的所有调用都会通过一个在manifest中占坑的ContentProvider分发。

5、 Activity的启动流程你了解吗?

当调用了startActivity方法的时候,会调用到Instrumentation的execStartActivity,然后会通过一个服务(AMS, 也就是ActivityManagerService)去验证,验证通过之后回到主线程正常启动。我们要做的,就是在AMS验证之前偷偷把要启动的Activity替换成宿主中的一个代理Activity,验证通过之后,回到主线程,再将替换掉的Activity替换回来,起到了一个瞒天过海的作用(这里下面会详细介绍)。

最后

其实不同成长阶段会有不同的技术能力要求,就像插件化,只有达到一定的职业高度,才会有它很重要的认知,只有弄清楚底层框架原理,才能走向更高的境界。所以掌握插件化技术是逐渐成长为Android高级工程师的过程中不可或缺的一部分,想要升职涨薪、跳槽大厂面试加分,就必须弄清插件化的原理。

在面试中,常会问一些插件化的面试题,其中包括四大组件、资源加载、源码等方面。尤其是大厂,十分爱考察求职者对底层执行原理的掌握,看你到底水平有多高,如果没有对插件化进行深入的了解以及实践,那你就有很大几率会在面试中“out”,而且在要薪酬上也比较吃亏。

那么如何才能快速掌握插件化的原理与应用呢?又该怎样在面试环节拿下J插件化相关的面试题,让面试官刮目相看?

这样的你不容错过

如果你

  • 很想掌握Android插件化技术,学会框架分析、Activity实现、框架自身动态化等问题
  • 想对Android有更深入的理解,提升APP性能
  • 希望面试时能够从容应对插件化技术的相关问题
  • 想要突破25k月薪的门槛
  • 正在向高级开发工程师发展进阶

image.png

一、插件化原理

image.png

二、Android动态加载框架DL的架构

image.png

三、从零开始实现一个插件化框架

四、360插件开发之DroidPlugin

五、爱奇艺插件化原理分析之 Neptune框架

Android程序员必备书单

《Android 高级开发面试题以及答案整理(1307页)》 内含各个大厂的面试专题,如:阿里、腾讯、美团、哔哩哔哩、拼多多等等

《Android 开发相关源码精编解析(558页)》 各类框架源码详细解析

《Android知识大全(938页)》

内容涵盖:Android基础、Fragment、多线程、设计模式MVC、MVP、MVVM、数据存储、Hook、apk、IPC、View、JNI、Bitmap、Service、Handler、Broa'dcast Rceiver、性能优化、任务栈、跳转协议等

因为文章内容实在是太多了,不能够给大家一一体现出来,每个章节都有更加细化的内容。大家需要完整版文档的小伙伴,可以一键三连,下方获取免费领取方式! 【点击这里