前言
本文列举了四种方式移除原生系统中默认内置的应用(以Email为例),推荐使用方法四
方法一、重命名Email的Android.mk
将Email的Android.mk 重命名为Android.mk.bak,使得在编译时不会加载其mk因此Email应用不会被编译进系统。
packages\apps\Email\Android.mk -> packages\apps\Email\Android.mk.bak
缺点:当需要移除多个应用时不便于统一管理和管控;当需要恢复预置时,修改繁琐
优点:操作简单
方法二、PRODUCT_PACKAGES移除/注释Email
在device/…/*.mk预置Email处删除该应用模块的预置
device/qcom/qssi/base.mk
PRODUCT_PACKAGES := \
AccountAndSyncSettings \
DeskClock \
AlarmProvider \
Bluetooth \
BluetoothExt \
Calculator \
Calendar \
Camera \
CellBroadcastReceiver \
CertInstaller \
DrmProvider \
- Email \
Gallery2 \
LatinIME \
Music \
...
缺点:未记录移除应用,当要还原时繁琐
优点:修改简单,方便批量移除
方法三、使用LOCAL_OVERRIDES_PACKAGES标签
使用LOCAL_OVERRIDES_PACKAGES属性使得指定模块不参与编译.
1、在device下新建Android.mk
device/qcom/xxx/Android.mk
+include $(CLEAR_VARS)
+LOCAL_MODULE := remove_unused_apps
+
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
+LOCAL_OVERRIDES_PACKAGES += \
+ Email
PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES))
2、PRODUCT_PACKAGES 添加remove_unused_apps
device/qcom/qssi/base.mk
+PRODUCT_PACKAGES += \
+ remove_unused_apps
原理:
LOCAL_OVERRIDES_PACKAGES表示使用某以模块替换/覆盖其定义的模块,使得一个或多个模块不参与系统编译,从而达到移除指定应用的目的。
LOCAL_MODULE_CLASS 用来定义了模块类型和预置路径。
LOCAL_MODULE_CLASS := ETC //其他类型模块,预置于/system/etc
LOCAL_MODULE_CLASS := STATIC_LIBRARIES //静态库类型,预置于/system/lib
LOCAL_MODULE_CLASS := EXECUTABLES //可执行文件类型,预置于/system/bin
LOCAL_MODULE_CLASS := JAVA_LIBRARIES //jar包类型
LOCAL_MODULE_CLASS := SHARED_LIBRARIES //动态库,预置于/system/lib
LOCAL_MODULE_CLASS := APPS //apk类型
缺点:预置了多余etc目录
方法四、配置TARGET_REMOVE_PACKAGES属性
新定义TARGET_REMOVE_PACKAGES属性用于移除应用
build/make/core/main.mk
$(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) \
在device的mk中设置TARGET_REMOVE_PACKAGES属性
device/qcom/qssi/base.mk
+TARGET_REMOVE_PACKAGES := \
+ Provision
优点:方便管理和记录默认应用的移除
方法五、在SystemUI或者Launcher的Android.mk文件中配置LOCAL_OVERRIDES_PACKAGES属性
\frameworks\base\packages\SystemUI/Android.mk
LOCAL_OVERRIDES_PACKAGES := Email
总结
虽然上述方法都能移除原生应用Email,但综合考虑推荐一劳永逸的方法四移除原生应用,方便移除多个应用和重新预置应用,代码功能清晰明确。
参考
https://blog.csdn.net/supernova_TOP/article/details/126708316?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172178406916800226569192%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=172178406916800226569192&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-126708316-null-null.142v100pc_search_result_base5&utm_term=android%20%E7%A7%BB%E9%99%A4%E7%B3%BB%E7%BB%9FAPP&spm=1018.2226.3001.4187