Android 系统编译移除应用

在系统编译的时候会编译很多应用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文件修改,能不能在PRODUCT_PACKAGES 加载完所有要加入编译的应用后,一次性去除想要去除的应用呢。

首先在对应项目的mk文件里添加需要去除的应用
TARGET_REMOVE_PACKAGES := TestA TestB TestC …

然后修改build/make/core/main.mk 文件,应用是在这边进行加载和加入编译的
Andorid P 和 Android Q 该文件的代码有一点差别,逻辑都是一样的

Andorid P  # Filter out the overridden packages before doing expansion  product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \      $(PACKAGES.$(p).OVERRIDES)), $(product_MODULES))  # Filter out executables as well  product_MODULES := $(filter-out $(foreach m, $(product_MODULES), \      $(EXECUTABLES.$(m).OVERRIDES)), $(product_MODULES))#修改项 start  # remove packages,add by Seaton  product_MODULES := $(filter-out $(TARGET_REMOVE_PACKAGES),$(product_MODULES)) #修改项 END  # Resolve the :32 :64 module name  modules_32 := $(patsubst %:32,%,$(filter %:32, $(product_MODULES)))  modules_64 := $(patsubst %:64,%,$(filter %:64, $(product_MODULES)))
Andorid Qdefine product-installed-files  $(eval _mk := $(strip $(1))) \  $(eval _pif_modules := \    $(PRODUCTS.$(_mk).PRODUCT_PACKAGES) \    $(if $(filter eng,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_ENG)) \    $(if $(filter debug,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_DEBUG)) \    $(if $(filter tests,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_TESTS)) \    $(if $(filter asan,$(tags_to_install)),$(PRODUCTS.$(_mk).PRODUCT_PACKAGES_DEBUG_ASAN)) \    $(call auto-included-modules) \  ) \  $(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 ### remove custom package,Add by Seaton) \  $(eval _pif_modules := $(filter-out $(TARGET_REMOVE_PACKAGES), $(_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)))) \  $(eval _pif_modules_rest := $(filter-out %:32 %:64,$(_pif_modules))) \  $(eval ### Note for 32-bit product, 32 and 64 will be added as their original module names.) \  $(eval _pif_modules := $(call get-32-bit-modules-if-we-can, $(_pif_modules_32))) \  $(eval _pif_modules += $(_pif_modules_64)) \

更多相关文章

  1. Android 资源文件夹下的文件不能有大写字符,会导致R.java无法生成
  2. Android系统平台progurad混淆功能使能
  3. Android调用系统添加和编辑联系人的返回结果
  4. Android系统四层架构分享
  5. Android系统分区
  6. android的文件系统结构简单介绍
  7. Android 动态加载APK--代码安装、获取资源及Intent调用已安装apk

随机推荐

  1. 开发技术前线 第八期 周报
  2. Android学习日记
  3. WebView 打印web端的console日志(如consol
  4. Android深入浅出之Audio 第一部分 AudioT
  5. Android的线程使用来更新UI----Thread、H
  6. 在Android中加入GOOGLE统计系统
  7. Android(安卓)知识体系
  8. Android显示时间和日期的控件的使用总结
  9. webview和Android交互
  10. Android热更新实现原理浅析