AOSP10 替换系统launcher

本文实现将原生的launcher 移除,替换成我们自己写的launcher。

分以下几个步骤:

一、新建一个自己的launcher项目。

1.直接使用android studio 新建一个项目。

2.修改AndroidManifest.xml

XML 复制代码
  <application
        android:persistent="true"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AngeLauncher"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:theme="@style/Theme.AngeLauncher">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
              <!--launcher相关-->
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.MONKEY"/>
                <category android:name="android.intent.category.LAUNCHER_APP" />

            </intent-filter>
        </activity>
    </application>

2.生成系统的签名并添加到新建的launcher 项目中

接着我们需要制作系统签名,这里使用 keytool-importkeypair 签名工具。

keytool-importkeypair clone 到本地,并将其中的 keytool-importkeypair 文件添加到 PATH 路径。

接着进入系统源码下的 build/target/product/security 路径,接着执行:

bash 复制代码
keytool-importkeypair -k ./platform.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

k 表示要生成的 keystore 文件的名字,这里命名为 platform.keystore -p 表示要生成的 keystore 的密码,这里是 android -pk8 表示要导入的 platform.pk8 文件 -cert 表示要导入的platform.x509.pem -alias 表示给生成的 platform.keystore 取一个别名,这是命名为 platform

接着,把生成的签名文件 platform.keystore 拷贝到 Android Studio 项目的 app 目录下,然后在 app/build.gradle 中添加签名的配置信息:

Groovy 复制代码
 signingConfigs {
        sign {
            storeFile file('platform.keystore')
            storePassword 'android'
            keyAlias = 'platform'
            keyPassword 'android'
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.sign
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

3.编译生成apk。

二、添加product

1.在device 目录下添加ange/lqa 文件夹,并新建文件 AndroidProducts.mk

Groovy 复制代码
PRODUCT_MAKEFILES := \
    $(LOCAL_DIR)/lqa.mk

COMMON_LUNCH_CHOICES := \
    lqa-eng \
    lqa-userdebug \
    lqa-user \

2.拷贝 build/target/board/generic_x86_64/BoardConfig.mk 到ange/lqa 文件夹下

3.拷贝 build/target/product/aosp_x86_64.mk并重命名为lqa.mk到ange/lqa 文件夹下,并作修改如下:

Groovy 复制代码
#
# Copyright 2013 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.
#

PRODUCT_USE_DYNAMIC_PARTITIONS := true

# The system image of aosp_x86_64-userdebug is a GSI for the devices with:
# - x86 64 bits user space
# - 64 bits binder interface
# - system-as-root
# - VNDK enforcement
# - compatible property override enabled

# This is a build configuration for a full-featured build of the
# Open-Source part of the tree. It's geared toward a US-centric
# build quite specifically for the emulator, and might not be
# entirely appropriate to inherit from for on-device configurations.

# GSI for system/product
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_common.mk)

# Emulator for vendor
$(call inherit-product-if-exists, device/generic/goldfish/x86_64-vendor.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/emulator_vendor.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/board/generic_x86_64/device.mk)

# Enable mainline checking for excat this product name
#ifeq (aosp_x86_64,$(TARGET_PRODUCT))
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
#endif

PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST += \
    root/init.zygote32_64.rc \
    root/init.zygote64_32.rc \

# Copy different zygote settings for vendor.img to select by setting property
# ro.zygote=zygote64_32 or ro.zygote=zygote32_64:
#   1. 64-bit primary, 32-bit secondary OR
#   2. 32-bit primary, 64-bit secondary
# init.zygote64_32.rc is in the core_64_bit.mk below
PRODUCT_COPY_FILES += \
    system/core/rootdir/init.zygote32_64.rc:root/init.zygote32_64.rc

PRODUCT_NAME := lqa
PRODUCT_DEVICE := lqa
PRODUCT_BRAND := ange
PRODUCT_MODEL := Android sdk build for x86_64 lqa

PRODUCT_PACKAGES +=AngeLauncher	

三、在aosp10/packages/apps/ 下创建文件夹AngeLauncher ,把编译好的apkf复制到该目录 ,命名为AngeLauncher.apk,并新增Android.mk 文件

Groovy 复制代码
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := AngeLauncher
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_DEX_PREOPT := false
USE_PLATFORM_LAUNCHER3 := false
LOCAL_PRODUCT_MODULE := true
LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 Launcher3Go Launcher3QuickStep
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

四、编译&运行

bash 复制代码
source build/envsetup.sh
lunch lqa-eng
make -j4
emulator

启动后即可看到launcher已替换。

相关推荐
jonyleek3 天前
JVS开源框架:工作流引擎代理中心的设计挑战与实现方案
java·gitee·开源·github·软件需求
Sheljoee.4 天前
【GitHub】基础入门步骤
开发语言·人工智能·python·单片机·gitee·github·嵌入式实时数据库
影阴6 天前
如何将本地项目上传至Gitee仓库(详细教程)
gitee
loveLifeLoveCoding7 天前
gitee 使用 webhoot 触发 Jenkins 自动构建
运维·gitee·jenkins
子蛟7 天前
Android Studio 安装过程
android·gitee·android studio
南鸢1.08 天前
IntelliJ IDEA 中上传项目到 Gitee 的完整指南
java·git·gitee·idea
一个很帅的帅哥9 天前
Mac在Typora配置PicGo图床,以github为例
macos·gitee·github·typora·mac·图床
謬熙9 天前
GitHub、Gitee、GitLab介绍
gitee·gitlab·github
..过云雨14 天前
gitee建立/取消关联仓库
gitee
寰梦15 天前
上传Gitee仓库流程图
gitee·流程图