Android內核開發:從源碼樹中刪除出廠的app應用

本文是《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列表的組合,以下所示:

 

wKiom1WaaJDCsv9lAAJB6wc5abc587.jpg

 

在開發具體的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就介紹到這裏了

相關文章
相關標籤/搜索