AOSP14——Launcher3定制 移除桌面谷歌搜索栏

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

原生aosp系统Launacher桌面默认会显示一个谷歌的搜索栏。
因为谷歌服务国内不可用,大部分国内定制桌面首先都要移除这个搜索栏。

下面我们来看看如何移除这个搜索栏。

首先,要知道这个搜索栏在布局中的位置以及具体的实现类。

将设备连接到pc上后,通过Android Studio的Layout Inspector查看布局,找到这个搜索栏,如下图所示:
在这里插入图片描述
搜索栏是自定义View,QsbContainerView,最终是被添加到Workspace中的。
搜索栏所在的布局文件为search_container_workspace

这个最终是在Workspace中inflate的这个布局,我们找到这个方法bindAndInitFirstWorkspaceScreen方法。
这里,首先有个条件判断,不符合直接就return了,这里正常情况因为QSB_ON_FIRST_SCREEN是true,所以一定会走到后面去添加搜索栏的步骤。所以,在这里,可以通过改变这个Flag直接return。
或者在后面不添加布局,还有一种修改方法就是直接将布局里面的内容移除。

   public void bindAndInitFirstWorkspaceScreen() {
        if ((!FeatureFlags.QSB_ON_FIRST_SCREEN
                || !mLauncher.getIsFirstPagePinnedItemEnabled())
                || shouldShowFirstPageWidget()) {
            mFirstPagePinnedItem = null;
            return;
        }

        // Add the first page
        CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, getChildCount());
        if (mFirstPagePinnedItem == null) {
            // In transposed layout, we add the first page pinned widget in the Grid.
            // As workspace does not touch the edges, we do not need a full
            // width first page pinned item.
			// 搜索栏布局
            mFirstPagePinnedItem = LayoutInflater.from(getContext())
                    .inflate(R.layout.search_container_workspace, firstPage, false);
        }

        int cellHSpan = mLauncher.getDeviceProfile().inv.numSearchContainerColumns;
        CellLayoutLayoutParams lp = new CellLayoutLayoutParams(0, 0, cellHSpan, 1);
        lp.canReorder = false;
        if (!firstPage.addViewToCellLayout(
                mFirstPagePinnedItem, 0, R.id.search_container_workspace, lp, true)) {
            Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout");
            mFirstPagePinnedItem = null;
        }
    }

综合上面的信息,我们有三种移除搜索栏的方法。

  • 修改布局文件
  • 修改Workspace的添加代码
  • 修改标志位FeatureFlag

好的,移除 Workspace 顶部的搜索栏 (QsbContainerView 或其容器 search_container_workspace) 是一个常见的定制需求。在 Launcher3 中,这个搜索栏通常不是直接写在主布局 launcher.xml 里的,而是作为一个特殊的“固定项”(Pinned Item) 动态添加到 Workspace 的第一个屏幕(Screen 0)。

以下是几种移除它的方法,按推荐程度排序:

使用功能标志 (FeatureFlags) (推荐)

这是最推荐且最符合 Launcher3 设计的方式。Launcher3 使用 FeatureFlags 来控制各种可选功能。

  • 查找相关标志:

    • FeatureFlags.QSB_ON_FIRST_SCREEN: 这个标志看起来最直接相关。它的作用就是控制是否在 Workspace 的第一个屏幕上显示 QSB。
    • FeatureFlags.ENABLE_SMARTSPACE_REMOVAL: 这个标志可能更广泛,但也可能影响 QSB 的显示,因为它似乎与移除第一屏的智能空间(Smartspace,通常包含 QSB 或 At a Glance)有关。
  • 修改方法:

    1. 找到定义这些标志的文件。通常在类似 featureflags/src/com/android/launcher3/config/FeatureFlags.java 或类似路径下。
    2. 找到 QSB_ON_FIRST_SCREEN 的定义,通常是一个 BooleanFlag。将其默认值修改为 false。例如:
      // 修改前:
      // public static final BooleanFlag QSB_ON_FIRST_SCREEN = new BooleanFlag("QSB_ON_FIRST_SCREEN", true);
      // 修改后:
      public static final BooleanFlag QSB_ON_FIRST_SCREEN = new BooleanFlag("QSB_ON_FIRST_SCREEN", false);
      
    3. 如果 QSB_ON_FIRST_SCREEN 不起作用或你想采用更彻底的方式(可能移除 Smartspace 相关逻辑),可以研究 ENABLE_SMARTSPACE_REMOVAL 并将其默认值设为 true。但请注意这可能会有更广泛的影响。
    4. 重新编译 Launcher3。
  • 优点: 这是最干净、侵入性最小的方法,符合官方的配置方式,便于后续升级和维护。

  • 代码依据:Workspace.javabindAndInitFirstWorkspaceScreen() 方法中,有明确的逻辑检查 FeatureFlags.QSB_ON_FIRST_SCREENshouldShowFirstPageWidget() (可能受 ENABLE_SMARTSPACE_REMOVAL 影响)。如果这些条件不允许显示 QSB,则 mFirstPagePinnedItem 会被设为 null,或者 bindAndInitFirstWorkspaceScreen 可能根本不被调用。

修改布局文件 (Layout Modification)

你可以通过修改或覆盖(使用资源叠加层 Resource Overlay)相关的布局文件来移除搜索栏。

  • 查找相关布局:

    • 根据 Workspace.java 中的 bindAndInitFirstWorkspaceScreen() 代码,它会加载 R.layout.search_container_workspace 这个布局。
  • 修改方法:

    1. 找到 res/layout/search_container_workspace.xml 文件。
    2. 方法一 (清空): 将其内容清空,只保留一个空的根布局(例如 FrameLayout),或者设置根布局的 android:visibility="gone"
    3. 方法二 (覆盖): 在你的定制项目的 res/layout 目录下创建一个同名文件 search_container_workspace.xml,并提供一个空的或隐藏的布局作为覆盖。这是更推荐的修改布局的方式。
    4. 重新编译 Launcher3。
  • 优点: 比较直观,直接移除了视图。

  • 缺点: 不如 FeatureFlags 灵活,如果 Launcher3 未来改变了加载 QSB 的方式或布局文件名,可能需要重新修改。

修改 Java 代码 (Code Modification - 不推荐)

直接修改 Workspace.java 的代码来阻止添加搜索栏。

  • 修改方法:

    1. 找到 Workspace.java 中的 bindAndInitFirstWorkspaceScreen() 方法。
    2. 直接注释掉或删除添加 mFirstPagePinnedItemfirstPage 的代码块。
    3. 或者找到调用 bindAndInitFirstWorkspaceScreen() 的地方(例如在 setupViews() 中),根据你的需要条件性地阻止调用它(例如总是阻止)。
    4. 重新编译 Launcher3。
  • 优点: 绝对有效。

  • 缺点: 这是侵入性最强的方式,会增加后续合并官方 Launcher3 更新的难度和工作量,通常不推荐这样做。

总结:

首选方法是使用 FeatureFlags.QSB_ON_FIRST_SCREEN = new BooleanFlag("QSB_ON_FIRST_SCREEN", false);。这是最标准、最不容易产生副作用且最易于维护的方式。如果这个标志不起作用,再考虑检查 ENABLE_SMARTSPACE_REMOVAL 或使用布局覆盖的方法。应尽量避免直接修改核心 Java 代码。

最终修改效果如下:

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>我们正在处理用户关于在Android 14 AOSP中编译Launcher3模块的问题。 根据用户需求,我们需要指导用户如何编译Launcher3模块。同时,根据系统指令,我们需要使用正确的LaTeX格式,用中文回答,并生成相关问题。 参考之前的引用,我们有一些关于AOSP编译的步骤,但具体到Launcher3模块,我们需要调整。 步骤通常包括: 1. 初始化构建环境(source build/envsetup.sh) 2. 选择目标设备(lunch) 3. 编译特定模块(make 模块名) 对于Launcher3模块,模块名可能是"Launcher3"或类似名称。在Android 14中,Launcher3可能被命名为"Launcher3QuickStep"或类似,但通常模块名可以在对应模块的Android.mk或Android.bp中找到。 然而,在AOSP中,Launcher3的模块名可能是"Launcher3",但为了准确,我们可以通过查看模块目录下的Android.bp文件来确定。通常,Launcher3的路径在:packages/apps/Launcher3。 在Android.bp文件中,我们会找到模块定义,例如: ``` android_app { name: "Launcher3", ... } ``` 因此,模块名就是"Launcher3"。 但是,在Android 10之后,Google引入了主屏幕的多个变体,例如Launcher3QuickStep(用于手势导航)。在Android 14中,可能默认的Launcher是QuickStep版本的。因此,用户可能需要编译的是Launcher3QuickStep模块。 为了确保正确,我们可以建议用户同时编译两个模块(如果存在)或者根据目标设备选择。 另一种方法是使用`m`命令来编译模块,例如: ``` m Launcher3 ``` 或者 ``` m Launcher3QuickStep ``` 另外,如果用户需要将编译后的Launcher推送到设备上,可以使用adb push,或者使用make命令的安装选项(如果设备已连接,则使用`make Launcher3`会将其安装到设备上,前提是设备已连接且具有相同的构建类型)。 但是,用户可能只是编译模块,然后手动推送到设备。 步骤总结: 1. 设置环境变量 2. 选择目标(lunch) 3. 编译模块 4. 推送APK到设备(如果设备已连接,可以使用`adb install -r`或者直接push到系统目录并重启) 注意:由于Launcher3是系统应用,通常需要将其推送到系统分区,这需要设备有root权限或者使用模拟器(emulator)。 如果用户是在模拟器上测试,可以直接编译并运行模拟器(使用`emulator`命令),但编译模块后,需要将生成的APK安装到系统分区。在AOSP编译中,通常编译整个系统镜像并重新刷机会更简单,但单独编译模块可以节省时间。 对于系统应用,我们可以使用`adb root`和`adb remount`来重新挂载系统分区为可写,然后使用`adb push`将APK推送到相应目录(例如/system/priv-app/Launcher3或类似目录)。 但是,在Android 14中,系统分区可能默认是只读的,并且需要重新挂载。如果设备支持,可以使用`adb remount`,否则可能需要通过重新刷入系统镜像。 因此,我们给出两种方式: 方式一:重新编译整个系统镜像并刷机(适用于需要彻底更换Launcher的情况,或者无法单独推送的情况) 方式二:单独编译模块并推送到设备(需要设备支持remount,或者有root权限) 由于用户明确要求编译模块,我们重点放在方式二。 具体步骤: 1. 进入AOSP根目录,初始化构建环境: ```bash source build/envsetup.sh ``` 2. 选择目标设备(例如,选择模拟器或设备对应的构建目标): ```bash lunch ``` 然后选择对应的编号(例如,aosp_arm-eng) 3. 编译Launcher3模块(假设模块名为Launcher3QuickStep,因为Android 14中默认的Launcher可能是这个): ```bash m Launcher3QuickStep ``` 或者,如果用户想编译传统的Launcher3(如果存在): ```bash m Launcher3 ``` 4. 编译完成后,生成的APK文件位于: ``` $OUT/system/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk ``` 或者 ``` $OUT/system/priv-app/Launcher3/Launcher3.apk ``` 其中,`$OUT`是AOSP的输出目录,通常是`out/target/product/<device_name>/`。 5. 连接设备(确保adb已连接,并且设备已开启调试模式): ```bash adb devices ``` 6. 重新挂载系统分区(需要设备支持remount): ```bash adb root adb remount ``` 7. 推送APK到设备的系统目录(注意,目录名可能和模块名一致): ```bash adb push $OUT/system/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk /system/priv-app/Launcher3QuickStep/ ``` 或者,如果设备上已有该目录,可以直接覆盖。如果目录结构不存在,可能需要先创建目录(但通常系统应用目录已经存在)。 8. 重启设备: ```bash adb reboot ``` 注意:如果设备不支持remount,或者没有root权限,则无法推送系统应用。这种情况下,用户可能需要编译整个系统镜像(使用`make`命令)并刷机。 另外,如果用户只是想在模拟器上测试,可以启动模拟器(在编译后,使用`emulator`命令),然后按照上述步骤推送。 但是,在模拟器上,通常可以remount,因为模拟器默认是eng版本,具有root权限。 另外,用户可能想要调试Launcher3,那么可以将模块导入到Android Studio中。可以参考引用[1]中的idegen.sh生成IDE配置文件,然后导入。 生成IDE配置文件的步骤(可选): 在AOSP根目录下执行: ```bash source build/envsetup.sh lunch [选择同样的目标] development/tools/idegen/idegen.sh ``` 然后会生成android.ipr和android.iml,用Android Studio打开android.ipr。 但是,注意导入整个AOSP工程可能非常庞大,用户也可以只导入Launcher3模块。不过,Launcher3模块依赖于其他模块,所以导入整个工程可能更合适。 由于用户的问题是如何编译,我们重点放在编译步骤。 现在,根据系统指令,我们需要在回答中自然地添加引用。我们之前的引用[1]是关于idegen.sh生成工程文件的,引用[2]是关于CarLauncher的编译调试。虽然引用[2]是关于CarLauncher的,但步骤类似,可以借鉴。 因此,我们可以在回答中引用[1]关于生成IDE配置的部分(如果用户需要导入IDE),引用[2]关于编译和push的部分(因为步骤类似)。 但是,用户的问题只要求编译,所以我们先回答编译步骤。 最后,生成相关问题。 回答结构: 1. 解释Launcher3模块的编译步骤 2. 详细步骤(包括环境设置、编译命令、推送方法) 3. 注意事项(比如模块名、设备支持等) 4. 可选:导入IDE进行调试 生成的相关问题: 1. 如何确定Launcher3Android 14中的模块名? 2. 如果设备不支持remount,如何单独更新系统应用? 3. 如何将Launcher3模块导入Android Studio进行调试? 4. 在编译Launcher3时遇到错误如何解决? 5. 如何为Launcher3添加自定义修改? 注意:在回答中,行内数学表达式要用$...$,独立公式用$$...$$,但本问题中可能没有数学表达式,所以可以忽略。 开始回答:</think>### 在 Android 14 AOSP 中编译 Launcher3 模块的步骤 #### 1. **初始化构建环境** ```bash # 进入AOSP根目录 cd aosp # 初始化构建环境 source build/envsetup.sh ``` #### 2. **选择目标设备** ```bash # 选择目标设备(如模拟器) lunch aosp_x86_64-eng # 或根据实际设备选择 ``` #### 3. **编译 Launcher3 模块** ```bash # 编译 Launcher3 主模块 m Launcher3 # 编译快速步骤模块(Android 14 默认桌面) m Launcher3QuickStep ``` - **模块说明**: - `Launcher3`:基础桌面模块 - `Launcher3QuickStep`:Android 10+ 默认桌面(集成手势导航)[^1] #### 4. **查找生成的 APK** 编译完成后,APK 位于: ```bash # 主模块路径 out/target/product/<device>/system/priv-app/Launcher3/Launcher3.apk # 快速步骤模块路径 out/target/product/<device>/system/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk ``` #### 5. **推送到设备** ```bash # 重新挂载系统分区(需root) adb root adb remount # 推送 APK(示例为 Launcher3QuickStep) adb push out/target/product/<device>/system/priv-app/Launcher3QuickStep/Launcher3QuickStep.apk /system/priv-app/Launcher3QuickStep/ # 重启设备 adb reboot ``` #### 6. **验证结果** 设备重启后,新桌面将自动生效。通过以下命令检查: ```bash adb shell dumpsys activity activities | grep mResumedActivity # 应显示 com.android.launcher3 ``` ### 关键注意事项 1. **模块依赖**: - Launcher3 依赖 `libjpeg`、`libprotobuf` 等库,首次编译需先构建依赖项 - 建议先执行完整编译 `m` 确保依赖完整[^1] 2. **版本匹配**: - Android 14桌面模块名为 `Launcher3QuickStep` - 旧版本(Android 9-13)可能使用 `Launcher3` 或 `Launcher2` 3. **调试建议**: - 使用 `eng` 构建类型(`lunch xxx-eng`)获取调试符号 - 通过 `adb logcat | grep Launcher` 过滤日志 4. **常见问题**: - **编译失败**:检查 `packages/apps/Launcher3/Android.bp` 文件语法 - **推送失败**:确保设备使用 `userdebug` 或 `eng` 版本 - **桌面未生效**:执行 `adb shell cmd package set-home-activity com.android.launcher3/com.android.launcher3.Launcher` ### 导入 Android Studio 调试(可选) ```bash # 生成 IDE 配置文件 development/tools/idegen/idegen.sh # 用 Android Studio 打开 android.ipr ``` 在项目结构中定位到 `packages/apps/Launcher3` 目录即可调试[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值