Android AOSP定制去掉Google搜索栏

news2025/1/14 0:57:16

Android AOSP定制去掉Google搜索栏

在这里插入图片描述

1.前言:

​ 最近接触了Android系统定制的需求,感觉非常有意思,之前做过Launcher和串口,也自己安装过虚拟机,不过几年没用Linux系统了有点不习惯,Linux命令也不熟悉,刚开始连安装打开AndroidStudio都不会,这里如果不熟悉的小伙伴可以参考以下博客,毕竟Android源码编译都是在Linux环境下进行的,所以熟悉Linux命令还是非常有必要的,此篇作为AOSP定制开发的开篇遇到了很多问题,这里记录一下,废话不多说,直接上代码.

2.简介:

AOSP 概览

Android 是适用于各种不同规格设备的操作系统。任何人都可以通过 Android 开源项目 (AOSP) 查看 Android 的文档和源代码。您可以使用 AOSP 为自己的设备创建自定义 Android OS 变体。

AOSP 的设计可确保不存在一个集中瓶颈,即没有任何行业参与者可一手限制或控制其他参与者的创新。因此,AOSP 是一款功能完善且达到生产质量的开发者产品,其源代码可以开放自定义和移植。

AOSP(Android Open Source Project)是Android的开放源代码项目,为开发者提供了详细的源代码和工具,使得我们能够深入了解Android系统的运作原理。阅读AOSP源码并熟悉其目录结构是了解Android系统内部实现和架构的关键。

3.文章参考:

这里推荐豪哥的FrameWork教程,非常详细和实用,最开始也是跟着豪哥的博客学习了不少知识.

https://juejin.cn/post/7207374216127103033

https://juejin.cn/post/7125309442341961765

https://babyyn.github.io/Sources/AOSP/build.html

4.隐藏Google搜索栏

修改变量配置 QSB_ON_FIRST_SCREEN = false

  • 源码路径:packages\apps\Launcher3\src\com\android\launcher3\config\BaseFlags.java

  • 源码

    abstract class BaseFlags {
    
        BaseFlags() {}
    
        public static final boolean IS_DOGFOOD_BUILD = false;
        public static final String AUTHORITY = "com.android.launcher3.settings".intern();
    
        // When enabled allows to use any point on the fast scrollbar to start dragging.
        public static final boolean LAUNCHER3_DIRECT_SCROLL = true;
        // When enabled the promise icon is visible in all apps while installation an app.
        public static final boolean LAUNCHER3_PROMISE_APPS_IN_ALL_APPS = false;
        // When enabled allows use of spring motions on the icons.
        public static final boolean LAUNCHER3_SPRING_ICONS = true;
    
        // Feature flag to enable moving the QSB on the 0th screen of the workspace.
        public static final boolean QSB_ON_FIRST_SCREEN = true;
        // When enabled the all-apps icon is not added to the hotseat.
        public static final boolean NO_ALL_APPS_ICON = true;
    
        // When true, custom widgets are loaded using CustomWidgetParser.
        public static final boolean ENABLE_CUSTOM_WIDGETS = false;
    
        // Features to control Launcher3Go behavior
        public static final boolean GO_DISABLE_WIDGETS = false;
    
        // When enabled shows a work profile tab in all apps
        public static final boolean ALL_APPS_TABS_ENABLED = true;
    
        // When true, overview shows screenshots in the orientation they were taken rather than
        // trying to make them fit the orientation the device is in.
        public static final boolean OVERVIEW_USE_SCREENSHOT_ORIENTATION = true;
    }
    

在这里插入图片描述

  • 源码修改

    /*
     * Copyright (C) 2017 The Android Open Source Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package com.android.launcher3.config;
    
    /**
     * Defines a set of flags used to control various launcher behaviors.
     *
     * All the flags should be defined here with appropriate default values. To override a value,
     * redefine it in {@link FeatureFlags}.
     *
     * This class is kept package-private to prevent direct access.
     */
    abstract class BaseFlags {
    
        BaseFlags() {}
    
        public static final boolean IS_DOGFOOD_BUILD = false;
        public static final String AUTHORITY = "com.android.launcher3.settings".intern();
    
        // When enabled allows to use any point on the fast scrollbar to start dragging.
        public static final boolean LAUNCHER3_DIRECT_SCROLL = true;
        // When enabled the promise icon is visible in all apps while installation an app.
        public static final boolean LAUNCHER3_PROMISE_APPS_IN_ALL_APPS = false;
        // When enabled allows use of spring motions on the icons.
        public static final boolean LAUNCHER3_SPRING_ICONS = true;
    
        // Feature flag to enable moving the QSB on the 0th screen of the workspace.
        public static final boolean QSB_ON_FIRST_SCREEN = false;
        // When enabled the all-apps icon is not added to the hotseat.
        public static final boolean NO_ALL_APPS_ICON = true;
    
        // When true, custom widgets are loaded using CustomWidgetParser.
        public static final boolean ENABLE_CUSTOM_WIDGETS = false;
    
        // Features to control Launcher3Go behavior
        public static final boolean GO_DISABLE_WIDGETS = false;
    
        // When enabled shows a work profile tab in all apps
        public static final boolean ALL_APPS_TABS_ENABLED = true;
    
        // When true, overview shows screenshots in the orientation they were taken rather than
        // trying to make them fit the orientation the device is in.
        public static final boolean OVERVIEW_USE_SCREENSHOT_ORIENTATION = true;
    }
    

5.注释xml代码

  • 源码路径:/packages/apps/Launcher3/res/layout/search_container_workspace.xml

  • 源码

    在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<!--
     Copyright (C) 2016 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<com.android.launcher3.qsb.QsbContainerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:id="@id/search_container_workspace"
        android:padding="0dp" >

    <fragment
        android:name="com.android.launcher3.qsb.QsbContainerView$QsbFragment"
        android:layout_width="match_parent"
        android:tag="qsb_view"
        android:layout_height="match_parent"/>
</com.android.launcher3.qsb.QsbContainerView>
  • 源码修改

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<!--
     Copyright (C) 2016 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<com.android.launcher3.qsb.QsbContainerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:id="@id/search_container_workspace"
        android:padding="0dp" >

    <!--<fragment
        android:name="com.android.launcher3.qsb.QsbContainerView$QsbFragment"
        android:layout_width="match_parent"
        android:tag="qsb_view"
        android:layout_height="match_parent"/>-->
</com.android.launcher3.qsb.QsbContainerView>

6.注释资源加载代码:

  • 源码位置: /packages/apps/Launcher3/src/com/android/launcher3/Workspace.java

  • 源码

     /**
      * Initializes and binds the first page
      * @param qsb an existing qsb to recycle or null.
      */
     public void bindAndInitFirstWorkspaceScreen(View qsb) {
         if (!FeatureFlags.QSB_ON_FIRST_SCREEN) {
             return;
         }
         // Add the first page
         CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, 0);
         // Always add a QSB on the first screen.
         if (qsb == null) {
             // In transposed layout, we add the QSB in the Grid. As workspace does not touch the
             // edges, we do not need a full width QSB.
             qsb = LayoutInflater.from(getContext())
                     .inflate(R.layout.search_container_workspace,firstPage, false);
         }
    
        CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1);
         lp.canReorder = false;
         if (!firstPage.addViewToCellLayout(qsb, 0, R.id.search_container_workspace, lp, true)) {
             Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout");
         }
     }
    

在这里插入图片描述

源码修改:

 public void bindAndInitFirstWorkspaceScreen(View qsb) {
     if (!FeatureFlags.QSB_ON_FIRST_SCREEN) {
         return;
     }
     // Add the first page
     CellLayout firstPage = insertNewWorkspaceScreen(Workspace.FIRST_SCREEN_ID, 0);
     // Always add a QSB on the first screen.
     if (qsb == null) {
         // In transposed layout, we add the QSB in the Grid. As workspace does not touch the
         // edges, we do not need a full width QSB.
         qsb = LayoutInflater.from(getContext())
                 .inflate(R.layout.search_container_workspace,firstPage, false);
     }

/*     CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1);
     lp.canReorder = false;
     if (!firstPage.addViewToCellLayout(qsb, 0, R.id.search_container_workspace, lp, true)) {
         Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout");
     }*/
 }

在这里插入图片描述

7.实现的效果如下:

从下图可以看出我们需要的效果已经实现,已经满足我们的需求.

在这里插入图片描述

8.文章总结:

以上就是今天的内容,AndroidAOSP开发去掉Google搜索栏,如果熟悉AOSP源码的同学肯定会认为很简单,但是我是最近才刚接触的,过程中遇到了很多,比如Linux环境搭建,Linux命令的使用,AOSP源码的编译和下载,AOSP定制和App开发的有很大区别,必须去看源码,要不然你不知道从哪里下手,看了源码之后,熟悉了流程在去开发得心应手,后面会一步步讲解系统保活、系统深度定制、系统签名
等等。阅读源码是一个很好的习惯,分析源码更是一个好习惯,我们不仅要学会怎么使用,更要学会如何更好地阅读和分析源码,今天的代码先到这里,下一篇我们讲解AOSP如何定制gms。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1810781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Elasticsearch] ES更新问题踩坑记录

drop table if exists tmp.test_create_table; create table if not exists tmp.test_create_table( id int, name string ) stored as parquet; 问题排查 查看ES数据 发现ES创建表的状态没有正常更新 yn 还是0 查看日志 查看日志, 截取部分关键信息: ReceiverControl…

kaggle竞赛实战9——模型融合

有三种方法&#xff0c; 第一种&#xff1a;均值融合&#xff0c;代码如下 data pd.read_csv(\ result/submission_randomforest.csv\ ) data[randomforest] data[target].values temp pd.read_csv(\ result/submission_lightgbm.csv\ ) …

独立游戏之路 -- 看看你是否适合做独立游戏?

独立游戏系列文章介绍 -- 分析你是否适合做独立游戏&#xff1f; 前言一&#xff0c;专栏介绍1.1 订阅须知1.2 关于作者1.3 文章累积 二&#xff0c; 为什么要做独立游戏&#xff1f;2.1 明确目标2.2 几个能力 三&#xff0c;你能独立到什么程度&#xff1f;3.1 设计3.2 美术3.…

IP纯净度对跨境电商有影响吗?

当我们谈论代理IP时&#xff0c;通常会提到一个重要概念&#xff0c;那就是“IP纯净度”。 IP纯净度是指代理IP服务中所提供的IP地址的质量、干净程度和安全性&#xff0c;纯净度高的IP地址通常具备低恶意软件攻击的风险、良好的访问效果、稳定性和速度以及隐私保护等特点。在…

牛客题目线段树

主要是操作三&#xff0c;怎么计算 那么只需要维护区间和和区间平方和即可&#xff0c;1/2用逆元 多个标记注意标记之间有没有影响&#xff0c;mod其实很简单的&#xff0c;但是我标记没处理好一直wa,mod乱搞一下&#xff0c;我mod很丑 #include<iostream> #include<…

根据阿里文档编写【springAI+通义千问】出现的 “Can not find api-key” 异常

昨天晚上照着阿里的文档开始了我的首次【springAI 通义千问】之旅&#xff0c;不料刚开始就被狠狠地搞了一下&#xff0c;主要原因是文档有误导致程序无法按着预期运行。 按着文档一步步配置好以后&#xff0c;启动后报错信息如下&#xff1a; 照着文档&#xff08;如下图&a…

脉动圆形加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>脉动圆形加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

AI大模型:未来5~10年的技术革命与机遇

引言 在当今科技飞速发展的时代&#xff0c;AI大模型无疑成为了一个热门话题。它不仅仅是一个技术名词&#xff0c;更是未来5&#xff5e;10年内不可避免的技术革命。AI大模型以其强大的数据处理能力、深度学习能力以及广泛的应用前景&#xff0c;正在改变我们的生活和工作方式…

人大京仓数据库关闭大小写敏感

人大京仓数据库关闭大小写敏感 1、先删除data&#xff08;Kingbase\ES\V8\&#xff09;文件夹下的所有文件夹 2、接着找到initdb.exe所在位置&#xff0c;我的位置是在这里D:\Kingbase\ES\V8\Server\bin&#xff0c;然后输入cmd,运行一下 initdb -E UTF-8 -D C:\Kingbase\ES…

秋招突击——6/10——复习{(树形DP)树的最长路径、}——新作{电话号码的字母组合}

文章目录 引言复习树形DP——树的最长路径思路分析参考思路求图的最长的直径的通用方法证明 树形DP分析方法问题 参考代码使用一维数组模拟邻接表存储树形结构或者稀疏图 新作电话号码的组合思路分析参考实现 总结 引言 中间面试了两天&#xff0c;去上海呆了一天&#xff0c;…

1992-2012年美国西海岸的海面高度异常数据集

Gridded Altimeter Fields with Enhanced Coastal Coverage 具有增强海岸覆盖范围的网格化测高场 简介 具有增强的海岸覆盖范围的网格化高度计场数据产品包含美国西海岸的海面高度异常&#xff08;SSHA 或 SLA&#xff09;以及北纬 35.25 度-48.5 度和东经 227.75 度-248.5 …

Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻、一件代发及免 费小程序商城搭建

1. 涉及平台 平台管理、商家端&#xff08;pc端、手机端&#xff09;、买家平台&#xff08;h5/公众号、小程序、app端&#xff08;ios/android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 spring cloud、spring boot、mybatis、redis 3. 前端框架…

PHP短链接短网址生成源码

下载地址&#xff1a;PHP短链接短网址生成源码 V3.0(11月14日更新) 1.更换用户中心模板 2.首页可以更换模板&#xff08;暂时只有俩套&#xff09; 3.增加首页背景更换 4.logo可以在后台设置 5.更换后台模板 6.优化访问统计功能 7.删除了几个没什么用的东西 8.数据表已支持全…

ARM32开发--串口库封装(初级)

知不足而奋进望远山而前行 目录 文章目录 前言 目标 内容 开发流程 文件目录创建 分组创建 接口定义 完整代码 总结 前言 在嵌入式软件开发中&#xff0c;封装抽取流程和抽取封装策略是非常重要的技术&#xff0c;能够提高代码的复用性和可维护性。本文将介绍如何在文…

操作系统安全:Windows系统安全配置,Windows安全基线检查加固

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

使用 C# 学习面向对象编程:第 4 部分

C# 构造函数 第 1 部分仅介绍了类构造函数的基础知识。 在本课中&#xff0c;我们将详细讨论各种类型的构造函数。 属性类型 默认构造函数构造函数重载私有构造函数构造函数链静态构造函数析构函数 请注意构造函数的一些基本概念&#xff0c;并确保你的理解非常清楚&#x…

Spring Boot 分片上传、断点续传、大文件上传、秒传,应有尽有

文件上传是一个老生常谈的话题了&#xff0c;在文件相对比较小的情况下&#xff0c;可以直接把文件转化为字节流上传到服务器&#xff0c;但在文件比较大的情况下&#xff0c;用普通的方式进行上传&#xff0c;这可不是一个好的办法&#xff0c;毕竟很少有人会忍受&#xff0c;…

怎么隐藏文件夹?4个方法保护文件!

“我在使用电脑时&#xff0c;想将一个比较重要的文件夹隐藏&#xff0c;但是不知道应该怎么操作&#xff0c;请大家给我出出主意。” 在数字化时代&#xff0c;我们的电脑和手机中存储着大量个人信息和敏感数据。其中&#xff0c;一些文件夹可能包含了不愿被他人轻易发现的私密…

【全篇】C语言从入门到入土

【全篇】C语言从入门到入土 文章目录 【全篇】C语言从入门到入土第一章 前言如何去学习&#xff0c;学习方法论 第二章 初识1.代码编译工具2.c程序的基础框架3.数据的表现形式变量1.要先定义后使用&#xff08;变量名的定义是由自己决定的&#xff0c;一般倾向于顾文生义&#…

Bankless:为什么 AI 需要 Crypto 的技术?

原文标题&#xff1a;《Why AI Needs Crypto’s Values》 撰文&#xff1a;Arjun Chand&#xff0c;Bankless 编译&#xff1a;Chris&#xff0c;Techub News 原文来自香港Web3媒体&#xff1a;Techub News 人工智能革命的梦想一直是一把双刃剑。 释放人工智能的潜力可以解…