本文是《Android内核开发》系列的第十一篇文章,本文重点介绍如何从Android源码中删除出厂的app应用。android
上一篇文章中提到过,系统出厂的app应用,其实就是被安装到/system分区的app,这些app在Android源码树中被编译后打包到了system.img镜像中,系统启动时,以只读的方式挂载/system目录,所以,非root手机用户是没法删除这些app的。shell
若是咱们已经成功获取了手机的root权限,就能够经过下面的方法直接删除掉系统出厂的app应用,假设某app的安装文件叫作xxxx.apk,那么删除它的命令以下所示:微信
$ adb root架构
$ adb remountapp
$ adb shell rm /system/app/xxxx.apk学习
一样,咱们也能够将本身的app安装到系统的/system目录中去:ui
$ adb root.net
$ adb remount命令行
$ adb push xxxx.apk /system/app/blog
上面的方法只是介绍了经过命令行的方式手动添加/删除系统出厂的app,那么,如何从Android系统源码树中删除指定的出厂的app应用呢?
首先,推荐你们阅读一下这篇文章:《理解 Android Build 系统》,大体了解一下整个Android源码的编译系统架构,本文在这篇文章的基础上,重点关注如何删减系统出厂的app。
Android源码中,在 build/target/product 目录下预先定义了不少app列表的组合,以下所示:
在开发具体的Android产品时,能够经过“引用”这些系统预约义的mk文件,快速造成某类产品的app列表,好比包含了generic_no_telephony.mk的产品,就直接定义了时钟,邮件,日历,照相机的经常使用的app。
那么,上面这些系统预约义的mk文件,到底哪些被具体的Android产品“引用”了呢?
Android源码树中,真正定义产品配置的文件夹是:device/<company>/<product>,以我手头的beagleboneblack源码为例,以下所示:
$ cd beaglebone/device/ti/beagleboneblack
$ ls *.mk
Android.mk
AndroidProducts.mk
beagleboneblack.mk
BoardConfig.mk
CleanSpec.mk
device.mk
以上就是beagleboneblack产品配置最核心的mk文件了,其中,AndroidProducts.mk和BoardConfig.mk两个文件是必须的,编译系统会首先搜索这两个文件。
AndroidProducts.mk文件通常会直接指向具体产品配置文件,如本例中指向了beagleboneblack.mk文件,在beagleboneblack.mk中,则会详细地定义产品的名称、厂商、出厂的APP、须要拷贝的文件等等; BoardConfig.mk则是用来配置设备的硬件信息,如CPU架构、内核相关信息、bootloader、WIFI模块相关配置等等。
因而可知,要删减系统出厂的app,咱们只须要重点关注AndroidProducts.mk所指向的xxxxx.mk文件便可,如本例中的beagleboneblack.mk。
具体决定是否编译某个app的宏是“PRODUCT_PACKAGES”,例如:
PRODUCT_PACKAGES := \
DeskClock \
Calculator \
Calendar \
Camera2 \
Email \
所以,若是但愿删减掉某个app,直接从“PRODUCT_PACKAGES”列表删除掉就好了,例如,删除掉 Email,那么系统出厂的app里面就不会有“ Email”这个app了。(注意,具体的xxxx.mk文件一般还会引用其余的mk文件,好比:generic_no_telephony.mk,device.mk 等等,所以,在分析过程当中,凡是被依赖的mk文件也须要深刻分析和删减),例如:
//beagleboneblack.mk
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)
$(call inherit-product, device/ti/beagleboneblack/device.mk)
结束语
免费学习更多精品课程,登陆乐搏学院官网http://h.learnbo.cn/
或关注咱们的官方微博微信,还有更多惊喜哦~
本文出自 “Jhuster的专栏” 博客,请务必保留此出
关于如何从Android源码树中删除APP就介绍到这里了