1. 程式人生 > >Android核心開發:從原始碼樹中刪除出廠的app應用

Android核心開發:從原始碼樹中刪除出廠的app應用

公開課1060:組策略(下)
12345678910
本文是《Android核心開發》系列的第十一篇文章,本文重點介紹如何從Android原始碼中刪除出廠的app應用。

上一篇文章中提到過,系統出廠的app應用,其實就是被安裝到/system分割槽的app,這些app在Android原始碼樹中被編譯後打包到了system.img映象中,系統啟動時,以只讀的方式掛載/system目錄,因此,非root手機使用者是無法刪除這些app的。

如果我們已經成功獲取了手機的root許可權,就可以通過下面的方法直接刪除掉系統出廠的app應用,假設某app的安裝檔案叫做**x.apk,那麼刪除它的命令如下所示:

adbroot adb remount
$ adb shell rm /system/app/**x.apk

同樣,我們也可以將自己的app安裝到系統的/system目錄中去:

adbroot adb remount
$ adb push **x.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原始碼為例,如下所示:

cdbeaglebone/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所指向的**xx.mk檔案即可,如本例中的beagleboneblack.mk。

具體決定是否編譯某個app的巨集是“PRODUCT_PACKAGES”,例如:

PRODUCT_PACKAGES := \
DeskClock \
Calculator \
Calendar \
Camera2 \
Email \

因此,如果希望刪減掉某個app,直接從“PRODUCT_PACKAGES”列表刪除掉就行了,例如,刪除掉 Email,那麼系統出廠的app裡面就不會有“ Email”這個app了。(注意,具體的**x.mk檔案通常還會引用其他的mk檔案,比如:generic_no_telephony.mk,device.mk 等等,因此,在分析過程中,凡是被依賴的mk檔案也需要深入分析和刪減),例如:

//beagleboneblack.mk

(callinheritproduct,(SRC_TARGET_DIR)/product/full_base.mk)
$(call inherit-product, device/ti/beagleboneblack/device.mk)

關於如何從Android原始碼樹中刪除APP就介紹到這裡了,有任何疑問或者建議歡迎留言或者來信[email protected]交流,或者關注我的新浪微博 @盧_俊 獲取最新的文章和資訊。

相關推薦

Android核心開發原始碼刪除出廠app應用

公開課1060:組策略(下) 12345678910 本文是《Android核心開發》系列的第十一篇文章,本文重點介紹如何從Android原始碼中刪除出廠的app應用。 上一篇文章中提到過,系統出廠的app應用,其實就是被安裝到/system分割槽的app

C#LeetCode刷題記錄排序陣列刪除重複項

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [1,1,2], 函式應該返回新的長度 2,

B刪除關鍵字

2011年06月16日 21:35:00 swordmanwk 閱讀數:11708 標籤: disk c

java演算法題排序陣列刪除重複項

題目: 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例1: 給定陣列 nums = [1,1,2], 函式應該返回新的長度 2

leetCode刷題排序陣列刪除重複項

從排序陣列中刪除重複項 給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例 1: 給定陣列 nums = [

《演算法導論》筆記 第18章 18.3 B刪除關鍵字

【筆記】 1) 如果關鍵字k在結點x中而且x是個葉結點,則從x中刪除k。 2) 如果關鍵字k在結點x中而且x是個內結點,則作如下操作。 a) 如果結點x中前於k的子結點y包含至少t個關鍵字,則找出k在以y為根的子樹中的前驅k‘。遞迴的刪除k’,並在x中用k'取代k。 b)

Android開發如何在選單呼叫控制元件(如Button、TextView……)

當我們在類內定義控制元件的全域性變數時,如Button……,只能在onCreate()中初始化,這樣的控制元件變數引用在選單中不好引用,會報錯。 如果想在選單中呼叫控制元件,可以在選單中重新定義控制元件

資料結構開發(23)二叉結點的查詢、插入、刪除與清除操作

0.目錄 1.二叉樹中結點的查詢操作 2.二叉樹中結點的插入操作 3.二叉樹中結點的刪除操作 4.二叉樹中結點的清除操作 5.小結 1.二叉樹中結點的查詢操作 查詢的方式: 基於資料元素值的查詢 BTreeNode<T>* find(const T&

資料結構開發(24)二叉屬性操作、層次遍歷與典型遍歷

0.目錄 1.二叉樹中屬性操作的實現 2.二叉樹結構的層次遍歷 3.二叉樹的典型遍歷方式 4.小結 1.二叉樹中屬性操作的實現 二叉樹的屬性操作: 二叉樹中結點的數目: 定義功能:count(node) 在 node 為根結點的二叉樹中統計結點數目 在

資料結構開發(25)二叉屬性操作、層次遍歷與典型遍歷

0.目錄 1.二叉樹的比較與相加 2.二叉樹的線索化實現 3.二叉樹的經典面試題分析 3.1 單度結點刪除 3.2 中序線索化二叉樹 4.小結 1.二叉樹的比較與相加 二叉樹的克隆操作: SharedPointer< BTree<T> > clone

iOS開發程式碼文字檔案讀取內容到字串裡(+ .json檔案)

NSError *error; NSString *textFileContents = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@”myTextFile” ofType:@”txt”]

Android開發-SQLite資原始檔資料庫複製到SD到增刪改查-AndroidStudio

覺得博文有用,請點贊,請評論,請關注,謝謝!~最近換工作了,新專案接觸到一些新的知識點,跟大家逐一分享~~首先是SQLite,專案中需要把一個本地幾十兆的本地資料庫放在專案中,實現只用json傳遞少量資料,卻可以實現複雜資料查詢顯示的功能。我分兩塊來說,一個使用SQLiteS

Linux文件搜索關鍵字並顯示行數(cat,grep函數)

img div 格式 gre 搜索 運行 .cn src images 假如有test1.txt的格式如下圖所示: 有test2.txt的內容如下: 現需將test2.txt含有的關鍵字的行搜索出來並顯示行數 則可以用到命令: cat test1.txt

題解報告hihoCoder #1050 : 的最長路

最長 \n hihocoder 100% 測試數據 問題 hihocode 行為 target 描述 上回說到,小Ho得到了一棵二叉樹玩具,這個玩具是由小球和木棍連接起來的,而在拆拼它的過程中,小Ho發現他不僅僅可以拼湊成一棵二叉樹!還可以拼湊成一棵多叉樹——好吧,其實就

貝葉斯網(2)Netica數據學習CPT

指向 搭建 上一個 劃分 認知 圖劃分 4.0 ont 再次 1. 離散節點 在官方Tutorial中是有詳細的案例的,就是B篇3.3節,你可以動手把天氣預報這個實現一下: http://www.norsys.com/tutorials/netica/secB/tut_B3

“遍體鱗傷”的直播開發一對一原始碼+一對多+商城,能否“梅開二度”

“春花秋月何時了,往事知多少?” 對於風生水起的自媒體直播平臺,首先是流量向頭部平臺集中,所有流量會湧向這些大財團、大資本支援的平臺;第二是運營方式將更加多元化;第三是行業TOP3將更加明顯,中小平臺的生存環境會越來越艱難;無論是在秀場、直播、電商、泛娛樂、遊戲,每個垂直細分領域大概會留兩到三家平臺;第四是

JVM系列第4講原始碼到機器碼,發生了什麼?

在上篇文章我們聊到,無論什麼語言寫的程式碼,其到最後都是通過機器碼執行的,無一例外。那麼對於 Java 語言來說,其從原始碼到機器碼,這中間到底發生了什麼呢?這就是今天我們要聊的。 如下圖所示,編譯器可以分為:前端編譯器、JIT 編譯器和AOT編譯器。下面我們逐個講解。 前端編譯器:原始碼到位元組碼

深入jar包jar包讀取資原始檔getResourceAsStream

一、背景   我們常常在程式碼中讀取一些資原始檔(比如圖片,音樂,文字等等)。   在單獨執行的時候這些簡單的處理當然不會有問題。但是,如果我們把程式碼打成一個jar包以後,即使將資原始檔一併打包,這些東西也找不出來了。   myproject     |___src   |___edu.hxrai

Android之帶你原始碼解析Bitmap佔用記憶體正確的計算公式

Bitmap 前言 Bitmap簡介 畫素儲存方式 圖片壓縮格式 Bitmap記憶體計算 釋放記憶體 獲取Bitmap所佔記憶體 計算所佔記憶體 舉例 Bitmap.getAllo

另類爬蟲PDF檔案爬取表格資料

簡介   本文將展示一個稍微不一樣點的爬蟲。   以往我們的爬蟲都是從網路上爬取資料,因為網頁一般用HTML,CSS,JavaScript程式碼寫成,因此,有大量成熟的技術來爬取網頁中的各種資料。這次,我們需要爬取的文件為PDF檔案。本文將展示如何利用Python的camelot模組