Launcher3体系化之路

VX Blog:Android部落格

👋 欢迎来到Launcher 3

背景

车企对于桌面的排版布局好像没有手机那般复杂,但也有一定的需求。部分场景下,要考虑的上下文比手机要多一些,比如有如下的一些场景:

  1. 手车互联。HiCar,CarPlay,AndroidAuto,这三个应用,需要桌面对应做一些定制来应付认证,连接状态不同对应不同的图标状态;
  2. 音源切换。在手机端,不同音源类型只需要系统做统一处理即可,但车机端,一旦发声,则需要申请音频焦点,由系统做音频仲裁,然后再决定是否发声;
  3. 在2的前提下,车企智能座舱的桌面,底部一般有个音乐卡片,需要对接不同的音源,比如QQ音乐,网易云,蓝牙音乐,本地电台,USB音乐等,他们一播放,媒体卡片切换成对应的音源及相关内容,这一块较复杂。
  4. Widget的重视。智能座舱总想在这个点做出一些比较花哨的功能,比如常见的长按编辑卡片,出现卡片编辑库,添加库,两者之间可以让卡片互相拖动添加或删除。在此基础上还要有动画实现排挤卡片以及卡片列表显隐动画。
  5. 应用列表。这个功能点本来很简单,但座舱的产品经理总是拿手机做对比,比如手机的应用列表可以拖动换页,拖动排挤很自然还有动画,拖动时Widget与应用icon一起可以联动,分页滑动很丝滑等。
  6. 以上能力的持久化。

现实

车企一般将智能座舱应用软件相关的开发外包给供应商,当前也确实有专业的公司,将这一块做的非常好。

但这类公司没有产品定义权,不同汽车主机厂对于同一个应用的需求差异巨大,那么同一个应用就无法做成体系化来构建基础设施。

常见的场景是应用开发人员总是赶交付节点,总是在处理各种无法理清的依赖,总是对一些复杂的模块无法深入理解,总是吃力不讨好,总是应付屎山一般的代码,恶性循环下,跑路,去应付下一个屎山。

解决方案

Launcher是Android系统中比较复杂的模块,复杂在应用列表中有应用icon,Widget,快捷方式,文件夹,弹窗,动画效果,PMS,AMS等。因为主导过座舱Launcher架构设计,核心模块开发, 主机厂一般仅需要应用列表,多任务,Widget(卡片),壁纸这几个。

比较奇葩的是,壁纸一般在SystemUI中,但因为座舱外包给供应商,有可能存在Launcher和SystemUI不是同一家公司开发的情况,就存在壁纸的实现有可能集成在Launcher中。然而不仅仅是壁纸这一个功能,有可能应用列表还需要SystemUI来实现,别问怎么会有这样的事情,因为i have experienced 🙈。

这些问题的出现是大环境下车企压缩成本求生存求利润,掌控产品定义争取白嫖供应商,多处赛马择优录取,层层传递,到底层程序员,工时博弈与压缩,复杂功能模块迎来送往,总得有一个冤大头接下,于是怪诞之事变得平常。

总而言之,搞出一套方法论来应付总是可以。如果把Launcher3中应用列表,Widget列表,持久化分开作为不同的module,也就是将Workspace,CellLayout,DragLayer等复杂的类屏蔽,上层仅需要将他们排列组合即可应付这种复杂多变的交付需求。所以就有如下几个步骤去实现:

  • Launcher3模块化-应用列表
  • Launcher3模块化-Widget列表
  • Launcher3模块化-持久化

Launcher3架构

这里仅关心应用列表和弹窗,最近任务暂时列为todo.

所以弹窗和Widget,数据库持久化作为定制需求较大的功能,成为目标:

目标将在后续文章中逐步拆解并实现。

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui