提示: Android 定制系统去掉短信-电话-通讯录 三个APP
文章目录
- [一 、前言-需求-场景](#一 、前言-需求-场景)
- [二 、参考资料](#二 、参考资料)
- 三、修改文件
- [四 、实现方案](#四 、实现方案)
-
- [去掉GMS里面配置 加载对应App脚本](#去掉GMS里面配置 加载对应App脚本)
- 去掉非GMS里面-通讯录-联系人-Contacts
- 去掉非GMS里面-打电话-Dialer
- 去掉非GMS里面-信息App
- 四、知识点扩展-思考-坑点
- 总结
一 、前言-需求-场景
这几个App 本身和4G相关的,在定制化产品中都会去掉这几个应用;商显项目会在系统裁剪阶段全部裁剪掉;
实际场景如下:
- 不带4G项目
- 商显产品、工控产品 不会用到4G定制的项目产品
- 部分单位产品,不允许有网络相关的定制化产品
比如如下,需要去掉的App,这里圈一下:

二 、参考资料
这里有之前几处笔记,可以参考
MTK-Android13-去掉桌面谷歌搜索框-设置语言默认为中文-隐藏去掉部分AP 在Launcher3 中直接隐藏,不去掉APP效果
MTKAndroid13-Launcher3 屏蔽部分app不让显示
这里只是在Launcher3 中隐藏了APP的方案,实际并没有实现系统级别的裁剪效果,对于部分产品场景是一个解决方案;如果实际需要项目进行系统级别的裁剪,那么如下会实际给出一定思路。
三、修改文件
java
/vendor/google/products/gms.mk
/device/mediatek/system/common/device.mk
/build/make/target/product/handheld_product.mk
/vendor/mediatek/proprietary/packages/apps/Dialer/java/com/android/dialer/main/impl/AndroidManifest.xml
四 、实现方案
思路:
- GMS产品和非GMS产品,GMS产品那就要去掉GMS相关的 App,非GMS 就去掉非GMS相关产品。
- GMS产品里面,即使去掉了GMS的相关App,实际项目起来了还是会有App存在,那是因为去掉了GMS关联的App后还是会加载非GMS管理的App。 所以还需要去掉非GMS管理的App.
- 非GMS产品里面:去掉非GMS产品app
所以,先去掉GMS 里面关联的
去掉GMS里面配置 加载对应App脚本
路径:/vendor/google/products/gms.mk
去掉 如下脚本内容:
java
# GMS comms suite
#$(call inherit-product, $(ANDROID_PARTNER_GMS_HOME)/products/google_comms_suite.mk)
这里我们看看 google_comms_suite.mk 做了什么吧

其实就是一个加载GMS App脚本,关联的几个App 单独分离出来的一个编译脚本。
去掉非GMS里面-通讯录-联系人-Contacts
路径:/build/make/target/product/handheld_product.mk
查看,如下脚本源码: 通讯录-联系人 Contacts 就是在这里配置的,当然还有其它App 也是在这里配置的,所以去掉其它部分app也是一样,直接屏蔽掉。
java
# This makefile contains the product partition contents for
# a generic phone or tablet device. Only add something here if
# it definitely doesn't belong on other types of devices (if it
# does, use base_product.mk).
$(call inherit-product, $(SRC_TARGET_DIR)/product/media_product.mk)
# /product packages
PRODUCT_PACKAGES += \
Calendar \
Camera2 \
#Contacts \
DeskClock \
Gallery2 \
LatinIME \
Music \
OneTimeInitializer \
preinstalled-packages-platform-handheld-product.xml \
SettingsIntelligence \
frameworks-base-overlays
PRODUCT_PACKAGES_DEBUG += \
frameworks-base-overlays-debug
去掉非GMS里面-打电话-Dialer
路径:/vendor/mediatek/proprietary/packages/apps/Dialer/java/com/android/dialer/main/impl/AndroidManifest.xml
这里思路是啥子呢? 可能会问, 为啥改到了这里,不是应该在编译文件里面直接隔离不就行了嘛? 我这样想的:
- 部分app 是核心app,不能够删除的
- 部分app 删除不仅仅是从中间层删除,这里面涉及到很多内容甚至包括射频相关,所以系统从安全角度不会简单配置在编译脚本里面,简单删除即可。
所以,这里思路就是让App 不让显示,如我们系统Launcher,去掉非Launcher属性,实现第三方应用默认就一个Launcher 的需求。
修改内容如下:

核心逻辑就是去掉启动界面 LAUNCHER属性
去掉非GMS里面-信息App
路径:/device/mediatek/system/common/device.mk
如下,脚本修改内容:核心逻辑就是去掉编译文件中配置的Message 相关的 App即可。

四、知识点扩展-思考-坑点
思考
在GMS产品中和非GMS产品中实际上都有对应的App,比如联系人、打电话、信息 这些App,甚至不同平台为了显示平台特性也会自己写一个对应app 来覆盖最原始的App。 如下:所以对 编译脚本、编译流程、配置需要有一定的熟悉程度



反思思考-坑点
如上:分析了GMS和非GMS情况下 的不同场景并给出了具体的修改方案,实际中如果第一次昨基本上搞不定。 但是要有自己的思路,掌握最基本的经验,然后一步步思考。
坑点:
- 去不掉App原因,命名GMS已经去掉了,结果还要去非GMS里面的App
- 去App 思路不仅停留在编译脚本,同时也要思考不让App显示出来的思路
- 当然,还要持有怀疑的态度,为什么去不掉,甚至所有搜索了管理的app脚本都去掉了,可是还是会显示出来,会不会系统就是这么设定的,不是简单屏蔽就可以解决的
去掉后,效果如下:

总结
- 最常见的定制化、客制化、裁剪需求,需要掌握思想、思路、方法
- GMS非GMS 去App 还是有管理、区别的,需要理解下