【问题标题】:What is the most elegant way of striping AOSP of its pre-installed packages?剥离 AOSP 的预安装包的最优雅方式是什么?
【发布时间】:2019-08-07 10:39:35
【问题描述】:

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

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

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

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

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

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

提前感谢您的回复!

【问题讨论】:

    标签: android package android-source


    【解决方案1】:

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

    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/ 的情况下覆盖模块的最干净的方法

    【讨论】:

      【解决方案2】:

      删除包

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

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

      # 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 的深刻变化。

      【讨论】:

      • 非常感谢,这非常具有描述性,我现在有材料可以使用!
      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 2011-10-14
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多