将 AOSP 的预安装软件包条带化的最优雅的方式是什么?

jea*_*and 6 android package android-source

我正在尝试逐步将 AOSP 从其默认应用程序中剥离出来。但我想知道我要应用的方法是否正确并且是最有效的有效的

在研究了这样做的方法之后,我采用了以下方法:(示例应用程序 - “package_name”)

1. Pick particular app and find out its "LOCAL_PACKAGE_NAME"
2. Use "envsetup.sh" provided command "mgrep package_name"
3. Look at the output to determine where package_name is mentioned
4. Remove lines of code containing package_name from makefiles
Run Code Online (Sandbox Code Playgroud)

我也偶然发现了这个解决方案:

您可以添加一个新模块,一个存根,而不是修改 AOSP 中许多文件夹中的一堆 .mk 文件,并使用 LOCAL_OVERRIDES_PACKAGES 在其 Android.mk 中禁用模块,而不是修改许多文件夹中 AOSP 中的一堆 .mk 文件。如果某个模块仍然出现在目标中,您可能需要向 LOCAL_OVERRIDES_PACKAGES 添加另一个通过 LOCAL_REQUIRED_MODULES 添加不需要的包的模块。

但遗憾的是我还不知道如何构建一个新的“模块,一个存根”,所以我现在还不能应用这种方法。

我可以采取任何步骤来确保从我的构建中完全删除特定应用程序而不损害任何内容。你认为什么最优雅如果有的话,什么(文献/文档/网站)对我熟悉对 AOSP 代码进行“临时”更改(如上述案例)有用?

如果这很重要,我现在想删除的内容是:计算器;日历; 相机; 钟; 联系人;文件;画廊; 消息传递;音乐; 电话; 搜索; 网页视图

预先感谢您的回复!

Sim*_*mpl 2

删除包

理想情况下,您应该更新设备配置以根本不包含这些软件包。

.mk您的目录中可能有一个device/类似于以下内容的文件:

# Common product definition.
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_x86_64.mk)

# Your device extensions.
$(call inherit-product, device/<company>/<device>/device.mk)

PRODUCT_NAME := my_x86_64
PRODUCT_DEVICE := x86_64
PRODUCT_BRAND := Android
PRODUCT_MODEL := My x86_64 Android Product
Run Code Online (Sandbox Code Playgroud)

所有默认包均已通过通用产品定义间接添加aosp_x86_64。您可以切换到列表中没有计算器、日历、相机等的应用程序PRODUCT_PACKAGES,例如$(SRC_TARGET_DIR)/product/core_minimal.mk


更换包

如果您出于某种原因无法更改设备配置,则可以使用浅层包覆盖这些包。

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := CalculatorOverride
LOCAL_OVERRIDES_PACKAGES := ExactCalculator
LOCAL_SDK_VERSION := current

include $(BUILD_PACKAGE)
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml

# Common product definition.
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_x86_64.mk)

# Your device extensions.
$(call inherit-product, device/<company>/<device>/device.mk)

PRODUCT_NAME := my_x86_64
PRODUCT_DEVICE := x86_64
PRODUCT_BRAND := Android
PRODUCT_MODEL := My x86_64 Android Product
Run Code Online (Sandbox Code Playgroud)

您必须将包添加到PRODUCT_PACKAGES设备配置的列表中。如果您之前已经启动过设备,则计算器应用程序已经安装。/data在这种情况下请清除分区。

该解决方案的缺陷是您并没有真正删除应用程序,而是用其他无法运行的应用程序替换它们。


临时黑客

如果您不关心在 AOSP 存储库中进行临时更改,则测试删除这些应用程序后会发生什么情况的最快方法是更改​​ build/target/product/core.mk中的列表。至少此列表可能是您的设备配置当前正在使用的列表。

如果您遵循第一种方法,更改已安装应用程序的模块定义,您将遇到与更改 AOSP 存储库相同的问题,只是在更多地方。


您最好的信息来源可能是source.android.com。有一些书,但我还没有看到一本包含了 Android 随 Treble 引入的深刻变化。