运行编译系统

本页提供了关于在特定设备上运行编译系统的详细信息,是对编译系统部分的补充。

编译 fastboot 和 adb

如果您还没有 fastboot 和 adb,则可以使用常规编译系统来编译。请按照编译系统中的说明操作,将主 make 命令替换为以下命令:

$ make fastboot adb

启动进入 fastboot 模式

Fastboot 是一种引导加载程序模式,您可以在该模式下刷写设备。在设备冷启动过程中,可使用以下组合键进入 fastboot 模式:

代号 设备 组合键
marlinPixel XL 按住音量调低键,然后按住电源键
sailfish Pixel 按住音量调低键,然后按住电源键
hikey hikey 连接 J15 的引脚 1-2 和 5-6
angler Nexus 6P 按住音量调低键,然后按住电源键
bullhead Nexus 5X 按住音量调低键,然后按住电源键
shamu Nexus 6 按住音量调低键,然后按住电源键
fugu Nexus Player 按住电源键
volantis Nexus 9 按住音量调低键,然后按住电源键
hammerhead Nexus 5 同时按住音量调高键和音量调低键,然后按住电源键
flo Nexus 7 按住音量调低键,然后按住电源键
deb Nexus 7 3G 按住音量调低键,然后按住电源键
manta Nexus 10 同时按住音量调高键和音量调低键,然后按住电源键
mako Nexus 4 按住音量调低键,然后按住电源键
grouper Nexus 7 (2012) 按住音量调低键,然后按住电源键
tilapia Nexus 7 3G (2012) 按住音量调低键,然后按住电源键
phantasm Nexus Q 启动设备,LED 指示灯亮起后用一只手盖住设备,直至指示灯变成红色
maguro Galaxy Nexus GSM 同时按住音量调高键和音量调低键,然后按住电源键
toro Galaxy Nexus (Verizon) 同时按住音量调高键和音量调低键,然后按住电源键
toroplus Galaxy Nexus (Sprint) 同时按住音量调高键和音量调低键,然后按住电源键
wingray Motorola Xoom 按住音量调低键,然后按住电源键
crespo Nexus S 按住音量调高键,然后按住电源键
crespo4g Nexus SG 按住音量调高键,然后按住电源键

您还可以使用命令 adb reboot bootloader 直接在 Android 系统中重新启动进入引导加载程序,而无需使用任何组合键。

解锁引导加载程序

只有在引导加载程序允许的情况下,您才可以刷写定制系统,而引导加载程序默认处于锁定状态。您可以解锁引导加载程序,但这样做会导致系统出于保护隐私方面的考虑而删除用户数据。解锁之后,系统会清空设备上的所有数据,即应用中的个人数据以及可通过 USB 访问的共享数据(包括照片和影片)。请务必先备份设备上的所有重要文件,然后再尝试解锁引导加载程序。

您只需解锁引导加载程序一次即可,并可视需要将其重新锁定。

解锁新款设备

自 2014 年以来发布的所有 Nexus 和 Pixel 设备(从 Nexus 6 和 Nexus 9 开始)都内置有恢复出厂设置保护功能,需要通过多个步骤才能解锁引导加载程序。

  1. 在设备上启用 OEM 解锁:
    1. 在“设置”中,点按关于手机,然后点按版本号七 (7) 次。
    2. 当看到“您已处于开发者模式”这条消息后,点按返回按钮。
    3. 点按开发者选项,然后启用 OEM 解锁USB 调试。(如果 OEM 解锁处于停用状态,请连接到互联网,以便设备可以至少签到一次。如果 OEM 解锁仍处于停用状态,则说明您的设备可能已被运营商锁定 SIM 卡,系统无法解锁引导加载程序。)
  2. 重新启动进入引导加载程序,然后使用 fastboot 解锁。
    • 对于新款设备(2015 年及之后发布的设备):$ fastboot flashing unlock
    • 对于老款设备(2014 年及之前发布的设备):$ fastboot oem unlock
    您必须在屏幕上确认解锁。

注意:在 Nexus 10 上,解锁引导加载程序后,内部存储仍保持未格式化状态。您可以依次使用 fastboot format cachefastboot format userdata 来格式化设备

重新锁定引导加载程序

要重新锁定引导加载程序,请执行以下命令:

  • 对于新款设备(2015 年及之后发布的设备):$ fastboot flashing lock
  • 对于老款设备(2014 年及之后发布的设备):$ fastboot oem lock

注意:在 Motorola Xoom 上重新锁定引导加载程序会清空用户数据(包括共享的 USB 数据)。

使用刷写解锁

Android 7.0 包含一个新的系统 API getFlashLockState()(用于传输引导加载程序状态)以及以下系统 API(用于返回兼容设备上引导加载程序的锁定状态):

PersistentDataBlockManager.getFlashLockState()
返回的值 条件
FLASH_LOCK_UNKNOWN

仅升级到 Android 7.0 的符合以下条件的设备会返回此值:设备支持刷写锁定/解锁功能,但尚不支持获取刷写锁定状态所需的引导加载程序变更。

新款 Android 7.0 设备必须处于 FLASH_LOCK_LOCKEDFLASH_LOCK_UNLOCKED 状态。如果某设备升级到了 Android 7.0,且不支持刷写解锁/锁定功能,则应仅会返回 FLASH_LOCK_LOCKED 状态。

FLASH_LOCK_LOCKED 不支持刷写锁定/解锁的设备(即设备始终处于锁定状态)或支持刷写锁定/解锁且处于锁定状态的设备应该会返回此值。
FLASH_LOCK_UNLOCKED 支持刷写锁定/解锁且当前处于已解锁状态的设备会返回此值。

示例和源代码

AOSP 包含参考实现代码,根据 ro.boot.flash.locked 启动属性返回值。具体代码位于以下目录中:

frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java

验证

制造商应测试已锁定引导加载程序的设备和已解锁引导加载程序的设备返回的值。

选择设备编译系统

启动菜单中提供了建议的设备编译系统,在不使用任何参数的情况下运行 lunch 命令即可查看。您可以从 developers.google.com 下载 Nexus 设备的出厂映像和二进制文件:

有关详情以及其他资源,请参阅获取专有二进制文件设备二进制文件要求

设备 代号 编译配置
Pixel XL marlin aosp_marlin-userdebug
Pixel sailfish aosp_sailfish-userdebug
HiKey hikey hikey-userdebug
Nexus 6P angler aosp_angler-userdebug
Nexus 5X bullhead aosp_bullhead-userdebug
Nexus 6 shamu aosp_shamu-userdebug
Nexus Player fugu aosp_fugu-userdebug
Nexus 9 volantis (flounder) aosp_flounder-userdebug
Nexus 5 (GSM/LTE) hammerhead aosp_hammerhead-userdebug
Nexus 7 (WLAN) razor (flo) aosp_flo-userdebug
Nexus 7(移动版) razorg (deb) aosp_deb-userdebug
Nexus 10 mantaray (manta) full_manta-userdebug
Nexus 4 occam (mako) full_mako-userdebug
Nexus 7 (WLAN) nakasi (grouper) full_grouper-userdebug
Nexus 7(移动版) nakasig (tilapia) full_tilapia-userdebug
Galaxy Nexus (GSM/HSPA+) yakju (maguro) full_maguro-userdebug
Galaxy Nexus (Verizon) mysid (toro) aosp_toro-userdebug
Galaxy Nexus(试验版) mysidspr (toroplus) aosp_toroplus-userdebug
Motorola Xoom(美国 WLAN 版) wingray full_wingray-userdebug
Nexus S soju (crespo) full_crespo-userdebug
Nexus S 4G sojus (crespo4g) full_crespo4g-userdebug

注意:请不要在原本搭载 Android 4.1.2 或更高版本的 Nexus 7 上使用 Android 4.1.1。

刷写设备

您可以通过运行一个命令来刷写整个 Android 系统;这样做可验证正在刷写的系统与已安装的引导加载程序和无线通信模块的驱动程序是否兼容,还可以将启动、恢复和系统分区一起写入,然后重新启动系统。与 fastboot oem unlock 类似,刷写设备也会清空所有用户数据。

您可以通过两种方式使设备进入 fastboot 模式:在启动时按住相应的组合键手动实现此操作;从 shell 运行以下命令:

$ adb reboot bootloader

在设备处于 fastboot 模式后,运行以下命令:

$ fastboot flashall -w

-w 选项会清除设备上的 /data 分区;该选项在您第一次刷写特定设备时非常有用,但在其他情况下则没必要使用。

注意:在 Motorola Xoom 上通过 fastboot 创建的文件系统无法发挥最佳作用。建议您使用 $ adb reboot recovery 命令通过恢复功能来重新创建文件系统。在执行恢复操作时,打开菜单(同时按电源键和音量调高键),清除缓存分区,然后清除数据。

将设备恢复到出厂状态

您可以在 Google 的出厂映像页面上查看 Nexus 5、Nexus 10、Nexus 4、Nexus Q、Nexus 7、Galaxy Nexus(GSM/HSPA+“yakju”和“takju”,CDMA/LTE“mysid”和“mysidspr”)、Nexus S 和 Nexus S 4G 的出厂映像。

Motorola Xoom 的出厂映像由 Motorola 直接提供。