文章目录
- Android 快速搜索栏(Quick Search Bar)与 -1 屏幕
- —— 面向 OEM 合作伙伴的 Android 16 集成指南
- 简介(Introduction)
- [1] 底部 QSB 放置(Bottom QSB Placement)
- [2] 显示或隐藏 QSB(Show or Hide the QSB)
- [3] 微件配置活动(Widget configuration activity)
- [4] -1 屏幕(-1 Screen)
- 集成流程(Integration procedure)
- (1) 合并 Launcher3 QSB 代码变更(Merge a Launcher3 QSB code change)
- (2) 更新 GMS 包以合并 SearchLauncher 代码补丁(Update the GMS bundle to merge a SearchLauncher code patch)
- (3) 为底部 QSB 放置添加功能标志(Add a feature flag for the bottom QSB placement)
- (4) 构建与测试(Building and testing)
- 支持选择屏幕(Choice Screen)功能
- (1) AGSA QSB
- (2) 当第三方 DSE 应用被删除时自动隐藏 QSB(Auto-hiding QSB when the 3P DSE app is deleted)
Android 快速搜索栏(Quick Search Bar)与 -1 屏幕
—— 面向 OEM 合作伙伴的 Android 16 集成指南
简介(Introduction)
AOSP Launcher3 应用实现了 Android 快速搜索栏(Quick Search Bar,QSB)功能。该功能可以容纳来自某个在线搜索引擎(Online Search Engine,OSE)应用(例如 Google 应用或 Microsoft Bing 搜索应用)的搜索微件(widget),并将其放置在主屏幕上,使用户能够快速访问该 OSE 应用的搜索功能。
本文档提供了详细的技术指南,说明如何使用 GMS 包中包含的示例启动器实现——SearchLauncherQuickStep应用(Android Go 设备上为SearchLauncherQuickStepGo)。该实现将 AOSP Launcher3 应用与 Google 应用(AGSA)或 Google Go 应用集成在一起。它支持以下主要功能:
[1] 底部 QSB 放置(Bottom QSB Placement)
将 QSB 放置在主屏幕底部的热座(hotseat)中。请注意,开箱即用地将搜索微件放置在启动器工作区(workspace)区域中(即"浮动搜索微件"实现)也是可行的,但本文档不涵盖该内容。
图:浮动搜索微件(Floating search widget)、启动器工作区(Launcher workspace)、应用 Dock 或热座(Application Dock or Hotseat)、位于热座中的 QSB(QSB in the hotseat)
[2] 显示或隐藏 QSB(Show or Hide the QSB)
如果用户长按 QSB,会弹出一个包含"隐藏搜索框(Hide search box)"按钮的弹出菜单。点按此按钮会将 QSB 从热座中移除。当 QSB 被隐藏后,用户可以长按工作区中的任意空白区域,调出启动器设置菜单,其中包含"显示搜索框(Show search box)"按钮。点按该按钮即可将 QSB 恢复到热座中。请注意,在 QSB 被隐藏期间,底层的搜索微件实际上会被删除。
[3] 微件配置活动(Widget configuration activity)
如果 QSB 中托管的搜索微件支持配置活动(configuration activity),用户可以通过长按 QSB 来访问它。请注意,Google 搜索微件的配置活动并非在所有 OEM 设备上默认启用。如果您想在自己的设备上启用它,请联系您的 Google 对接人。
左图:长按 QSB 会弹出包含配置活动入口的弹出菜单。右图:Google 搜索微件的配置活动。
[4] -1 屏幕(-1 Screen)
Google Discover功能默认集成在 -1 屏幕中。启动器设置页面中包含一个开关,用于显示或隐藏 -1 屏幕。此功能同样由面向 Android Go 设备的 SearchLauncherQuickStepGo 应用支持。
左图:Google Discover 页面已集成在 -1 屏幕中。右图:启动器设置菜单中提供了开启或关闭 -1 屏幕的开关。
集成流程(Integration procedure)
(1) 合并 Launcher3 QSB 代码变更(Merge a Launcher3 QSB code change)
Android 16 中原生(vanilla)的 AOSP Launcher3 默认将 QSB 放置在默认主屏幕(Default Home Screen,DHS)的顶部。您需要使用Android16-Launcher3-Bottom-QSB.patch补丁文件,将其从 DHS 顶部移除,并将一个 QSB 放置在热座中应用图标行的下方。请注意,此补丁是基于AOSP Launcher3 的 Android 16 初始版本创建的。因此,如果您使用的是不同版本的 AOSP Launcher3,或您自己的定制启动器实现,则应将所提供补丁中的所有更改移植到您的代码库中。
假设补丁文件已下载到~/Downloads文件夹,请使用以下命令应用已下载的补丁文件:
$cdpackages/apps/Launcher3# 为 QSB 创建一个本地分支$ repo start qsb.# 应用已下载的补丁$ patch-p1--no-backup-if-mismatch<~/Downloads/Android16-Launcher3-Bottom-QSB.patch patchingfilequickstep/src/com/android/launcher3/taskbar/TaskbarView.java patchingfileres/drawable/ic_chevron_end.xml patchingfileres/drawable/ic_chevron_start.xml patchingfileres/layout/search_container_hotseat.xml patchingfileres/layout/search_container_taskbar.xml patchingfileres/layout/search_container_workspace.xml patchingfileres/values/dimens.xml patchingfileres/values/strings.xml patchingfilesrc/com/android/launcher3/DeviceProfile.java patchingfilesrc/com/android/launcher3/Hotseat.java patchingfilesrc/com/android/launcher3/InvariantDeviceProfile.java patchingfilesrc/com/android/launcher3/LauncherPrefs.kt patchingfilesrc/com/android/launcher3/qsb/QsbContainerView.java patchingfilesrc/com/android/launcher3/qsb/QsbWidgetHostView.java patchingfilesrc/com/android/launcher3/views/OptionsPopupView.java此补丁中的底部 QSB 实现符合所有适用的 QSB GMS 要求(QSB GMS Requirements),包括以下各项:
- [GMSX-6.5-001.002]QSB 中的
AppWidgetHost须将OPTION_APPWIDGET_HOST_CATEGORY设置为WIDGET_CATEGORY_SEARCHBOX。 - [GMSX-6.5-002.001]和[GMSX-6.5-002.002]热座行为(Hotseat behavior)。
- [GMSX-6.5-003.001]~[GMSX-6.5-003.005](请注意,[GMSX-6.5-003.006]仅对 Android 17 设备有要求)。
- [GMSX-6.5-004.002]此补丁支持 AGSA QSB 实现。
- [GMSX-6.5-004.003]当用户选择的第三方(3P)DSE 应用被删除时,QSB 的回退(fallback)行为。
(2) 更新 GMS 包以合并 SearchLauncher 代码补丁(Update the GMS bundle to merge a SearchLauncher code patch)
SearchLauncher 是一段示例源代码,包含在 GMS 包中,用于演示如何将 AGSA 与您的启动器应用集成。我们对 GMS 包中的 SearchLauncher 代码及其他模块做了以下更改。这些更改将包含在未来的 GMS 包版本中:
- 新增了一个面向 Android Go 设备的构建目标(SearchLauncherQuickStepGo)。
- 更新了 LauncherClient 库二进制文件,以支持 Android Go 设备的 -1 屏幕功能。
- 移除了 SearchLauncher 中过时的代码。
- 新增了 4x6 工作区网格格式的示例主屏幕布局。
- 更新了 GmsSampleIntegration overlay 模块,以使用 4x6 网格。
请下载gms-oem-B-16-202605-with-QSB-patch.zip文件,该文件将 SearchLauncher 代码补丁添加到2026 年 5 月的 GMS 包版本中。在构建您的系统镜像时,请使用下载的 GMS 包。
(3) 为底部 QSB 放置添加功能标志(Add a feature flag for the bottom QSB placement)
QSB GMS 要求[GMSX-6.5-001.001]规定:如果您的构建支持底部 QSB 放置,则必须声明一个 PackageManager 功能标志com.google.android.feature.qsb_at_bottom。只需向构建的系统镜像中添加一个如下所示的 sysconfig xml 文件即可轻松完成。GMS 包在partner_gms/etc/sysconfig/gms_express.xml文件中提供了类似标志的良好示例。
<?xml version="1.0" encoding="utf-8"?><config><featurename="com.google.android.feature.qsb_at_bottom"/></config>(4) 构建与测试(Building and testing)
完成 (1) 和 (2) 之后,如果您的设备是直接以包含 SearchLauncherQuickStep 或 SearchLauncherQuickStepGo 目标构建的,则只需重新构建系统镜像即可。否则,您可能需要手动修改构建脚本,将当前的启动器应用目标替换为 SearchLauncherQuickStep 或 SearchLauncherQuickStepGo。
支持选择屏幕(Choice Screen)功能
(1) AGSA QSB
如果您的设备面向某个选择屏幕(Choice Screen)地区(例如欧洲经济区 EEA 或日本),则 QSB 中的搜索微件必须更换为在选择屏幕中被选定的默认搜索引擎(Default Search Engine,DSE)应用的微件。在 Android 16 设备上,此行为由 Google 应用(AGSA)中一个特定的微件提供程序(widget provider)组件支持。因此,根据 GMS 要求[GMSX-6.5-003.002],必须使用以下微件提供程序组件:
- 非 Go 设备:Google 应用中的
com.google.android.googlequicksearchbox.SearchWidgetProvider。 - Go 设备:Google Go 应用中的
com.google.android.apps.searchlite.widget.SearchLiteWidgetProvider。
以下截图展示了 DSE 选择屏幕功能如何与底部 QSB 实现协同工作:
图注(从左至右):在开机向导(SUW)的选择屏幕中选择默认 OSE 应用;在所选 OSE 应用下载期间,Google 搜索微件会发生变化;在所选 OSE 应用安装完成后,QSB 中的搜索微件开始支持已安装的 OSE 应用;当用户点按 QSB 时,会启动该 OSE 应用。
(2) 当第三方 DSE 应用被删除时自动隐藏 QSB(Auto-hiding QSB when the 3P DSE app is deleted)
如果用户选择的第三方(3P)DSE 应用被删除,QSB 中的搜索微件将无法再支持该 DSE 应用。当发生这种情况时,QSB GMS 要求[GMSX-6.5-004.003]规定:为了获得最佳用户体验,必须自动隐藏 QSB。
本文档中的 Android 16 AOSP Launcher3 补丁按如下方式支持此要求:
- 当用户选择的第三方 DSE 应用被删除时,AGSA 会从 Play 商店应用接收此事件。
- 随后,AGSA 会禁用其微件提供程序组件。
QsbContainerView.java文件中的QsbWidgetHost类通过onAppWidgetRemoved()回调方法接收此事件。- 最后,在移除与该微件关联的所有视图后,QSB 会变为禁用状态。
如果用户在此状态下重新启用 QSB,则 QSB 实现必须在WIDGET_CATEGORY_SEARCHBOX类别中选择任何可用的搜索微件提供程序,而无需询问用户。
如果对你有帮助,就一键三连呗(关注+点赞+收藏),我会持续更新更多干货~~