5

我正在尝试逐渐将 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

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

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

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

我是否可以采取任何步骤来确保从我的构建中完全删除特定应用程序而不会损害任何东西。如果有这个特定任务,您认为最优雅的解决方案是什么?什么(文献/文档/网站)对我熟悉像上述案例一样对 AOSP 代码进行“临时表面”更改会有用?

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

提前感谢您的回复!

4

2 回答 2

2

您可以使用假模块覆盖不需要的模块。

1、定义一个假模块并覆盖不需要的模块

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

UNWANTED_OVERRIDE_PACKAGES := \
   watchhome \
   all_your_unwanted_pacakge \
   each_pacakge_one_line
LOCAL_MODULE := override_packages
LOCAL_MODULE_TAGS := optional
PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(UNWANTED_OVERRIDE_PACKAGES))
include $(BUILD_PHONY_PACKAGE)

https://gist.github.com/auxor/6e363e56eb1af430bfee8fe01916e4df

2、在你的 device.mk 中包含 phony 模块

PRODUCT_PACKAGES += override_packages

这是在不修改 build/target/ 的情况下覆盖模块的最干净的方法

于 2019-08-07T02:39:35.813 回答
1

删除包

理想情况下,您将更新您的设备配置以完全不包含这些软件包。

您的目录中可能有一个类似于此的.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

所有默认包都间接地由通用产品定义添加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)

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.calculator_override">
    <application/>
</manifest>

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

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


临时黑客

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

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


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

于 2019-08-02T07:57:29.823 回答