在之前的Android车载应用开发与分析(1) - Android Automotive概述与编译中了解了如何下载以及编译面向车载IVI的Android系统,一切顺利的话,运行模拟器,等待启动动画播放完毕后,我们所能看到的第一个APP就是车载android的桌面,而这就是本篇文章的重点 - CarLauncher。
本篇文章以解析Android 11 源码中CarLauncher为主。为了便于阅读源码,现将CarLauncher的源码整理成可以导入Android Studio的结构,源码地址:https://github.com/linux-link/CarLauncher。由于CarLauncher对于源码存在依赖,该项目不能直接运行,引入jar依赖的方式也不完全正确,仅供阅读使用。
本篇文章中的功能以及源码分析基于android-11.0.0_r43,CarLauncher源码位于 packages/apps/Car/Launcher
Launcher 与 CarLauncher
Launcher是安卓系统中的桌面启动器,安卓系统的桌面UI统称为Launcher。Launcher是安卓系统中的主要程序组件之一,安卓系统中如果没有Launcher就无法启动安卓桌面,Launcher出错的时候,安卓系统会出现“进程 com.android.launcher 意外停止”的提示窗口。这时需要重新启动Launcher。
来自《百度百科 - launcher》
Launcher是android系统的桌面,是用户接触到的第一个带有界面的APP。它本质上就是一个系统级APP,和普通的APP一样,它界面也是在Activity上绘制出来的。
虽然Launcher也是一个APP,但是它涉及到的技术点却比一般的APP要多。CarLauncher作为IVI系统的桌面,需要显示系统中所有用户可用app的入口,显示最近用户使用的APP,同时还需要支持在桌面上动态显示如地图、音乐在内各个APP内部的信息,在桌面显示地图并与之进行简单的交互。地图开发的工作量极大,Launcher显然不可能引入地图的SDK再开发一个地图应用,那么如何在不扩大工作量的前提下动态的显示地图就成了CarLauncher的一个技术难点(该内容涉及的知识点多且杂,还没整理好=_=||就放到之后再介绍吧)。
CarLauncher 功能分析
原生的Carlaunher代码并不复杂,主要是协同SystemUI完成以下两个功能。
- 显示 可以快捷操作的 『首页』

- 显示 所有APP入口的 『桌面』

需要注意的是,只有红框中的内容才属于CarLauncher的内容,红框之外的属于SystemUI的内容。虽然SystemUI在下方的NaviBar有6个按钮,但是只有点击首页和App桌面才会进入CarLauncher,点击其它按钮都会进入其它APP,所以都不在本篇文章的分析范围。
CarLauncher 源码分析
CarLauncher的源码结构如下:

Android.dp
CarLauncher的android.bp相对比较简单,定义了CarLauncher的源码结构,和依赖的类库。如果你对android.bp完全不了解,可以先看一下 Android.bp入门教程 学习一下基础的语法,再来回过头来看CarLauncher的android.bp相信会容易理解很多。
android_app {
name: "CarLauncher",
srcs: ["src/**/*.java"],
resource_dirs: ["res"],
// 允许使用系统的hide api
platform_apis: true,
required: ["privapp_whitelist_com.android.car.carlauncher"],
// 签名类型 : platform
certificate: "platform",
// 设定apk安装路径为priv-app
privileged: true,
// 覆盖其它类型的Launcher
overrides: [
"Launcher2",
"Launcher3",
"Launcher3QuickStep",
],
optimize: {
enabled: false,
},
dex_preopt: {
enabled: false,
},
// 引入静态库
static_libs: [
"androidx-constraintlayout_constraintlayout-solver",
"androidx-constraintlayout_constraintlayout",
"androidx.lifecycle_lifecycle-extensions",
"car-media-common",
"car-ui-lib",
],
libs: ["android.car"],
product_variables: {
pdk: {
enabled: false,
},
},
}
上述Android.bp中我们需要注意一个属性overrides,它表示覆盖的意思。在系统编译时Launcher2、Launcher3和Launcher3QuickStep都会被CarLauncher取代,前面三个Launcher是手机系统的桌面,车载系统中会用CarLauncher这个定制新的桌面取代掉手机系统桌面。同样的,如果我们不想使用系统中自带的CarLauncher,那么也需要在overrides中覆盖掉CarLauncher。在自主开发的车载Androi

本文主要解析Android11中CarLauncher的源码,它是车载Android系统的桌面应用。CarLauncher协同SystemUI完成显示首页和桌面功能,通过`Android.bp`和`AndroidManifest.xml`配置。文章详细介绍了如何显示所有APP入口以及近期使用的APP,并探讨了相关的关键代码和权限需求。
最低0.47元/天 解锁文章
6220

被折叠的 条评论
为什么被折叠?



