系列文章:
(一)2025年Android六边形战士开发趋势,需要掌握哪些技能可自我反省
(二)该怎么学Android进阶,拒绝沦为高级三方SDK调用工程师?
(三) 金三银四,分享N年前准备的面试真经,可能适用绝大部分人
一、前言
从2007年Android
到来到现在,已经来了17个多年头了,Android
正式版也从Android 1.0
发展到Android 15,Android 16
正式版今年也即将出来了。作为深耕Android开发的,现已经不是当年只会写写UI界面,用用第三方框架就可以了闯荡江湖了,需要向 六边形战士方向
发展并不断深入,当然六边形战士只是一个名词,Android实际涉及到的分支,可能不止6个,可以7个,8个或者更多。
其实Android并没有凉,
只是现在要求Android开发需要懂得更多更深了,走向于学术分科阶段了
二、Android开发必备技能
- 掌握
Java
基础,IO
,线程,网络,文件 - 掌握
Kotlin
基础,协程,Flow, Channel
等 - 掌握注解、注解处理器,
APT , KAPT,KSP,KCP,SPI
机制,反射等 - 掌握动态代理,
Aspect, Javassist, ASM
字节码插桩等面向切面编程 - 深入理解
JVM
的 运行时数据区,对象怎么分配,GC
及调优方法,ART
虚拟机和调优和ClassLoader
加载器和字节码 - 掌握并发模型和内存 , 锁,
CAS
,原子变量, 线程池 ,AQS
- 理解基础数据结构和算法
- 深入理解IO模型,
BaseIO,BIO,NIO,OKIO
- 深入理解网络(
Http,Https,Http1.0,2.0,3.0,https
加密原理,TCP,UDP,Socket
及与FD关系 - 掌握
C,C++
基础,指针,IO, STL
内存管理,线程管理等 - 掌握
NDK,JNI,Cmake
等相关知识 - 理解23种设计模式和生产消费者模式
三、万恶最卷的应用层
Android原生XML
布局,绘制流程,Jetpack 那一全套,不要放弃,翻开系统源码,系统App
,如launcher,SystemUI
等,至少再等过好几年,都不会用Compose
- 新一代声明式UI布局:
Jetpack Compose
及时跟进,还没跟上的加紧补进自己的知识库, - 应用层UI层,大多数还是业务层,想要一直在应用UI层领域深耕,夸端就必须要掌握:
1)Kotlin Multiplatform(KMP)Compose Multiplatform(CMP)
Android 自带夸端方案技术跟进 2)Flutter
已经成熟,随时进入都是好机会。
前沿技术: AI接入开发或者AI关联Android上部分开发
四、深入Framework系统层面与应用
- 深入理解Handler消息通信机制
- 深入理解Binder跨进程通信原理包含驱动分析,能够自己实现一套IPC跨进程方案
- 深入理解ServiceManager管理服务
- 掌握Zygote进程执行流程
- 理解AMS,PMS,WMS,IMS等
- 深入理解View的绘制流程,事件处理分发过程。
- 理解并吸取RecyclerView设计理念
应用场景与反省:
- 自己能修改
AOSP源码
并编译吗? - 能胜任车载或者手机
launcher,SystemUI
等的开发吗? - 车载倒车影像开发,会?
- 车载智能导航定位开发,会?
- 车载多媒体应用,本地音乐,蓝牙音乐,在线音乐
- 智能AI识别小助手,车载上有,手机上面也有,比如:小爱同学
- 智能家居,智慧零售收银机,收银秤,串口,USB,蓝牙技术,分屏等。
五、所有的都离不开的性能优化
-
Android app开发给客户留下印象的第一步,启动优化:
1)app冷启动500ms能到第一个首页吗?
2)app能在6年前的手机上秒开?
3)拓展开自己的认知:离开手机端,现在还有很多智能家居,智能设备在用Android 5.0,Android7.0等, 它的CPU芯片水平还在16年中档次的手机芯片。
4)拓展开自己的认知:智能终端启动同时展示多屏的启动优化难度远远大于单屏的手机启动优化
5)拓展开自己的认知:和别的app对比启动优化不需要两个app复杂难度,数量级一样。只需要硬件设备一样就行。要有意识地向天龙八部扫地僧学习,带上2个人轻功依然可以秒杀其他人。
6)拓展开自己的认知:大厂某些App在手机上很快,在某些终端平板上面仍然要2s左右,它还只是单屏 -
布局优化:
1)减少布局套层,过度绘制,约束布局,帧布局,线性布局,merge标签使用:ViewStub 延迟化加载标签
2)合理使用异步加载布局AsyncLayoutInflater,
3)能够搭建一套提前加载布局框架
4)利用工具查看布局层级及耗时:Android Device Monitor 中内置的一种工具 Hierarchy Viewer -
内存优化:
1)使用工具MAT,MemoryProfiler,systrace监控等
2)掌握常见内存泄漏避坑点
3)掌握频繁创建对象导致内存抖动的原理,涉及到JVM,STW机制及常见优化方案
4)掌握修改对象引用类型,及JVM中标量替换,逃逸分析的实际应用
5)掌握复用原理:包括线程池,对象池,各种池的合理使用
6)拓展开自己认知:普通app大部分就连续用2~5个小时顶天了,然后划掉,回桌面玩其他的,或者锁屏放在口袋里,app就被释放了,这是手机上的app,要知道launcher app可能连续1个多月不关机,不重启,更有某些终端设备直接连接好电源线,24小时开着一直放着多条广告视频,10天半个月不关机。比如大型超市连续12个多小时,排队频繁操作收银,客屏还一直放着视频广告,有的甚至晚上都不会关机,监控着,对内存控制非常严格。 -
APK瘦身:
1)清理无用资源
2)图片资源优化:压缩图片,使用svg,tinypng,不带alpha的jpg图片,使用shape,使用色彩方案等
3)资源动态加载,皮肤加载,在线素材,模块插件化等
4)lib库的优化
5)使用7Zip来压缩资源
6)代码混淆,资源混淆,使用微信AndResGuard对资源混淆并且压缩图片res等
7)使用Facebook的redex优化字节码 -
网络优化:
1)首先必须得认识到一点,不能通过写代码来改变信号源的信号强度
2)弱网优化:压缩/减少数据传输量,利用缓存减少网络传输 ,针对弱网(移动网络), 不自动加载图片 ,界面先反馈, 请求延迟提交
3)网络框架自身优化:http1.1-->http2.0--->http3.0 -
崩溃,异常捕获:
1)掌握Framework中异常处理流程
2)能够设计一套自定义Thread.UncaughtExcerptionHandler,用当前这个Handler嫁接系统的Handler进行处理异常的方案,即:比如友盟异常管理,bugly异常管理的Android端能够自己实现这一套方案。 -
WebView优化:
1)可以在初始化同时先请求数据,让后端和网络不要闲着,
2)可以提前初始化Webview的相关设置,多个webview可以搞个Webview池子管理
3)常用 JS 本地化及延迟加载,使用第三方浏览内核
4)后端处理慢,可以让服务器分 trunk 输出,在后端计算的同时前端也加载网络静态资源
5)脚本执行慢,就让脚本在最后运行
6)DNS 和链接慢,想办法复用客户端使用的域名和链接 -
大图bitmap优化:
1)可用luban压缩,条件好可以自研一套更好压缩算法,比如微信自己有一套 2)区域解码:只解码屏幕或者UI显示范围之内的图像数据 -
崩溃优化ANR方案
1)懂崩溃ANR的原理
2)理解常见ANR场景
3)能设计出一套traces.txt文件监控方案并分析 -
电量优化:
1)减少不必要的网络请求
2)优化位置服务
3)优化后台任务
4)优化图像和动画
5)避免后台服务常驻
6)使用性能检查工具:可以使用Perfetto等性能检查工具来分析应用的耗电量和网络使用情况,并进行优化
7)检测和优化Overdraw
8)CPU优化:避免CPU时间片消耗异常,可以使用TraceView获取进程执行信息
9)使用Battery Historian工具*:Battery Historian是Android 5.0之后Google开源的一款用于检测与电池有关的信息和事件的工具。它可以可视化分析各耗电模块的耗电情况,帮助开发者定位和优化耗电问题。
六、高端特殊功能,摄像头,图片处理,音视频及特效剪辑处理
当今短视频,直播天下,别相信已经了或者饱和了,现在短剧,爽剧天下又来了。所以这一领域还是有很大发展趋势
- 摄像头,图片处理,类似美颜相机,各种处理
- 音视频编码,解码,硬编,软编,混音,制作大片,特效处理,直播,投屏
h264,h265,rtmp,rtsp,webrtc,openGl,FFmpeg
等
应用场景与反思:
- 抖音上面哪些剪辑特效,自己会写几个?
- 能手撸软编解码写一个音乐播放器或者视频播放器吗?
- 美颜相机里面处理撸一个吗?
- 音频处理均衡器,混响,过滤器,消音,抽取人声拿伴奏等能自己撸一个?
七、逆向安全
- 掌握DEX文件格式和字节码指令
- 熟悉Smali语言
- Native部分:学习SO(ELF)文件格式,了解动态链接相关的链接逻辑,如rel、got、plt等section的定义
- 反编译工具:学习如何使用Jadx-gui、Jeb,Apktool、Dex2jar等工具分析APK,查找、跳转、调试、查看寄存器、函数调用栈
- 调试工具:使用IDA-pro进行SO分析,查找字符串、跳转函数、交叉引用跟踪、动态调试、查看内存、寄存器、函数调用栈
- 熟悉APK包的结构,识别代码和资源文件,分析应用的基本信息、引用的三方库、加固方案和技术栈
- 动态调试:使用Xposed框架进行Java层Hook,使用Frida进行动态调试,进行HTTPS抓包和加密算法识别
- Native层逆向:使用IDA Pro、Ghidra等工具进行SO文件逆向,进行OLLVM反混淆和加固脱壳
- 协议分析与功能破解:选择感兴趣的App进行协议分析和功能破解实战
总结
本文重点总结和分享了Android六边形战士开发趋势的各个小点:
写在最后: