-
解耦,独立各大模块的业务成为插件,互不干扰,即用即插,方便开发与维护。当业务庞大、繁琐之后,是否存在牵一发而动全身的感觉,是否存在逻辑过于复杂、耦合度较高、难以掌控整个项目。
-
加快编译。每次修改后无需重新编辑整个工程项目,可以单独编译某个插件工程,对于庞大的项目而言,速度就是至上的武功。
-
动态更新。无需重新下载与安装app,可以单独下载某个插件apk,直接加载,从动态更新、包体积和流量上感觉是个不错的选择。
-
模块定制。需要什么模块下载什么模块,无需让app变得庞大,所需所得。
大家其实都知道,Android 应用本身是基于魔改的 Java 虚拟机的,动态加载代码简直不要太简单,只需要使用 DexClassLoader 加载 Apk,然后反射里面的代码就可以了。
但是光能反射代码是没有意义的,插件化真正的魅力在于,可以动态加载执行 Android 组件(即 Activity、Service、BroadcastReceiver、ContentProvider、Fragment)等。
仔细想一下,其实要做到这一点是有难度的,最主要的阻碍是,四大组件是在系统里面中注册的,具体来说是在 Android 系统的 ActivityManagerService (AMS) 和 PackageManagerService (PMS) 中注册的,而四大组件的解析和启动都需要依赖 AMS 和 PMS,如何欺骗系统,让他承认一个未安装的 Apk 中的组件,就是插件化的最大难点。
另外,资源(特指 R 中引用的资源,如 layout、values 等)也是一大问题,想象一下你在宿主进程中使用反射加载了一个插件 Apk,代码中的 R 对应的 id 却无法引用到正确的资源,会产生什么后果。
总结一下,其实做到插件化的要点就这几个:
-
反射并执行插件 Apk 中的代码(ClassLoader Injection)
-
让系统能调用插件 Apk 中的组件(Runtime Container)
-
正确识别插件 Apk 中的资源(Resource Injection)
当然还有其他一些小问题,但可能不是所有场景下都会遇到,下次再另外详细阐述。
插件化是一门很有意思的学问,网上已经有很多“入门知识”和“实现原理”之类的文章,但是关于插件化的实战却没有一个系统、全面的分享,下面我要分享的是最近小编有幸在腾讯高工手里扒到这份“插件化实战学习手册”,这位大佬主导开发过多个采用插件化架构的APP项目。手册中收录了各互联网大厂热门的插件化项目实战,从新手到架构师,这份学习手册足以。
-
插件化提要
-
插件化发展历史
-
类加载
-
双亲委托机制
-
资源加载
-
四大组件支持
-
Proxy Activity代理
-
hook方式
-
从零开始实现一个插件化框架
-
Activity的启动流程
-
寻找Hook点
-
撸码阶段
-
代理对象
-
偷天换日,替换原来的Intent
-
ActivityThread
-
将代理的intent替换回来
- 360插件开发之DroidPlugin
插件开发之360 DroidPlugin源码分析
插件开发之360 DroidPlugin源码分析之Hook机制
Hook机制的包结构关系
Hook机制类图关系
Hook机制的时序图关系
Manifest权限申请
基类Hook做了什么?
…
- 滴滴VirtualApk实战
配置
学习福利
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!