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,数据库持久化作为定制需求较大的功能,成为目标:

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

相关推荐
飞猿_SIR26 分钟前
基于海思Hi3798MV200Android7.0聊聊HDMI色深模式和电视HDR
android·嵌入式硬件·音视频
come112341 小时前
ptyhon 基础语法学习(对比php)
android·学习
ClassOps1 小时前
Android 12 SplashScreen启动屏
android·kotlin
一直向钱1 小时前
android 增强版 RecyclerView
android
sun0077001 小时前
网络配置config.xml的android.mk解析
android·xml
Digitally3 小时前
如何将照片从Mac传输到安卓设备
android·macos
教程分享大师3 小时前
当贝安卓9.0_创维E900S_e910V10C_3798mv310处理器线刷烧录包可救砖带adb功能
android·adb
2501_916008895 小时前
iOS 不上架怎么安装?多种应用分发方式解析,ipa 文件安装、企业签名、Ad Hoc 与 TestFlight 实战经验
android·macos·ios·小程序·uni-app·cocoa·iphone
百锦再5 小时前
从 .NET 到 Java 的转型指南:详细学习路线与实践建议
android·java·前端·数据库·学习·.net·数据库架构