Android移除预制应用方法

移除预制应用,首先想到的3个方法:

1. 注释掉对应模块 .mk文件中的内容。

2. 重命名对应模块 .mk文件,比如android.mk.bk

3. 找到项目的mk文件,找到 PRODUCT_PACKAGES,注释掉目标模块。

以上方法修改针对单个模块还好,如果是多个模块的话,修改目录多,繁琐,并且不容易记录跟踪。所以下面介绍第四种方法:

利用LOCAL_OVERRIDES_PACKAGES

LOCAL_OVERRIDES_PACKAGES:原本用意是 如果预置的APK,要覆盖原生apk,则需在android.mk中的添加LOCAL_OVERRIDES_PACKAGES,此变量可以使其他的模块不加入编译。

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

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := $(call all-java-files-under, src) 
LOCAL_STATIC_JAVA_LIBRARIES := \
    android-support-v4

LOCAL_PACKAGE_NAME := MyMusic # 预制的app,替换下面原声的Music app

LOCAL_OVERRIDES_PACKAGES := Music # 不参与编译

LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/app

LOCAL_CERTIFICATE := platform
LOCAL_PRIVATE_PLATFORM_APIS := true

include $(BUILD_PACKAGE)

上面的例子意思是用MyMusic来代替原生的Music, 原声的Music不再编译。

我们来跟一下LOCAL_OVERRIDES_PACKAGES:

# make/core/prebuilt_internal.mk

PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES))

# make/core/package_internal.mk
PACKAGES.$(LOCAL_PACKAGE_NAME).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)) 

LOCAL_OVERRIDES_PACKAGES被赋值给了2个变量。在build/下

grep -nr "PACKAGES.*.OVERRIDES"

# make/core/main.mk

 # Filter out the overridden packages before doing expansion         
 product_MODULES := $(filter-out $(foreach p, $(product_MODULES), \  
     $(PACKAGES.$(p).OVERRIDES)), $(product_MODULES))                

最后在main.mk中可以看到,大概意思是product_MODULES的值,会剔除那些PACKAGES.$(p).OVERRIDES 标注的模块,而PACKAGES.$(p).OVERRIDES这个值,根据上面一步步看,就是LOCAL_OVERRIDES_PACKAGES制定的模块。

那么了解了LOCAL_OVERRIDES_PACKAGES的使用和原理后,就可以考虑如何删除预制应用了。

1. 在项目目录下新建一个android.mk

2. 定义DELETE_PACKAGES变量,将要删除的模块赋值给它。

        将DELETE_PACKAGES赋值给PACKAGES.$(LOCAL_MODULE).OVERRIDES

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

# 定义一个变量DELETE_PACKAGES,将所有想要删除的模块赋值给DELETE_PACKAGES
DELETE_PACKAGES := \
   DeleteApp1 \
   DeleteApp2 

# 定义一个LOCAL_MODULE,由于它没有指定任何的编译目标,所以它编译出来的是空
LOCAL_MODULE := override_packages
LOCAL_MODULE_TAGS := optional

# 将DELETE_PACKAGES复制给PACKAGES.$(LOCAL_MODULE).OVERRIDES,达到和
# LOCAL_OVERRIDES_PACKAGES一样的作用。
PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(DELETE_PACKAGES))
include $(BUILD_PHONY_PACKAGE)

3. 将override_packages 加入到项目的mk中:

PRODUCT_PACKAGES += override_packages

done.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值