APK:
APK 是Android Package 的縮寫,即Android安裝包。APK 相當于電腦上的exe文件或者塞班上的sis文件。
ROM、RUU: ROM,是用來刷你手機系統的數據文件,也就是Android 系統的封裝包,通過手機的工程模式解壓安裝到手機中形成你手機的操作系統。
簡單來說就是手機固件,相當于電腦的系統,我們刷機也就是重新安裝這部分。
官方原版ROM 就是RUU,(相當于原版Windows XP)首先他是一個最安全的升級工具,可以讓我們安全的升級ROM (一定要對應的機型)。
當我們在刷機過程中由于不當的操作或版本選擇的錯誤,導致無法啟動,可以使用官方的RUU 程序來恢復系統,等于說,這是一個救命道具。
Radio: Radio指代的是通訊模塊,就是手機里面負責信號部分的模塊,PDA類型的手機,基本都強調這么個概念。一個是PDA,一個是手機(貌似是句廢話- -),舉個很簡單的例子,以三星的PPC手機為例,比如i718.比如i908,他們在刷機的時候(所謂刷機就是重裝系統)一般都是分兩部分,第一部分刷 手機部分,第二部分刷PDA部分,而且兩部分基本不相干。
app2sd: Google 手機的軟件為了安全性和穩定性都是默認安裝到手機內存里,但是手機內存有限,所以我們會做app2sd 操作,來讓我們安裝的軟件放到sd卡上,而Google 的android 系統是基于Linux 的,所以存儲卡上本身的Fat 格式是不會被識別的,所以我們要分區(第二分區)出來,格式成Linux 認識的ext2 或3 或4 格式,在用鏈接命令,把這個分區映射成一個系統文件夾system/sd(大概這個意思),把所有的軟件裝到這個“文件夾”下,這就是app2sd 的操作。需要ROM 支持并開啟app2sd 功能。
app2sd 的操作其實是犧牲了一部分軟件的速度和穩定性來換取更多的手機內存安裝更多的軟件。另外,app2sd只是把軟件放到了sd卡上,運行軟件還是需要占用手 機的內存的,所以,你裝了軟件之后,一般手機內存還是會減少一些。你如果安裝的軟件在70個以內,個人覺得沒有必要,呵呵,如果很多游戲軟件除外。此外, 使用app2sd 最大的好處就是,刷一個帶app2sd 的rom 之后,以后升級這個rom(依然帶app2sd)的時候,你的軟件都會完整保存(個別除外,比如htc input chinese需要重新添加幾個文件到system/lib下),不過很多ROM 是需要Wipe ext 分區的,也就不能保留了。
目前來看我們現在所使用的Android 各種軟件暫時還沒有進行app2sd 的必要。
簡單來說就是把程序安裝到內存卡里面
注:為了適應用戶需求,從android 2.2開始 android系統已經支持安裝軟件到sd卡。
root: root 就是你手機的boss,它可以訪問和修改你手機幾乎所有的文件,這些東西可能是制作手機的人不愿意你修改和觸碰的東西,因為他們有可能影響到手機的穩定,還容易被一些hacker 有機會入侵你的手機(貌似還沒有出來這類黑客)。
既然root 這么危險,我們為什么還要去獲取它?其實用root 的權限主要是因為我們生在天朝,我們很多東西是受限制的,我們只能利用這些權限來做我們被限制的去做的事情,比如Google 禁止我們看到市場里很多免費或付費軟件,我們可以用marketenabler 來進去看;再比如國慶以來GFW 把我們的市場干掉了,很多朋友只能看不能下,不能綁定gmail,我們可以修改hosts 來搞定他們,但這些都需要root權限。
比如目前所有在hero 上截屏的軟件都需要root 權限,沒有root 權限,像Drocap、Shootme、Picme等等這類截屏軟件就不能使用(當然,我們可以連線電腦,使用 91助手在電腦上截取自己想要的hero 屏圖)。個人覺得,除非必要,不要總是去想著獲取root。
ROOT就是手機的最高權限,相當于塞班的XX權限,可以對系統文件進行操作。
SPL: SPL全稱“Secondary Program Loader”,中文名叫做二次程序載入器,負責檢測ROM和硬件,尋找系統啟動分區并裝載ROM的其它部分。
簡單來說,就是俗稱的刷機安全套件,保證您在刷機失敗時也不會變磚頭,通常可分為“Hard-SPL”和“Soft-SPL”兩種。XX手機也就是XX的這個部分。
recovery: recovery 就是你用 home 鍵+開機鍵 開機后能進入的一個界面(工程模式),在這個界面你可以直接用sd 卡上的zip 的rom 升級或者備份你的系統,老版本的recovery 只有三個選項,無法備份系統,只能用update.zip這個文件名的文件升級,不能用任何文件名的zip文件升級。新版本已經多出很多選項可以供你操 作。
此外,一般刷rom 之前最好wipe一下(wipe只是抹除rom 以外的個人數據,不會影響rom 本身),也就是返回出廠設置一下比較好,但是這樣就會丟失你的所有軟件,短信彩信,聯系人(備份在google上沒有關系)和設置等等,備份或者不 wipe 都可以。
目前最新版為:RA-hero-v1.6.2
說說RA-hero-v1.6.2里的對應的說明:
1、Reboot system now——重啟
2、USB-MS toggle——在recovery 模式下直接連接USB而不需要退出該模式
3、Backup/Restore——備份和還原
3-1、Nand backup——Nand 備份
3-2、Nand + ext backup——Nand 備份(系統和ext 分區一同備份)
3-3、Nand restore——還原(就是還原3-1、3-2 的最后一次備份)
3-4、BART backup——BART 備份 (包括系統和ext 分區)
3-5、BART restore——還原最后一次的BART備份
Nand 備份類似于系統的備份 而BART 則像是PC 上ghost 的備份。
Nand 備份 它不會備份ext 分區(就是第二分區 沒有分區的可以不管這個)
所以你的如果app2sd 了 那么裝在第二分區的程序用Nand 恢復是辦不到的
BAR T則可以備份到ext 分區 用BART 恢復則可以恢復整個系統 可以使它和你備份前一模一樣,
不會有一點文件信息的丟失(包括聯系人、短信、圖片、影音等,所以如果你裝的東西比較多,那么備份和恢復會比較慢)
4、Flash zip from sdcard——從sd卡根目錄的.zip ROM 刷機包刷機
5、Wipe——清除
5-1、Wipe data/factory reset——清除內存數據和緩存數據(刷機前建議清除此項)
5-2、Wipe Dalvik-cache——清除緩存數據 + ext 分區內數據(刷機前建議清除此項)
5-3、Wipe SD:ext partition——只清除ext 分區內數據(刷機前建議清除此項)
5-4、Wipe battery stats——清除電池數據(刷機前建議清除此項)
5-5、Wipe rotate settings——清除傳感器內設置的數據(刷機前建議清除此項)
6、Partition sdcard——分區sd 卡
6-1、Partition SD——自動為sd 卡分區
6-2、Repair SD:ext——修復ext 分區
6-3、SD:ext2 to ext3——將ext2 分區轉換為ext3 分區(推薦)
6-4、SD:ext3 to ext4——將ext3 分區轉換為ext4 分區(C4 卡不推薦,C6 卡推薦)
7、Other——其它
7-1、Fix apk uid mismatches——修復apk 程序
7-2、Move apps+dalv to SD——移動程序和虛擬緩存到sd 卡(這個可不是 app2sd)
7-3、Move recovery.log to SD——移動刷機日志文件到sd 卡
(執行此操作后,sd 卡根目錄會出現一個“recovery.log” 文件 即為刷機日志文件)
8、Power off——關機
fastboot:
從字面上來看是【快速啟動】的意思,也算是一個刷機界面,不過比recovery更加底層.這個底層是更加接近硬件層的意思.
兩個都很重要,不過fastboot更為主要.當你不能進入recovery的時候,不要緊張,你還能進fastboot挽救,不過當你連fastboot都不能進入的時候,那可真就是磚了.
通俗的說 recovery就好比外套,fastboot就好比內褲.當你的外套沒了的時候,你還有內褲,這個時候頂多被人說成是臭流氓.不過當你內褲都沒了的時候,那可就是耍流氓了,到時會有警察叔叔請你喝茶的.
為了使用Fastboot功能.您必須root您的設備.并獲得S-OFF的SPL.你的電腦還必須裝有ADB驅動.
進入Fastboot的方式是關機狀態下按返回+開機.
Fastboot使用方式: fastboot [ <選項> ] <命令> 解釋:
[]括起來表示這個是可選的.
<>括起來表示這個是必須的.
可用命令: update <文件名> 從官方update.zip升級系統.該update.zip必須是官方的
flashall 'flash boot' + 'flash system'
flash <分區名> [ <文件名> ] 將文件寫入分區.文件必須正確的格式.分區名有但不限于system,recovery,boot,splash1,hboot,radio,userdata,cache
erase <分區名> 清空一個分區.
getvar <參數名> 顯示一個啟動參數
boot <內核文件> [ <ramdisk文件> ] 將電腦上的內核下載到手機并用該內核啟動系統.
flash:raw boot <內核文件> [ <ramdisk文件> ] 創建boot.img并下載到手機啟動系統.
devices 列出所有與電腦連接的設備.
reboot 正常啟動系統
reboot-bootloader 啟動系統到hboot
選項: -w 清空用戶數據分區和緩存分區.相當于recvery中的"wipe data/factory reset"
-s <串口號> 置頂要操作的設備的串口號
-p <產品名> 指定要操作的設備的產品名.比如hero,bravo,dream...
-c <命令行> 用命令行替換系統的啟動命令行.
分區解釋: system:系統分區.我們刷機器一般就是刷的這個分區.
userdata:數據分區.
cache:緩存分區
recovery:Recovery分區.
boot:存放內核和ramdisk的分區.
hboot:這個是SPL所在的分區.很重要哦.也是fastboot所在的分區.刷錯就真的變磚了.
splash1:這個就是開機第一屏幕了.
radio:這個是無線所在的分區.
misc:其他分區.放的是htc的一些東西.]
http://leox.iteye.com/blog/975303
http://blogold.chinaunix.net/u/14459/showart_1911144.html
(muddogxp 原創,轉載請注明)
Recovery簡介
Android利用Recovery模式,進行恢復出廠設置,OTA升級,patch升級及firmware升級。
升級一般通過運行升級包中的META-INF/com/google/android/update-script腳本來執行自定義升級,腳本中是一組recovery系統能識別的UI控制,文件系統操作命令,例如write_raw_image(寫FLASH分區),copy_dir(復制目錄)。該包一般被下載至SDCARD和CACHE分區下。如果對該包內容感興趣,可以從http://forum.xda-developers.com/showthread.php?t=442480下載JF升級包來看看。
升級中還涉及到包的數字簽名,簽名方式和普通JAR文件簽名差不錯。公鑰會被硬編譯入recovery,編譯時生成在:out/target/product/XX/obj/PACKAGING/ota_keys_inc_intermediates/keys.inc
G1中的三種啟動模式
MAGIC KEY:
Bootloader正常啟動,又有三種方式,按照BCB(Bootloader Control Block, 下節介紹)中的command分類:
Recovery涉及到的其他系統及文件
-
-
/cache/recovery/command: recovery命令,由主系統寫入。所有命令如下:
-
--send_intent=anystring - write the text out to recovery.intent
-
--update_package=root:path - verify install an OTA package file
-
--wipe_data - erase user data (and cache), then reboot
-
--wipe_cache - wipe cache (but not user data), then reboot
-
/cache/recovery/log:recovery過程日志,由主系統讀出
-
/cache/recovery/intent:recovery輸出的intent
Recovery 工具通過NAND cache分區上的三個文件和主系統打交道。主系統(包括恢復出廠設置和OTA升級)可以寫入recovery所需的命令,讀出recovery過程中的LOG和intent。
-
MISC分區內容
Bootloader Control Block (BCB) 存放recovery bootloader message。結構如下:
struct bootloader_message {
char command[32];
char status[32]; // 未知用途
char recovery[1024];
};
-
command可以有以下兩個值
“boot-recovery”:標示recovery正在進行,或指示bootloader應該進入recovery mode
“update-hboot/radio”:指示bootloader更新firmware
-
recovery內容
“recovery\n
<recovery command>\n
<recovery command>”
其中recovery command為CACHE:/recovery/command命令
兩種Recovery Case
-
用戶選擇“恢復出廠設置”
-
設置系統將"--wipe_data"命令寫入/cache/recovery/command
-
系統重啟,并進入recover模式(/sbin/recovery)
-
get_args() 將 "boot-recovery"和"--wipe_data"寫入BCB
-
erase_root() 格式化(擦除)DATA分區
-
erase_root() 格式化(擦除)CACHE分區
-
finish_recovery() 擦除BCB
-
重啟系統
-
升級系統下載 OTA包到/cache/some-filename.zip
-
升級系統寫入recovery命令"--update_package=CACHE:some-filename.zip"
-
重啟,并進入recovery模式
-
get_args() 將"boot-recovery" 和 "--update_package=..." 寫入BCB
-
install_package() 作升級
-
finish_recovery() 擦除 BCB
-
** 如果安裝包失敗 ** prompt_and_wait() 等待用戶操作,選擇ALT+S或ALT+W 升級或恢復出廠設置
-
main() 調用 maybe_install_firmware_update()
-
如果包里有hboot/radio的firmware則繼續,否則返回
-
將 "boot-recovery" 和 "--wipe_cache" 寫入BCB
-
將 firmware image寫入cache分區
-
將 "update-radio/hboot" 和 "--wipe_cache" 寫入BCB
-
重啟系統
-
bootloader自身更新firmware
-
bootloader 將 "boot-recovery" 寫入BCB
-
erase_root() 擦除CACHE分區
-
清除 BCB
-
main() 調用 reboot() 重啟系統
Recovery模式流程
/init → init.rc → /sbin/recovery →
main():recovery.c
-
ui_init():ui.c [UI initialize]
-
gr_init():minui/graphics.c [set tty0 to graphic mode, open fb0]
-
ev_init():minui/events.c [open /dev/input/event*]
-
res_create_surface:minui/resource.c [create surfaces for all bitmaps used later, include icons, bmps]
-
create 2 threads: progress/input_thread [create progress show and input event handler thread]
-
get_args():recovery.c
-
get_bootloader_message():bootloader.c [read mtdblock0(misc partition) 2nd page for commandline]
-
check if nand misc partition has boot message. If yes, fill argc/argv.
-
If no, get arguments from /cache/recovery/command, and fill argc/argv.
-
set_bootloader_message():bootloader.c [set bootloader message back to mtdblock0]
-
Parser argv[] filled above
-
register_update_commands():commands.c [ register all commands with name and hook function ]
-
install_package():
-
translate_root_path():roots.c [ "SYSTEM:lib" and turns it into a string like "/system/lib", translate the updater.zip path ]
-
mzOpenZipArchive():zip.c [ open updater.zip file (uncompass) ]
-
handle_update_package():install.c
-
verify_jar_signature():verifier.c [ verify signature with keys.inc key; verify manifest and zip package archive ]
-
verifySignature() [ verify the signature file: CERT.sf/rsa. ]
-
digestEntry():verifier.c [ get SHA-1 digest of CERT.sf file ]
-
RSA_verify(public key:keys.inc, signature:CERT.rsa, CERT.sf's digest):libc/rsa.c [ Verify a 2048 bit RSA PKCS1.5 signature against an expected SHA-1 hash. Use public key to decrypt the CERT.rsa to get original SHA digest, then compare to digest of CERT.sf ]
-
verifyManifest() [ Get manifest SHA1-Digest from CERT.sf. Then do digest to MANIFEST.MF. Compare them ]
-
verifyArchive() [ verify all the files in update.zip with digest listed in MANIFEST.MF ]
-
find_update_script():install.c [ find META-INF/com/google/android/update-script updater script ]
-
handle_update_script():install.c [ read cmds from script file, and do parser, exec ]
-
erase DATA/CACHE partition
-
prompt_and_wait():recovery.c [ wait for user input: 1) reboot 2) update.zip 3) wipe data ]
-
ui_key_xxx get ALT+x keys
-
1) do nothing
-
2) install_package('SDCARD:update.zip')
-
3) erase_root() → format_root_device() DATA/CACHE
-
may_install_firmware_update():firmware.c [ remember_firmware_update() is called by write_hboot/radio_image command, it stores the bootloader image to CACHE partition, and write update-hboot/radio command to MISC partition for bootloader message to let bootloader update itself after reboot ]
-
finish_recovery():recovery.c [ clear the recovery command and prepare to boot a (hopefully working) system, copy our log file to cache as well (for the system to read), and record any intent we were asked to communicate back to the system. ]
-
reboot()
Recovery模式流程圖
以下流程圖繪制了系統從啟動加載bootloader后的行為流程。
沒有床,見blog吧~
實際使用的例子:
adb shell "echo \"send_intent=xxx\" > /cache/recovery/command"
adb shell "echo \"--update_package=SDCARD:update.zip\" >> /cache/recovery/command"
adb shell sync
adb reboot recovery