Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Root原理初探

Android Root原理初探

編輯:關於Android編程

Root


Linux:Root == Windows:Adminstrator


Android是Linux系統嗎?

操作系統 = 系統內核 + 文件系統
Linux發行版:Linux內核 + 文件系統(ext3/4)
Android:Linux內核 + 文件系統(ext3/4)

 

Android 沒有本地窗口系統

而Linux是可以脫離X窗口的。

Android 沒有glibc library
Android並不包括一整套標准的Linux應用程序

而Linux也是可以脫離這兩點的。

Android內置了專有的驅動程序

然並卵。Linux的內核也分主次,驅動程序也不是不能脫離的,只是去掉後無法識別對應的設備,並不影響Linux的內核的裝載和運行。而且在Linux Kernel Configuration裡可以自由配置需要卸載的項目。不能因為增加了驅動就認為不是Linux。並不是決定操作系統性質的關鍵。判斷操作系統種類的並不是其上層建築,而是深層的系統內核和文件結構。
Linux內核中與驅動相關且比較核心的是驅動接口(Linux驅動運行和安裝規范),是一套二進制規范。
綜上,Android實質上是Linux。

那麼,Root對於Android意味著什麼?

用su命令切換到root用戶


Android為什麼要Root?

刪除非官方或定制系統預裝的垃圾應用

擁有root權限後直接復制 根據Android Rom復制 通過Recovery升級包方式復制

控制開機加載項

擁有更多權限

調試Linux驅動

修改啟動畫面


提取Root權限的步驟

1.刷一個合適的Recovery

方法一:在bootloader模式下復制整個文件系統
方法二:在Recovery模式將文件復制到Android設備的指定目錄

刷入Clockwork Recovery

通過adb reboot bootloader命令或者關機下按組合按鍵進入bootloader模式。

fastboot:
這裡寫圖片描述
這裡寫圖片描述

危險的命令:

fastboot flash bootloader bootloader.img
// 如果bootloader.img錯誤,則需要更換主板

自毀命令:

fastboot erase bootloader
// 擦除

刷Recovery:

fastboot flash recovery recovery.img

重啟設備<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxibG9ja3F1b3RlPg0KCTxwPmZhc3Rib290IHJlYm9vdDwvcD4NCjwvYmxvY2txdW90ZT4NCjxoNCBpZD0="2改造su命令的源代碼">2.改造su命令的源代碼

Android自帶的su命令只允許root和shell用戶(adb shell)調用

3.制作Recovery刷機文件(*.zip)

主要由待復制的文件和Edify語言(用於對文件和目錄進行操作)編寫的腳本文件組成
編寫Recovery升級包中的updater-script腳本文件,將su命令復制到/system/xbin目錄中。

4.執行su命令提取Root權限

改造後的su命令,可以被終端和App調用。

5.讓ROM本身擁有Root權限(非必需)

不然進入終端執行su命令後才擁有Root權限。


Edify

Android內嵌腳本語言,用於編寫updater-script腳本文件。
updater-script是Recovery Rom和升級包的核心。完全由函數組成。

ui_print(msg_1,…,msg_N);

用於在Recovery界面輸出字符串,至少需要一個參數。指定多個參數,會將參數值連起來輸出。

run_program(prog, arg1,…,argN);

該函數用於執行程序,prog參數是必需的,表示要執行程序文件的完整路徑。其他參數可選。如:

run_program(“/sbin/busybox”,”mount”,”/system”);

delete(file1,…,fileN);

刪除一個或多個文件,參數為文件的路徑。如:

delete(“/system/xbin/su”);

package_extract_dir(package_path, destination_path);

用於提取刷機包指定目錄package_path的所有文件到目標目錄destination_path。

set_perm(uid, gid, mode, file1,…fileN);

設置一個或多個文件的權限。
uid是用戶id。gid是用戶組id。
如果想讓文件的用戶和用戶組都是Root,需要將uid和gid設為0。

mount(fs_type, partition_type, location, mount_point);

掛載分區。如:

mount(“ext4”, “EMMC”, “/dev/block/paltform/s3c-sdhci.0/by-name/system”, “/system”);

unmount(mount_point);

卸載分區。如:

unmount(“/system”);

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved