Android开发环境配置2:详解Recovery

不管是尝试对Android手机进行刷机的普通用户,还是刚接触Android应用开发的开发者,都会接触到Recovery。本文将从什么是Recovery,怎么在Android设备中安装Recovery环境,如何使用Recovery几个方面对Android Recovery进行介绍。

What is Recovery

通常,在Android设备中会预装Recovery环境,可以用于还原出厂设置、升级操作系统、以及进行问题诊断等。

从类别上,Recovery环境分为两种,Google官方的(the Stock Recovery)Recovery环境和第三方的Recovery环境(the Custom Recovery)。

1、the Stock Recovery

Google官方的Recovery环境提供的功能十分有限,主要包括:

  • 重置出厂设置,清除所有数据
  • 擦除cache分区
  • 刷入官方的升级文件来升级系统

2、the Custom Recovery

针对Google官方Recovery环境功能的不足,许多组织、机构或个人定制了功能更为强大的Recovery环境,统称为第三方Recovery环境。当前最为流行的有两个:ClockworkMod Recovery (CWM)、Team Win Recovery Project (TWRP)。

第三方Recovery环境除了具有Google官方Recovery环境的功能外,还增加了其它特性,主要包括:

  • 创建、恢复系统备份
  • 安装自定义的ROM
  • 安装、删除应用程序

How to Install Recovery

通常,Android设备出厂时都会带有官方的Recovery环境。如果我们需要获取更多的功能,就需要自己安装第三方Recovery环境来替换官方的Recovery环境。

1、准备工作(Prerequisites)

  • 配置Android调试环境:安装adb和fastboot工具,开启USB调试模式(USB debugging),建立手机与电脑之间的USB调试连接。
  • Android设备的Bootloader已完成解锁(unlocked)。
  • 下载第三方Recovery镜像包,例如,openrecovery-twrp-2.8.7.1-hammerhead.img

2、切换至fastboot模式

flash操作前,先将设备切换至fastboot模式。

1
$ adb reboot bootloader

通过fastboot devices命令可以查看到手机与电脑直接的连接状态。

1
2
$ fastboot devices
03f7fc7ad0081a10 fastboot

3、安装Custom Recovery

fastboot模式下,在电脑的命令终端中执行如下命令,写入recovery.img,并进行重启。

1
2
3
4
5
6
7
8
9
10
$ fastboot flash recovery openrecovery-twrp-2.8.7.1-hammerhead.img
sending 'recovery' (14694 KB)...
OKAY [ 0.709s]
writing 'recovery'...
OKAY [ 1.133s]
finished. total time: 1.842s

$ fastboot reboot
rebooting...
finished. total time: 0.408s

How to Use Recovery

进入Recovery环境

在手机开机状态下,可以通过如下命令进入Recovery环境。

1
2
3
$ adb reboot recovery
$ adb shell
~ #

从上可以看出,在Recovery环境下,用户具有root权限。

在Recovery环境的手机资源管理器中安装zip格式的软件

如果要安装某些root权限的软件,例如SuperSU.zip,而手机却没有root权限,就可以在Recovery环境下进行安装。

Recovery环境下,将要安装的应用程序安装包push至手机任意文件夹。

1
2
$ adb push UPDATE-SuperSU-v2.46.zip /sdcard/!ReadyToFlash/Root_Files/UPDATE-SuperSU-v2.46.zip
4604 KB/s (4017098 bytes in 0.852s)

然后在手机Recovery环境的资源管理器中找到该文件,点击安装即可。

采用sideload方式安装zip格式的软件

Recovery环境下,在手机端开启ADB Sideload,开启后,可以看到手机处于sideload模式。

1
2
3
$ adb devices
List of devices attached
03f7fc7ad0081a10 sideload

采用adb sideload <filename.Zip>命令,即可进行zip软件包的安装。

1
2
$ adb sideload busybox-signed.zip
Total xfer: 1.24x

在手机端可以看到如下日志信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
Undating partition details...
...done
Full SELinux support is present.
MTP enabled
Starting ADB sideload feature ...
Installing '/sideload/package.zip'...
************************
Install Busybox apk
************************
- Mounting file systems ...
- Installing Busybox free ...
- Unmounting file system ...
Done!

在Recovery启动过程中执行命令

对于2.1及以上版本的TWRP Recovery中,可以使用OpenRecoveryScript引擎,在TWRP Recovery启动时执行命令。

具体的方式为,在Android设备的/cache/recovery/目录下创建openrecoveryscript文件,并在其中写入执行命令。

例如:

1
2
3
4
5
# /cache/recovery/openrecoveryscript
set tw_signed_zip_verify 0
install /data/local/tmp/perm-recovery-signed.zip
install /data/local/tmp/UPDATE-SuperSU-v2.46.zip
install /data/local/tmp/busybox-signed.zip