ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

车载Android开发进阶:从AAOS架构到Framework实战指南

车载Android开发进阶:从AAOS架构到Framework实战指南 做车载Android开发这些年有个特别有意思的现象很多在手机App领域干了三四年的工程师简历一投到车载方向面试官问的第一个问题往往不是你用过什么框架而是你知道Android Automotive OS和普通Android有什么区别吗。很多人当场就愣住——有人甚至以为车载Android就是把手机系统装进车机里。我可以很负责任地说这两个东西的差距比Android和iOS的差距还要大。这篇文章就是把车载Android开发这个方向的核心技术栈、常见工作场景和最容易踩的坑一次性讲清楚。这篇指南适合三类人。第一类是准备从手机App开发转行车载的Android工程师你需要弄明白自己要补哪些知识。第二类是已经入行车载方向、但平时只做应用层、对系统层一脸懵的朋友这篇文章能把你的知识盲区补齐。第三类是想自学Android Automotive OS但面对AOSP源码不知道从何下手的学习者这篇文章会给你一条清晰的主线。1. 车载Android与手机Android的本质差异为什么不是装进车机那么简单很多人理解车载Android以为就是把手机上的那套Android系统移植到车机上。真不是。车载场景下跑的Android圈内人管它叫AAOS全称Android Automotive OS它是AOSPAndroid Open Source Project体系里专门为汽车座舱打造的一个独立上游分支。这个分支不是把手机系统裁剪一下这么简单而是从架构层面加入了大量与汽车硬件、安全驾驶相关的模块。1.1 从AAOS体系结构说起先厘清AAOS和Android Auto这两个概念太容易混了。Android Auto是手机互联方案本质上是把手机上的内容投射到车机屏幕上算力在手机车机只是当显示器用。而AAOS是直接跑在车机硬件上的完整操作系统它自己就是主机有完整的应用框架、系统服务、硬件抽象层不需要依赖手机。从AOSP的角度看AAOS更像是AOSP的一个feature branch——它继承了AOSP的所有基础能力比如应用框架、AMS/WMS这些核心服务然后额外增加了CarService这一整套汽车相关服务。CarService往下对接的是VHALVehicle Hardware Abstraction Layer车辆硬件抽象层通过VHAL去读写车辆的实时状态比如车速、档位、转向灯、电量、空调状态这些信号往上则给应用层提供Car API让开发者能拿到车辆数据。这就引出一个关键概念AOSP源码里其实内置了AAOS相关的代码。你下载的AOSP源码仓库里packages/services/Car/目录下的就是AAOS的核心实现。也就是说要学车载开发想绕过framework层基本是不可能的。热搜词里有学习android framework开发、有自学android automotiveos这俩其实是一件事必须一起学。1.2 系统开发与应用开发的分水岭车载工程师到底在写什么代码普通Android开发大多数时间是在写App业务逻辑调API、写UI、处理网络数据层级停留在Application Framework之上的应用层。车载Android开发的工作重心往下沉了一大截车厂或Tier1的岗位里有相当一部分工作是改framework。比如你要定制SystemUI的界面改状态栏、改通知中心、加一个车辆专属的快捷控制面板这都是在framework层改代码。还有一块工作是HAL层适配。车机的蓝牙模块、音频通道、摄像头用于行车记录或DMS驾驶员监测、GPS模块每家硬件供应商的实现都不一样你要写或者改HAL层的适配代码让上层能统一调用。更底层一些的岗位会涉及内核驱动开发。热搜词里那条android内核驱动ko对应的就是这类工作ko是内核模块的缩写车载硬件如果用的不是AOSP默认支持的芯片就得自己维护驱动模块的编译和加载。这就是为什么车载Android的招聘JD里动不动就写熟悉AOSP、熟悉HAL、熟悉Linux内核因为车载系统就是一个深度定制的Android发行版。你不是在系统上面写App你是在让系统本身能跑起来、能跟车配合好。1.3 车载场景特有的技术约束手机开发思维在这里会翻车车载开发有很多反直觉的约束举几个实际工作中天天遇到的明文禁止让驾驶员分心。Google在AAOS里有一套完整的驾驶注意力分散约束机制。应用想在驾驶过程中弹按钮、显文本必须走Car App Library提供的模板不能用普通的layout随便写。模板会强制限制文字数量、按钮大小、点击区域大小。硬件配置其实不高但要求极端稳定。车机的SoC往往比同期的旗舰手机落后一到两代但要求连续跑好几年不重启夏天车内温度七、八十度也要稳定运行内存管理出一点问题都可能造成死机或重启。热搜词里android内存这类问题在车载场景会被放大十倍。我见过因为一个App内存泄漏结果整车在高速上黑屏重启的案例这在手机端可能只是用户骂两句在车上就是安全隐患。系统的更新节奏完全不同。手机玩的是快速迭代一周一版beta车载系统涉及行车安全更新必须以稳定为最高优先级OTA升级要支持断点续传、回滚、AB分区无缝切换这些都不是普通App开发会面对的问题。电源和启动机制特殊。车机有ACC附件电源、ON、OFF多个状态系统不是简单地关机和开机而是从深度睡眠或休眠状态快速唤醒。这个唤醒对Android来说是个大课题——你怎么让一个手机上从来没有ACC off这种概念的Android在车上正确地休眠和唤醒。多用户、多屏、多场景。一辆车有主驾、副驾、后排乘客中控、仪表、副驾娱乐屏好几个屏幕同时工作每个屏幕可能有不同的权限和焦点策略。这些都是手机端完全没有的需求。2. 构建车载开发环境从工程准备到系统的编译与调试车载开发的环境搭建跟做普通App开发完全两码事。普通App开发开个Android Studio、配好SDK就能跑车载开发你得先把整个AOSP/AAOS源码拉下来编译出系统镜像跑起模拟器或刷到板子上。这里面的门道不少。2.1 Android Studio在车载开发中的正确用法不只是装SDKAndroid Studio在车载开发里的地位有点分裂。它依然是应用开发的利器但到了系统开发层面就只是个看代码的编辑器了。先说基础配置。确实要安装Android Studio而且建议用相对新的稳定版热搜词里那条android studio 2023.1.1.16 windows.exe对应的就是Windows下的安装包。Windows和macOS都能做App层开发但如果要编译AOSP源码打包系统镜像你几乎必然需要一个Linux环境推荐Ubuntu 20.04或22.04 LTS因为AOSP官方只支持在Linux和macOS上编译而且Windows上你连repo这个工具都不好用。实际项目中很多人的做法是Windows或Mac上装Android Studio写代码然后用一台Linux服务器或者本地虚拟机去编译源码。另外一个小建议很多人问Android Studio能不能设置成中文界面能在Settings - Plugins里装中文语言包就行但这纯粹是个人偏好。车载开发的核心代码、源码注释、社区讨论全是英文与其折腾中文界面不如把基础英文术语过一遍否则看AOSP源码会很难受。Android Studio在车载场景的真正价值在于调试App项目时看崩溃日志、分析ANR、看CPU/内存占用。调试AOSP里的App模块比如SystemUI、Settings、CarLauncher这些时可以用Android Studio直接打开对应模块的源码目录配合模拟器或真机做断点调试前提是你编译的镜像要带上debug符号。运行时性能分析工具比如CPU Profiler对车载应用的性能调优非常有用尤其是排查帧率问题、卡顿问题。2.2 从源码构建到系统镜像AOSP编译的完整链路车载开发绕不开的一件事是编译AOSP。即便你只是在framework层改一两行代码也要经历完整的构建链路才能看到效果。核心步骤大概是这样安装依赖OpenJDKAOSP不同分支对JDK版本要求还不一样、Python、git、curl等基础工具。安装repo工具并初始化代码仓库。因为AOSP代码量巨大、仓库多Google用repo来管理各个git仓库的版本同步。选分支。做车载一定要选带android前缀、带auto字样的分支或者是直接使用AAOS的专用模拟器镜像。AOSP上游有android12L-with-automotive这类分支。配置编译环境source build/envsetup.sh然后lunch选择目标产品。如果是跑模拟器一般选aosp_x86_64-userdebug或专门的车载模拟器配置比如aosp_car_x86_64-userdebug。编译镜像make -j$(nproc)。第一次编系统镜像在配置足够的机器上也要几个小时到十几个小时过程中会跑很多编译单元可以单独编译单个模块比如make systemui、make carlauncher。生成镜像后启动模拟器或者写到开发板。注意模拟器和实车的镜像配置差异很大后面单独讲。如果你要单独改framework里某个服务更高效的做法是改完该模块后单独编译它然后把编译产物push到已经启动的模拟器或板子里通过adb root、adb remount、adb sync来热更新不需要每次都编全量镜像。这是我给所有刚入行的同事的建议先用增量编译构建改代码-看效果的快速迭代循环大幅提升效率。2.3 模拟器与真车环境的差异哪些能练、哪些必须上板子AOSP提供了Automotive模拟器镜像Android Studio里也支持Vehicle相关的AVD配置这个模拟器本身是能提供基本车辆信号模拟的你用CarAppLibrary做个Demo在模拟器上可以跑起来看效果。但模拟器和真车环境的差距非常巨大主要体现在车辆信号的真实性。模拟器里的车速、电量、转向灯都是虚拟数据你没法验证底层VHAL和真实车辆总线数据之间的对接逻辑。蓝牙和WiFi行为。模拟器里蓝牙模拟非常有限很多配对场景根本没法复现。音频通道。车机的音频有媒体通道、导航通道、电话通道等多个逻辑通道模拟器很难模拟出这些通道的切换和混音行为。电源管理。ACC off后的休眠唤醒模拟器基本上测不了。多屏的物理拓扑。模拟器虽然能开多个display但仪表屏、HUD这种物理屏幕的分配关系和触控交互模拟器表现和真机完全是两码事。所以我的建议是模拟器负责验证应用逻辑、UI布局、框架服务代码硬件相关的验证一定要尽早找一套开发板比如高通8155/8295的参考板或者一些基于RK3588等芯片的国产开发板来跑。很多车载岗位的候选人在面试时都会提到我在模拟器上做过项目但实际招聘官会追问有没有在X86板子上调过蓝牙有没有调过真实CAN信号放在简历上的项目如果只停留在模拟器含金量会大打折扣。3. 应用层核心技能Car App Library、权限模型与多屏适配虽然车载开发的深度在系统层但应用层依然是进入这个领域最快的入口。AAOS的应用开发与手机端有非常明显的差异如果你只是把手机App搬上去大概率过不了CTS/GMS认证也过不了车厂的人机交互评审。3.1 Car App Library与Android Auto的区别同一个库两种用途Android提供了两个名字很像的库一个是androidx.car.appCar App Library一个是为Android Auto设计的androidx.car.app:app-auto模块。先说清楚你要开发运行在AAOS系统上的原生应用用的是androidx.car.app而要做手机上的Android Auto应用扩展用的是那个带app-auto的模块。Car App Library的核心设计思想是模板化。打个比方手机App的UI自由度高得像是自由写作你想怎么布局就怎么布局车载App的UI则像官方公文格式你必须在一个又一个固定模板里填内容。Google给了你CarAppService、Screen、Template这些核心类你可以选择的模板包括NavigationTemplate导航应用专用地图区域转向提示卡片。MapWithContentTemplate地图占用大部分区域旁边一小块内容面板。ListTemplate列表页用于设置、媒体列表。MessageTemplate消息或者提醒展示。GridTemplate宫格布局类似手机桌面。媒体应用还有MediaTemplate但更推荐使用MediaSession相关的标准API配合处理。为什么强制用模板因为模板从设计上就限制了文字数量、按键位置、可点击区域大小让驾驶员在驾驶过程中最多瞄几眼就能完成操作。你在车载应用里想出一个花哨的自定义UI基本都会被拒掉。所以做车载应用开发的第一课就是要学会克制学会接受在设计上没有自由这件事。3.2 车载权限模型与普通Android权限的差异谁给权限、谁有问题AAOS的权限模型在AOSP权限模型基础上做了扩展。普通手机上权限由用户授权弹个对话框用户点允许或拒绝车机上绝大多数权限是预授权的——应用安装时就会分配好权限而且普通的第三方应用拿不到对车辆硬件的访问权。具体来说AAOS里有一批android.car.permission.MANAGE_CAR_*之类的权限这些是交换车辆数据访问的权限第三方应用默认没有。即使你不是系统应用只要在系统镜像里预置成系统应用也要再经过明显的隐私评审流程因为车辆数据涉及驾驶安全和个人隐私。如果你的应用需要读车速、读里程、控制车窗一般要通过CarPropertyManager去访问而且权限必须被明确授予。比如访问VHAL里的VEHICLE_PROPERTY_INFO_VIN需要专门的权限而这个权限通常只授予系统应用。在面试中车载Android的权限模型与手机Android的差异是最常被问的问题但大多数候选人只能答出车机是自动授权很少有人提到预授权机制、系统签名权限、以及第三方应用对车辆数据访问的受限策略。把这些细节搞清楚会让面试官觉得你确实深入过这个领域。3.3 多屏、多Display与安全驾驶约束车机不是一台手机屏幕一辆车现在至少有四五块屏仪表屏、中控屏、副驾娱乐屏、HUD、后排屏。在Android体系里每块屏挂载的Android Display是不一样的屏幕的分辨率、密度、方向都可能不同。AAOS支持多Display可以在WMS里通过VirtualDisplay或系统Display来管理不同的屏幕区域但把哪块屏幕分配给哪个应用是由系统的DisplayManager策略决定的而且仪表屏一般不允许第三方应用随意获取。通常主驾驶侧的仪表屏是关键安全区只允许系统应用或经过特别认证的应用在上面绘制。而副驾娱乐屏可以用更丰富的UI不受到那么严格的驾驶分心约束。这块有个很关键的技术细节你的App要识别自己运行在哪块屏幕上不能简单假定只有一块屏。很多开发者在真车内测前根本没考虑过这个问题上了车以后UI被拉伸、焦点乱跳、软键盘弹在另一块屏幕上这些我都见过。多屏带来另一个经典问题焦点管理。车机上同一个时刻哪块屏幕接收按键事件、哪块屏幕有输入焦点是系统统一调度的应用层如果处理不当会出现明明在副驾屏点按钮结果中控屏跳了页面这种诡异行为。所以一定要提前了解AAOS的Focus管理和MultiDisplay布局策略而不是把手机端的单屏思维带进来。4. 连接与通信技术栈蓝牙协议栈、DLNA/镜像投屏与车内网络车载系统不是孤岛它要跟手机、车钥匙、路侧设施、云服务器通信。连接技术是车载开发里最容易被忽视、但实际又离不开的一环。特别是做车机互联、蓝牙钥匙、远程控车这些功能时你会频繁和这几类协议打交道。4.1 蓝牙在车载场景里的角色不只是打电话和放音乐车载蓝牙和手机蓝牙最大的区别是角色更加复杂。手机上你只是个Central中心设备去连接耳机、手表车载系统则常常要同时扮演Central和Peripheral两个角色。举个例子你要连手机放音乐时手机是被连方但你这个车机还要能被BLE车钥匙、蓝牙门禁等外设主动连接这时车机又是被连方。车载蓝牙里最常见的协议包括HFP免提电话协议车机通过它实现通话音频的转发涉及音频路由、麦克风增益、回声消除很容易踩坑。A2DP/AVRCP音乐播放和控制协议AVRCP的封面、进度条同步问题在AAOS里经常出现特别是不同手机品牌行为差异很大你在一台手机上调通换一台又崩了。热搜词里有android进度条相关的搜索搞过AVRCP的人应该都懂。BLE车钥匙、胎压监测、用户接近检测等。BLE在车载端要做保活和低功耗策略同时做多从机连接比普通BLE外设开发复杂得多。开发中常见的问题有几种连接不稳定多为蓝牙GATT MTU协商问题、反复配对弹窗、通话时音频路由切换失败。调这些问题时你的工具库里必须有btmon、hcidump这些底层抓包工具光看logcat是远远不够的。我记得有一次排查一个蓝牙连上但不出声的问题查了两天最后是A2DP协议栈里sink配置的channel mode不对很小一个配置但会让音频完全无声。4.2 DLNA、MirrorLink与手机互联老协议依然在车机上活着热搜词里有dlna接收端 android很多人可能觉得DLNA是老古董了但车载领域确实还在用它尤其是做媒体投屏的时候。DLNA基于UPnP协议核心逻辑是让手机端当媒体服务器DMS车机端当媒体渲染器DMR通过局域网把视频、音频内容流媒体传输到车机上播放。实际开发中常见的问题是DLNA设备发现不稳定、媒体格式不兼容导致黑屏或解码失败。这种问题一般需要抓UPnP的组播报文和流媒体的具体格式信息处理起来比较耗时。另外MirrorLink也是个被历史遗忘了但依然能在一些车型里见到的协议它是更早的手机投射方案现在市场份额很小但面试时提到我做过DLNA/MirrorLink投屏适配能体现你的通信协议功底。更主流的还是Android AutoGoogle的互联、CarPlay苹果的互联以及国内各家做的Carlife、HiCar。这些互联方案本质是把手机内容投射到车机里面设计到屏幕分辨率、HID事件转义、音频通道分配都是车载应用工程师经常要处理的场景。投屏调试时最讨厌的问题是卡顿和延迟这跟WiFi吞吐、解码头部的性能、动画帧率都有关系需要分层定位。4.3 车内网络与V2X的基本认识你写的代码会直接影响整车性能车载系统的通信不只对外对内也很复杂。车内的骨干网络通常不是WiFi/以太网而是CAN控制器局域网、LIN以及近几年的车载以太网BroadR-Reach单对绞线以太网。你的Android系统一般跑在座舱域的SoC上座舱域和车身域之间通过以太网/CAN网关通信。当你调用VHAL去读车速信号时数据的实际路径可能是CAN总线 - 网关控制器 - 以太网 - SoC上的VHAL - CarService - 你的应用。所以做车载开发的工程师一定要理解这个链路不然遇到应用读到的车速有500ms延迟这类问题你会以为是应用层代码写得慢实际上问题是网络栈的物理限制和数据打包节拍导致的。至于V2X车路协同虽然现在很多功能还在试点阶段但方向已经很明确V2X包括V2V车车通信、V2I车路通信、V2P车人通信、V2N车网通信底层依托DSRC或C-V2X技术。做车载应用开发时你至少要了解系统里和V2X消息体对接的API是什么形态以及这些消息如何通过Android框架层传递到应用层这样等真正做红绿灯倒计时、路口碰撞预警功能时你接手起来会快很多。5. Framework层实战HAL、驱动与系统定制到底在做什么前面反复提到framework和HAL这一章集中把这些东西拆开讲。车载Android开发高薪岗位的技术含量基本都集中在这一层。5.1 从AOSP到AAOSOEM定制究竟改了什么一个车厂的Android系统很少是直接用AOSP原版通常是在AOSP某版本基础上拉出AAOS分支再叠加车厂自己的SDK和皮肤。这种定制要动的地方非常多应用层定制车厂的桌面启动器CarLauncher、设置应用、系统状态栏一般都会重写。Framework层定制比如修改SystemUI的布局结构修改WindowManager的显示策略来适配多屏修改PackageManager的预装应用管理逻辑。服务层定制在CarService基础上新增车厂自己的车辆服务接口比如一键洗车模式驻车空调控制这些功能都要在服务层加逻辑。安全策略定制车厂的安全启动AVBAndroid Verified Boot配置、密钥管理、远程锁定策略都是系统级定制工作。Amazon的热搜词里有android系统定制这也确实是车载岗位招人的高频要求。如果你在面试中能讲清一个具体定制点比如我在SystemUI里加了一个车辆状态浮窗通过CarPropertyManager订阅了电量和里程显示在状态栏右上角这比空泛地说我熟悉framework有说服力得多。5.2 HAL抽象层和内核驱动ko硬件和系统之间的一座桥HALHardware Abstraction Layer硬件抽象层的作用是把上游Android框架层和底层硬件实现隔离开。上层只定义接口底层各家芯片厂商去做具体实现。车载Android涉及到的HAL模块非常多Vehicle HAL车辆属性读写车速、续航、车灯状态等这是AAOS最有特色的HAL几乎所有车辆功能都要调用它。Audio HAL车机音频路由、多声道、回声消除、降噪。车载的音频策略比手机复杂几个量级有媒体、导航、电话、警报多路混音逻辑。Bluetooth HAL负责蓝牙芯片直接的协议栈交互。EVS HAL外部视图系统环绕影像、行车记录这些和摄像头相关的功能。Sensors HAL车机自带的加速度计、陀螺仪用于判断车辆姿态比如倒车时自动翻转屏幕。再往下就是内核驱动。热搜词里android内核驱动ko提到的ko就是Linux内核模块。车载SoC的外设五花八门有些驱动是SoC厂商随BSPBoard Support Package提供的打包成ko文件在系统启动时加载。当你说这颗芯片要跑Android系统的时候你必须有一个从板级支持包到Linux内核的完整移植过程。调驱动时基本的套路是先看dmesg里驱动有没有被加载再看/sys/class、/proc这些文件系统节点有没有生成然后用logcat确认HAL层有没有正确访问到驱动节点。有不少问题最终定位到驱动加载失败而不是上层逻辑。5.3 OTA与系统更新车载的升级是安全绳模式不是赌博模式手机系统更新失败大不了砖个一天然后刷机车机系统更新失败车主可能要把车开回4S店严重时还涉及行车安全所以OTA设计的容错要求非常严格。Android上有两个重要的机制在车载场景被大量使用AB分区无缝更新系统镜像有两份你平时运行在A槽后台OTA在B槽写好写完以后切换启动槽位。这样即使新系统起不来还能回滚到旧槽位。这个设计在车机上是必须的不是可选项。启动控制新系统启动后要在一定时间内健康完成boot并向系统汇报否则引导加载器会判定启动失败自动回滚。做车载开发的系统工程师一定要把OTA升级流程做到公共组件里。比如升级过程中要处理车载特有的ACC off但系统不能立刻断电的情况——OTA可能还没下载完车辆已经熄火了电池电量也有风险。所以OTA任务要感知车辆电源状态、BSOC电池电量在电量不足时暂停下载在驻车状态下才允许安装。这套逻辑比手机上的升级流程复杂得多我也见过因为OTA过程中没处理好电源状态导致整车升级失败最后只能返厂处理的案例。6. 面试与职业路径从普通Android到车载开发的核心决策最后一章讲得实在一些车载Android开发岗位到底考什么以及不同背景的人该怎么规划学习路线。基于我这些年参与招聘和带团队的经验把这些信息整理给你。6.1 车载Android面试核心考点清单我总结过一张车载Android开发面试的高频考点表基本覆盖市面上大多数车载方向的岗位要求考察维度具体题目方向难度AAOS基础Android Automotive OS与Android Auto的区别、AOSP分支关系必考基础应用开发Car App Library的模板机制、与普通Activity UI的区别核心重点权限模型AAOS权限预授权、系统签名权限、第三方应用对车辆数据访问的限制常考多屏机制Display生命周期、焦点管理、屏幕分辨率适配高频Vehicle HALCarService和VHAL的工作原理、CarPropertyManager的用法高频编译与调试repo工具、AOSP同步、模块化编译、logcat/dmesg必考系统定制SystemUI改状态栏、PackageManager调整预装策略加分项连接通信蓝牙A2DP/HFP/BLE、DLNA投屏原理中频稳定性内存泄漏排查、ANR分析、系统压力测试加分项安全与OTAAB分区、回滚策略、电源状态感知加分项面试时只要能把其中任何两三项讲透比如我修改了CarService里某个vehicle property的处理逻辑外加我做过AAOS模拟器上的音频路由调优就足够给面试官留下深刻印象。怕的就是那种什么都看过、什么都说不上细节的候选人一深问就露馅。6.2 学习路线规划不同背景的人怎么入门不同背景的人进入车载Android的路径应该不一样如果你是安卓App开发出身优先补framework和系统编译知识。先学AOSP的源码结构、编译流程重点看systemui、packages/services/Car这些模块然后尝试给AAOS模拟器源码加一个功能。App开发经验能帮你快速理解上层逻辑但你一定要跳出写App的舒适区。如果你是嵌入式/驱动出身优先补Android应用开发和framework层知识。嵌入式工程师对串口、I2C、SPI、内核调度很熟但Android上层的权限、进程模型、Binder通信、消息循环往往不熟。你不需要成为一个应用高手但要能看懂App层的代码怎么调frameworkframework怎么调HAL。如果你是完全零基础先走传统Android学习路线把Java/Kotlin基础、Android四大组件、UI开发、多线程这些基础打牢然后按App层 - framework层 - HAL层的顺序逐步深入。直接上手AOSP源码会让你一头雾水因为浏览AOSP源码需要很扎实的Android功底。这里要提醒一个典型的误区很多人一上来就抱着一本《Android框架原理》啃结果看了几个月连Activity启动流程都还没弄明白。我的建议是带着问题去读源码。比如你工作中遇到了为什么车载应用启动时偶尔黑屏你就去查AMS的启动流程查WMS的窗口绘制一追到底这套路径比从第一章背到最后一章有效得多。热搜词里android studio用了一段时间后一直卡死android studio下载安装这类问题其实也能反映出新人困境——工具都没搞定就开始着急学框架顺序反了。先把基础环境弄顺再谈进阶。6.3 给从业者的几条实操建议分享几条在实际工作中总结出来的经验希望能让后来的人少走弯路一定要有动手项目。车载开发的门槛在于动手成本高因为不是谁家里都有车机板子。最低成本的替代方案是下载AOSP源码编译AAOS模拟器镜像自己写一个Car App Library应用跑起来再改一下SystemUI状态栏加一个车辆状态显示功能。这几步能让你简历上有东西可写。建立从上层往下层的排查思维。遇到问题先判断现象在哪一层界面卡顿先看应用层应用层没问题再查WMS再查SurfaceFlinger再查驱动。车载这种多层栈最忌讳的是乱抓一通最后浪费时间还不一定能定位到根因。多关注稳定性相关的内容。车载行业对稳定性的要求远高于对功能数量的要求。你如果能在简历上写分析过系统内存泄漏、处理过ANR问题、做过长时间压力测试比写我熟悉Android Studio使用有价值得多。学会看日志。logcat只是最基础的一层车载开发里经常要用到dmesg抓内核日志用serial port抓BootLoader日志用btmon抓蓝牙底层数据用Wireshark抓网络报文。这些工具不一定要精通但你至少要知道在什么场景下用哪个工具。关注Android版本演进。AOSP每个大版本对车载的支持都在增强比如多用户、多Display相关能力一直在迭代。保持持续的源码跟进意识是这个岗位的基本素养——因为很多问题你会发现在某个特定版本里是个bug在下一个版本里Google已经修掉了。最后说点题外话。车载Android的行业热度已经持续了好几年并且随着智能座舱渗透率提升需求还在增长。但从普通Android转行过来的人如果只是停留在应用层竞争力其实有限。真正吃香的是那些既能写App又懂framework还能在必要时候下探到HAL和驱动层去定位问题的全能型工程师。这篇文章不可能让你一夜之间成为车载开发专家但它把该学什么、该怎么学、面试考什么、实际工作内容是什么都串了一遍。照这个思路去落地半年后你可以看到自己的明显进步。
返回列表