应用裁剪
在系统编译的时候会编译很多应用module,内置的带源码应用,apk应用,系统debug应用等
默认源码编译出来有很多并不需要的应用,这些应用绝大部分都是通过
PRODUCT_PACKAGES += xxx
PRODUCT_PACKAGES_DEBUG += xxx
PRODUCT_PACKAGES_TESTS += xxx
加入编译的,而且这些PRODUCT_PACKAGES 又分散到很多的mk文件里添加
比如某个系统应用(Testxx)的编译加载,一般在某个mk文件会有 PRODUCT_PACKAGES +=Testxx
如果要去掉的话,就修改mk文件,然后注释该PRODUCT_PACKAGES +=Testxx
但是如果要去除的应用多的话这样做就很麻烦了,需要一个个mk文件去改,下面推荐一种方式:
Android10之前使用:
build/core/main.mk
# For the rest we add both
product_MODULES += $(call get-32-bit-modules, $(modules_rest))
product_MODULES += $(modules_rest)
-
+
+ product_sub_MODULES := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEL_PACKAGES)
+ product_MODULES := $(filter-out $(product_sub_MODULES), $(product_MODULES))
+
$(call expand-required-modules,product_MODULES,$(product_MODULES))
product_FILES := $(call module-installed-files, $(product_MODULES))
build/core/product.mk
_product_var_list := \
PRODUCT_PACKAGES_ENG \
PRODUCT_PACKAGES_TESTS \
PRODUCT_DEVICE \
+ PRODUCT_DEL_PACKAGES \
PRODUCT_MANUFACTURER \
PRODUCT_BRAND \
PRODUCT_PROPERTY_OVERRIDES \
对应的的device.mk添加
PRODUCT_DEL_PACKAGES +=xxx
Android10之后使用:
build/make/core/main.mk
define product-installed-files
$(eval ### Filter out the overridden packages and executables before doing expansion) \
$(eval _pif_overrides := $(call module-overrides,$(_pif_modules))) \
$(eval _pif_modules := $(filter-out $(_pif_overrides), $(_pif_modules))) \
+ $(eval _pif_modules := $(filter-out $(TARGET_REMOVE_PACKAGES), $(_pif_modules))) \
$(eval ### Resolve the :32 :64 module name) \
$(eval _pif_modules := $(sort $(call resolve-bitness-for-modules,TARGET,$(_pif_modules)))) \
$(call expand-required-modules,_pif_modules,$(_pif_modules),$(_pif_overrides)) \
对应的的device.mk添加
TARGET_REMOVE_PACKAGES+=xxx
Android11:
1、build添加变量定义。
diff --git a/core/main.mk b/core/main.mk
index 3bfd8326e..ffe6e44d5 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -1076,6 +1076,8 @@ define product-installed-files
$(eval ### Filter out the overridden packages and executables before doing expansion) \
$(eval _pif_overrides := $(call module-overrides,$(_pif_modules))) \
$(eval _pif_modules := $(filter-out $(_pif_overrides), $(_pif_modules))) \
+ $(eval _pif_dels := $(call get-product-var,$(1),PRODUCT_DEL_PACKAGES)) \
+ $(eval _pif_modules := $(filter-out $(_pif_dels), $(_pif_modules))) \
$(eval ### Resolve the :32 :64 module name) \
$(eval _pif_modules_32 := $(patsubst %:32,%,$(filter %:32, $(_pif_modules)))) \
$(eval _pif_modules_64 := $(patsubst %:64,%,$(filter %:64, $(_pif_modules)))) \
diff --git a/core/product.mk b/core/product.mk
index d691617c7..0e78421e1 100644
--- a/core/product.mk
+++ b/core/product.mk
@@ -287,6 +287,9 @@ _product_single_value_vars += PRODUCT_ODM_BASE_FS_PATH
# The first API level this product shipped with
_product_single_value_vars += PRODUCT_SHIPPING_API_LEVEL
+# delete product packages
+_product_single_value_vars += PRODUCT_DEL_PACKAGES
+
_product_list_vars += VENDOR_PRODUCT_RESTRICT_VENDOR_FILES
_product_list_vars += VENDOR_EXCEPTION_MODULES
_product_list_vars += VENDOR_EXCEPTION_PATHS
2、修改device目录下的makefile,添加具体的package
diff --git a/qssi.mk b/qssi.mk
index c037c97..3cbfd41 100644
--- a/qssi.mk
+++ b/qssi.mk
@@ -32,6 +32,27 @@ BOARD_AVB_ENABLE := true
# SHIPPING_API_LEVEL to 28 if it was not set earlier (this is generally set earlier via build.sh per-target)
SHIPPING_API_LEVEL := 30
+PRODUCT_DEL_PACKAGES += \
+ PrintSpooler \
+ Stk \
+ Mms \
+ MusicFX \
+ Dialer \
+ Contacts \
+ EasterEgg \
+ QuickSearchBox \
+ com.qualcomm.location \
+ FM2 \
+ NQNfcNci \
+ SimAppDialog \
+ LiveWallpapersPicker \
+ DocumentsUI \
+ Cam2test \
+ SnapdragonMusic \
+ DeskClock \
+ QDCMMobileApp \
+ Calendar
+
$(call inherit-product-if-exists, vendor/qcom/defs/product-defs/system/cne_url*.mk)
修改后,编译一次,看out下相关app是否已经不存在即生效了。