Android 系统去掉- 短信-电话-通讯录App实现

提示: Android 定制系统去掉短信-电话-通讯录 三个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 还是有管理、区别的,需要理解下