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