本文是《Android内核开发》系列的第十一篇文章,本文重点介绍如何从Android源码中删除出厂的app应用。


上一篇文章中提到过,系统出厂的app应用,其实就是被安装到/system分区的app,这些app在Android源码树中被编译后打包到了system.img镜像中,系统启动时,以只读的方式挂载/system目录,因此,非root手机用户是无法删除这些app的。


如果我们已经成功获取了手机的root权限,就可以通过下面的方法直接删除掉系统出厂的app应用,假设某app的安装文件叫做xxxx.apk,那么删除它的命令如下所示:


$ adb root

$ adb remount

$ adb shell rm /system/app/xxxx.apk


同样,我们也可以将自己的app安装到系统的/system目录中去:


$ adb root

$ adb remount

$ adb push xxxx.apk /system/app/


上面的方法只是介绍了通过命令行的方式手动添加/删除系统出厂的app,那么,如何从Android系统源码树中删除指定的出厂的app应用呢?


首先,推荐大家阅读一下这篇文章:《理解 Android Build 系统》,大致了解一下整个Android源码的编译系统架构,本文在这篇文章的基础上,重点关注如何删减系统出厂的app。


Android源码中,在 build/target/product 目录下预先定义了很多app列表的组合,如下所示:


wKiom1WaaJDCsv9lAAJB6wc5abc587.jpg


在开发具体的Android产品时,可以通过“引用”这些系统预定义的mk文件,快速形成某类产品的app列表,比如包含了generic_no_telephony.mk的产品,就直接定义了时钟,邮件,日历,照相机的常用的app。


那么,上面这些系统预定义的mk文件,到底哪些被具体的Android产品“引用”了呢?


Android源码树中,真正定义产品配置的文件夹是:device//,以我手头的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)


关于如何从Android源码树中删除APP就介绍到这里了,有任何疑问或者建议欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。



更多相关文章

  1. 关于使用android系统设备充当web服务器的一点准备
  2. android box2d重力系统 碰撞检查(二)
  3. [置顶] android中图片的三级cache策略(内存、文件、网络)之三:文件
  4. Android 读写xml文件
  5. 如何使用Android Studio打开一个App项目,导入Android App项目需要
  6. Android应用程序如何访问/sys和/proc等目录下的系统文件
  7. Android蓝牙通讯模块源码(Android蓝牙开发浅析 续)
  8. android使用webview预览png,pdf,doc,xls,txt,等文件
  9. Android读取工程内嵌资源文件的两种方法

随机推荐

  1. 我的android第一课
  2. 如何在Android(安卓)Studio使用Java8 Lam
  3. Android(安卓)ANR
  4. Android(安卓)Layout XML属性
  5. 在PC端进行android截屏的多种方法
  6. 使用Android(安卓)studio开发Android(安
  7. Android教程之MediaStore
  8. android TextView属性
  9. Android发送短信
  10. Google I/O 发布android studio for linu