Android 内置应用裁剪
文章目录
- 查询目标 APK 的 Android.mk(或 Android.bp)文件
- apk裁剪方式
- 1.注释或删除.mk/.bp文件
- 2.将 APK 名称加入“OVERRIDES”配置项中
- 3.自定义“PRODUCT_PACKAGES_REMOVE”配置项
查询目标 APK 的 Android.mk(或 Android.bp)文件
- 命令
find ./[dir] -type f -name *.mk | xargs grep APKname -in -w
or
find ./[dir] -type f -name *.bp | xargs grep APKname -in -w
-
功能
若用户已知目标 APK 名称,且目标 APK 是以.apk 文件的形式存在于源码中,用户可执行此命令
查询目标 APK 的 Android.mk(或 Android.bp)文件。用户可在返回的 Android.mk(或 Android.bp)
文件内完成对目标 APK 的裁剪工作。 -
参数
dir:文件所在目录,可仅为父目录,也可为父目录及其子目录。若省略此参数,则表示当前目录
及其子目录
APKname:APK 名称 -
示例
/system_mssi_u0$ find ./packages/apps/ -type f -name *.bp | xargs grep CertInstaller -in -w
./packages/apps/CertInstaller/robotests/Android.bp:2:// CertInstaller Robolectric test target. #
./packages/apps/CertInstaller/robotests/Android.bp:17: instrumentation_for: “CertInstaller”,
./packages/apps/CertInstaller/Android.bp:7: name: “CertInstaller”,
/system_mssi_u0$
apk裁剪方式
1.注释或删除.mk/.bp文件
以裁剪MtkContacts为例
- 直接删除.mk/.bp文件
将对应的.mk/.bp文件改名为Android.bp_disable - 使用grep -rn “MtkContacts” device/ 命令搜索,将MtkContacts注释
2.将 APK 名称加入“OVERRIDES”配置项中
示例 1:基于 Android.mk 文件,裁剪 Email.apk、Gmail2.apk、Email2.apk 和 Exchange2.apk
- 找到一个一定会参与编译的 APK 的 Android.mk 文件;假设,GMailGo.apk 一定会参与编译;
- 将待裁剪的具体APK名称(Email 、Gmail2 、Email2 和Exchange2) 添加在 “LOCAL_OVERRIDES_PACKAGES”配置选项中,多个 APK 以空格隔开,如下图:
- 如 上 图 , Email 、 Gmail2 、 Email2 和 Exchange2 均 被 添 加 在 “LOCAL_OVERRIDES_PACKAGES”中,则编译 GMailGo.apk 时,系统会自动覆盖Email、Gmail2、Email2 和 Exchange2 这四个 APK,从而将这四个 APK 排除在编译选
项外,达到裁剪的目的。
示例 2:基于 Android.bp 文件,裁剪 QtiCalendar.apk、AospCalendar.apk 和 OtherCalendar.apk
- 找到一个一定会参与编译的 APK 的 Android.bp 文件;假设,Calendar.apk 一定会参与编译;
- 将待裁剪的具体 APK 名称(QtiCalendar、AospCalendar 和 OtherCalendar)添加在“overrides”配置选项中,具体 APK 名称需要用双引号标记,多个 APK 以逗号隔开,
如下图:
- 如上图,QtiCalendar、AospCalendar 和 OtherCalendar 均被添加在“overrides”中,则编译 Calendar.apk 时,系统会自动覆盖 QtiCalendar、AospCalendar 和 OtherCalendar这三个 APK,从而将这三个 APK 排除在编译选项外,达到裁剪的目的。
3.自定义“PRODUCT_PACKAGES_REMOVE”配置项
参考 AOSP 中 PRODUCT_PACKAGES 配置的方式,自定义一个“PRODUCT_PACKAGES_REMOVE”
配 置选项。用户可根据自身项目的需要,将需裁剪的 APK 名称(无需 .apk 后缀) 都添加到“PRODUCT_PACKAGES_REMOVE”项下,从而做到一次性全部裁剪。此方法省去了查找目标 APK 的编译.mk 文件的时间,提高了工作效率。
补丁如下:
从以上补丁可以发现,只要是添加在“PRODUCT_PACKAGES_REMOVE”配置项下的 APK 都将被裁剪。