大厂标配的动态化解决方案,高阶技术从未如此简单

在Android 高阶技术中,动态化算是一个方向,而在动态化中最知名的就是插件化相关技术了。

插件化目前在国内基本是所有大厂的标配,学习性价比非常高,但很多人没有真正地动手去实践过,根本不了解其中有多少问题,会牵涉到多少技术细节,那么我们如何掌握插件化这门高阶技术呢?

首先就要对于Framework有着比较深的了解,因为插件有独立的业务,包含独立页面与功能,那么这些 Activity(页面) 并未在宿主中注册,怎么能够启动呢?

要想能够绕过系统的限制,来启动「不存在的」Activity,首先你要对系统的检测机制极为熟悉,只有知道的防御方式才能创造攻击技巧一击破之,所以你需要对 Activity的整体启动流程极为熟悉。

其次你还需要清楚类加载机制:

  1. 插件中如何访问宿主中的类呢?
  2. 宿主如何访问插件中的类呢?
  3. 插件与插件中的类要不要支持支持访问呢?

这些问题都需要你对类的双亲委派机制极其熟悉,然后巧妙的自定义修改流程实现

最后,就是资源了:

  1. 是否要支持资源访问宿主呢?如果插件使用了宿主的资源id,宿主编译过程中资源id发生变化怎么办呢?
  2. 如何保证插件的资源和宿主的资源id不冲突呢?
  3. 系统是如何加载资源的?启动阶段如何合并插件与宿主资源呢?

这些要求你对系统如何加载资源,aapt对资源的处理都要有一定的了解

到这里,我们已经具备了了解一个插件化框架的基础知识了。

以360 RePlugin为例,我们可以带着问题去剖析它

看看 Replugin 对于组件是如何支持的?对于资源是如何支持的?对于插件与宿主的通信是如何支持的?

去拆解它的每个能力,结合自己前面的认知,验证自己的理解,这个阶段还能发现很多的技术技巧。

当我们拆解完一个插件化的框架时,就已经可以说对插件化的原理基本掌握了。

然后我们就可以直接上手实践,因为实践才是检验真理的唯一标准,很多时候我们苦背原理,面试过程中一被问到:

  • 了解过插件化开发吗?
  • 能说说插件化开发的几种实现思路嘛?
  • 插件化开发中插件的Activity有几种启动方法?
  • 插件化开发中插件之间如何进行组件通信?
  • 插件的混淆如何解决?
  • 插件化开发的资源冲突问题会存在吗?如何解决?
  • 在项目中一个已有模块,你是如何收敛成为插件的呢?需要做哪些准备呢?

诸如此类的层层深挖,一下子就慌了,所以我们需要手动去实践插件化的打包、下发(扔到 sdcard加载),去通过具体的实践感受整个流程,加深对原理的理解。

直到可以抛开别人的代码,借助Framework源码,自己去实现插件化的核心逻辑:

从自己启动一个不存在的 Activity 开始,到对所有核心功能的模拟,这个阶段相信让你对原理有进一步的认知,你需要了解到各个版本系统源码的差异,如何绕过 hidden api的限制等等

如果你现在对于插件化技术的理解还不够深入,想要在最短的时间内吃透,那么必须要跟着正确的学习路线深挖!

这里给大家分享一整套Android开发核心技术文档笔记,帮助大家在技术的道路上所向披靡!

如果需要的话,可以顺手帮我点赞评论一下,直接添加VX:core0610 免费领取!

部分内容展示如下

大厂标配的动态化解决方案,高阶技术从未如此简单_第1张图片

大厂标配的动态化解决方案,高阶技术从未如此简单_第2张图片

大厂标配的动态化解决方案,高阶技术从未如此简单_第3张图片

01.Android必备底层技术

  • Java序列化:Serializable原理、Parcelable接口原理、Json、XML
  • 注解、泛型与反射:自定义注解、注解的使用、泛型擦除机制、泛型边界、Java方法与Arm指令、Method反射源码、invoke方法执行原理
  • 虚拟机:JVM垃圾回收器机制、JVM内存分配策略、Android虚拟机与JVM底层区别、虚拟机底层Odex本地指令缓存机制、虚拟机如何分别加载class与object、虚拟机类加载模型
  • 并发:Java线程本质讲解、线程原理、线程通信、UnSafe类、线程池
  • 编译时技术:OOP面向切面之AspectJ、字节码手术刀JavaSSit实战、字节码插桩技术(ASM)实战
  • 动态代理:动态代理实现原理、动态代理在虚拟机中运行时动态拼接Class字节码分析、ProxyGenerator生成字节码流程
  • 高级数据结构与算法:HashMap源码、ArrayList源码、排序算法
  • Java IO:Java IO体系、IO文件操作

大厂标配的动态化解决方案,高阶技术从未如此简单_第4张图片

02.Framework

  • Binder:Linux内存基础、Binder四层源码分析、Binder机制、Binder进程通信原理
  • Handler:Loop消息泵机制、Message解析
  • Zygote:init进程与Zygote进程、Zygote启动流程、Socket通信模式、APP启动过程
  • AMS:ActivityThread源码分析、AMS与ActivityThread通信原理、Activity启动机制
  • PMS:PMS源码、APK安装过程分析、PMS对安装包的解析原理
  • WMS:PhoneWindow实例化流程、DecorView创建过程、ViewRootImpl渲染机制

大厂标配的动态化解决方案,高阶技术从未如此简单_第5张图片

03.Android常用组件

  • Activty:Activity管理栈与Activity的启动模式、Activity生命周期源码分析
  • Fragment:Fragment生命周期深入详解、Fragment事务管理机制详解、性能优化相关方案
  • Service:Service启动模式分析、Service管理与通信方案、Service生命周期底层详解

大厂标配的动态化解决方案,高阶技术从未如此简单_第6张图片

04.高级UI

  • UI绘制原理:setContentView()方法下到底做了什么、AppCompatActivity与Activity的区别、UI测量、布局、绘制的底层执行流程
  • 插件换肤:LayoutInflater加载布局分析、Android资源的加载机制、Resource与AssetManager
  • 事件分发机制原理:事件执行U形链与L形链、事件拦截原理
  • 属性动画:VSYNC刷新机制、ObjectAnimator与ValueAnimator源码讲解、Android属性动画:插值器与估值器
  • RecycleView:布局管理器LayoutManager详解、回收池设计思想、适配器模式原理
  • 高阶贝塞尔曲线

大厂标配的动态化解决方案,高阶技术从未如此简单_第7张图片

05.Jetpack

  • Lifecycle:Lifecycle源码、Lifecycle高阶应用
  • ViewModel:ViewModel源码、ViewModel应用技巧
  • LiveData:LiveData源码
  • Navigation:Navigation源码
  • Room:Room源码、Room+LiveData监听数据库数据变更刷新页面原理
  • WorkManager内核
  • Pagging原理
  • DataBinding:单向绑定、双向绑定、如何与RecyclerView的配合使用、底层原理

大厂标配的动态化解决方案,高阶技术从未如此简单_第8张图片

06.性能优化

  • 启动优化:系统启动原理、Trace工具分析启动卡顿、类重排机制、资源文件重排机制
  • 内存优化
  • UI渲染优化:UI层级规范及对UI加载的影响、UI卡顿原因及修复、UI绘制、布局、测量原因以及处理方案
  • 卡顿优化:造成卡顿的原因分析、内存抖动与GC回收、回收算法
  • 耗电优化
  • 崩溃优化:项目崩溃异常捕获、优雅的异常处理方案、如何避免异常弹框
  • 安全优化:APP加固实现(防反编译,dex加固)、https防抓包机制(数据传输加载,客户端服务器端双向加密校验)
  • 网络优化:serializable原理、parcelable接口原理、http与https原理详解、protbuffer网络IO详解、gzip压缩方案
  • 大图加载优化:Glide巨图加载机制原理分析、大图多级缓存实现方案
  • 多线程并发优化
  • 储存优化:Android文件系统-sdcard与内存存储、Shared Preference原理、MMAP内存映射
  • 安装包优化:shrinkResources去除无用资源、合理设置多语言、webp实现图片瘦身、合理配置armable-v7的so库、Lint检查工具实践

大厂标配的动态化解决方案,高阶技术从未如此简单_第9张图片

如果需要的话,可以顺手帮我点赞评论一下,直接添加VX:core0610 免费领取!

07.音视频

  • C/C++:数据类型、数组、内存布局、指针、函数、预处理器、结构体、共用体、容器、类型转换、异常、文件流操作、线程
  • H.265/H.265:音视频格式封装原理、编码原理、视频流H264的组装原理切片NAL单元、视频流H264码流分析、切片与宏快,运动矢量、信源编码器、高频滤波、帧间拆分与帧内预测、CTU,PU TU编码结构、DSP芯片解码流程、MediaPlayer与DSP芯片交互机制、投屏架构、MediaProjection与MeidiaCodec交互机制、H265码流交换
  • MediaCodec:dsp芯片、编解码器的生命周期、解码器中输入队列与解析队列设计思想、MediaCodec中平缓解码解析、MediaExtractor 多路复用、MediaMuxer合成器、MediaFormat格式
  • 音视频剪辑:视频剪辑、音频剪辑、音频合成、音谱显示、视频倒放
  • 音视频直播:硬编码、软编码、native实现rtmp推流、摄像头预览帧编码NV21转YUV、视频画面封装拼接Packet包、音频流数据拼接Packet包、RtmpDump实时同步发送音视频数据、MediaProjection、Medicodec编码H264码流、rtmp推流
  • OpenGL与音视频解码:OpenGL绘制流程、矩阵、Opencv详解、人脸识别效果实现
  • OpenGL特效:CPU与GPU运行机制详解、世界坐标,布局坐标,与FBO坐标系、图像镜像与旋转处理、人脸定位与关键点定位、大眼效果、贴纸效果、美颜效果
  • FFmpeg万能播放器:FFmpeg结构体、声音播放原理、Surface的渲染、像素绘制原理与对齐机制、音视频同步原理、视频播放器整体架构
  • Webrtc音视频通话:WebRtc服务端环境搭建与Webrtc编译、1v1视频通话实现方案、群聊视频通话实现思路、多对多视频会议实现、1V1音视频通话实现

大厂标配的动态化解决方案,高阶技术从未如此简单_第10张图片

08.开源框架原理

  • Okhttp
  • Retrofit
  • RxJava
  • Glide
  • Hilt
  • Dagger2
  • EventBus
  • 组件化、插件化、热修复等

大厂标配的动态化解决方案,高阶技术从未如此简单_第11张图片

09.Gradle

  • Groovy语法
  • Gradle Android插件配置
  • Gradle实践等

大厂标配的动态化解决方案,高阶技术从未如此简单_第12张图片

10.kotlin

  • Kotlin语法
  • 扩展使用
  • 进阶使用
  • 实践等

大厂标配的动态化解决方案,高阶技术从未如此简单_第13张图片

11.Flutter

  • Dart语法
  • UI
  • 进阶使用
  • 优化
  • 实践等

大厂标配的动态化解决方案,高阶技术从未如此简单_第14张图片

12.鸿蒙

  • Ability组件
  • 分布式任务
  • 事件总线
  • 鸿蒙线程
  • UI自定义控件等

大厂标配的动态化解决方案,高阶技术从未如此简单_第15张图片

如果需要的话,可以顺手帮我点赞评论一下,直接添加VX:core0610 免费领取!

Android路漫漫,共勉!

大厂标配的动态化解决方案,高阶技术从未如此简单_第16张图片

大厂标配的动态化解决方案,高阶技术从未如此简单_第17张图片

你可能感兴趣的:(随笔,android,java,前端,架构)