| <html devsite><head> |
| <title>运行编译系统</title> |
| <meta name="project_path" value="/_project.yaml"/> |
| <meta name="book_path" value="/_book.yaml"/> |
| </head> |
| <body> |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p>本页提供了关于在特定设备上运行编译系统的详细信息,是对<a href="/source/building.html">编译系统</a>部分的补充。</p> |
| |
| <h2 id="building-fastboot-and-adb">编译 fastboot 和 adb</h2> |
| <p>如果您还没有 fastboot 和 adb,则可以使用常规编译系统来编译。请按照<a href="/source/building.html">编译系统</a>中的说明操作,将主 <code>make</code> 命令替换为以下命令:</p> |
| <pre><code>$ make fastboot adb |
| </code></pre> |
| |
| <h2 id="booting-into-fastboot-mode">启动进入 fastboot 模式</h2> |
| <p><em></em>Fastboot 是一种引导加载程序模式,您可以在该模式下刷写设备。在设备冷启动过程中,可使用以下组合键进入 fastboot 模式:</p> |
| <table> |
| <thead> |
| <tr> |
| <th>代号</th> |
| <th>设备</th> |
| <th>组合键</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>marlin</td><td>Pixel XL</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>sailfish</td> |
| <td>Pixel</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>hikey</td> |
| <td>hikey</td> |
| <td>连接 J15 的引脚 1-2 和 5-6</td> |
| </tr> |
| <tr> |
| <td>angler</td> |
| <td>Nexus 6P</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>bullhead</td> |
| <td>Nexus 5X</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>shamu</td> |
| <td>Nexus 6</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>fugu</td> |
| <td>Nexus Player</td> |
| <td>按住电源键<em></em></td> |
| </tr> |
| <tr> |
| <td>volantis</td> |
| <td>Nexus 9</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>hammerhead</td> |
| <td>Nexus 5</td> |
| <td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>flo</td> |
| <td>Nexus 7</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>deb</td> |
| <td>Nexus 7 3G</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>manta</td> |
| <td>Nexus 10</td> |
| <td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>mako</td> |
| <td>Nexus 4</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>grouper</td> |
| <td>Nexus 7 (2012)</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>tilapia</td> |
| <td>Nexus 7 3G (2012)</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>phantasm</td> |
| <td>Nexus Q</td> |
| <td>启动设备,LED 指示灯亮起后用一只手盖住设备,直至指示灯变成红色</td> |
| </tr> |
| <tr> |
| <td>maguro</td> |
| <td>Galaxy Nexus GSM</td> |
| <td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>toro</td> |
| <td>Galaxy Nexus (Verizon)</td> |
| <td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>toroplus</td> |
| <td>Galaxy Nexus (Sprint)</td> |
| <td>同时按住音量调高键和音量调低键,然后按住电源键<em></em><em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>wingray</td> |
| <td>Motorola Xoom</td> |
| <td>按住音量调低键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>crespo</td> |
| <td>Nexus S</td> |
| <td>按住音量调高键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| <tr> |
| <td>crespo4g</td> |
| <td>Nexus SG</td> |
| <td>按住音量调高键,然后按住电源键<em></em><em></em></td> |
| </tr> |
| </tbody> |
| </table> |
| <p>您还可以使用命令 <code>adb reboot bootloader</code> 直接在 Android 系统中重新启动进入引导加载程序,而无需使用任何组合键。</p> |
| |
| <h2 id="unlocking-the-bootloader">解锁引导加载程序</h2> |
| |
| <p>只有在引导加载程序允许的情况下,您才可以刷写定制系统,而引导加载程序默认处于锁定状态。您可以解锁引导加载程序,但这样做会导致系统出于保护隐私方面的考虑而删除用户数据。<em></em>解锁之后,系统会清空设备上的所有数据,即应用中的个人数据以及可通过 USB 访问的共享数据(包括照片和影片)。请务必先备份设备上的所有重要文件,然后再尝试解锁引导加载程序。</p> |
| |
| <p>您只需解锁引导加载程序一次即可,并可视需要将其重新锁定。</p> |
| |
| <h3>解锁新款设备</h3> |
| <p>自 2014 年以来发布的所有 Nexus 和 Pixel 设备(从 Nexus 6 和 Nexus 9 开始)都内置有恢复出厂设置保护功能,需要通过多个步骤才能解锁引导加载程序。</p> |
| |
| <ol> |
| <li>在设备上启用 OEM 解锁: |
| <ol style="list-style-type:lower-alpha"> |
| <li>在“设置”中,点按<strong>关于手机</strong>,然后点按<strong>版本号</strong>七 (7) 次。</li> |
| <li>当看到“您已处于开发者模式”这条消息后,点按返回按钮。</li> |
| <li>点按<strong>开发者选项</strong>,然后启用 <strong>OEM 解锁</strong>和 <strong>USB 调试</strong>。(如果 OEM 解锁处于停用状态,请连接到互联网,以便设备可以至少签到一次。如果 OEM 解锁仍处于停用状态,则说明您的设备可能已被运营商锁定 SIM 卡,系统无法解锁引导加载程序。)</li></ol></li> |
| <li>重新启动进入引导加载程序,然后使用 fastboot 解锁。 |
| <ul> |
| <li>对于新款设备(2015 年及之后发布的设备):<code>$ fastboot flashing unlock</code> |
| </li> |
| <li>对于老款设备(2014 年及之前发布的设备):<code>$ fastboot oem |
| unlock</code></li></ul>您必须在屏幕上确认解锁。</li></ol> |
| |
| <p class="note"><strong>注意</strong>:在 Nexus 10 上,解锁引导加载程序后,内部存储仍保持未格式化状态。您可以依次使用 <code>fastboot format cache</code> 和 <code>fastboot format userdata</code> 来格式化设备</p> |
| |
| <h3 id="relocking-the-bootloader">重新锁定引导加载程序</h3> |
| <p>要重新锁定引导加载程序,请执行以下命令:</p> |
| <ul> |
| <li>对于新款设备(2015 年及之后发布的设备):<code>$ fastboot flashing lock</code></li> |
| <li>对于老款设备(2014 年及之后发布的设备):<code>$ fastboot oem lock</code></li> |
| </ul> |
| |
| <p class="note"><strong>注意</strong>:在 Motorola Xoom 上重新锁定引导加载程序会清空用户数据(包括共享的 USB 数据)。</p> |
| |
| <h2 id="flash-unlock">使用刷写解锁</h2> |
| |
| <p>Android 7.0 包含一个新的系统 API <code>getFlashLockState()</code>(用于传输引导加载程序状态)以及以下系统 API(用于返回兼容设备上引导加载程序的锁定状态):</p> |
| |
| <pre> |
| PersistentDataBlockManager.getFlashLockState() |
| </pre> |
| |
| <table> |
| <tbody><tr> |
| <th>返回的值</th> |
| <th>条件</th> |
| </tr> |
| <tr> |
| <td><code>FLASH_LOCK_UNKNOWN</code> |
| </td> |
| <td><p>仅升级到 Android 7.0 的符合以下条件的设备会返回此值:设备支持刷写锁定/解锁功能,但尚不支持获取刷写锁定状态所需的引导加载程序变更。</p> |
| <p>新款 Android 7.0 设备必须处于 <code>FLASH_LOCK_LOCKED</code> 或 <code>FLASH_LOCK_UNLOCKED</code> 状态。如果某设备升级到了 Android 7.0,且不支持刷写解锁/锁定功能,则应仅会返回 <code>FLASH_LOCK_LOCKED</code> 状态。</p> |
| </td> |
| </tr> |
| <tr> |
| <td><code>FLASH_LOCK_LOCKED</code> |
| </td> |
| <td>不支持刷写锁定/解锁的设备(即设备始终处于锁定状态)或支持刷写锁定/解锁且处于锁定状态的设备应该会返回此值。 |
| </td> |
| </tr> |
| <tr> |
| <td><code>FLASH_LOCK_UNLOCKED</code> |
| </td> |
| <td>支持刷写锁定/解锁且当前处于已解锁状态的设备会返回此值。 |
| </td> |
| </tr> |
| </tbody></table> |
| |
| <h3 id="examples-and-source">示例和源代码</h3> |
| |
| <p>AOSP 包含参考实现代码,根据 <code>ro.boot.flash.locked</code> 启动属性返回值。具体代码位于以下目录中:</p> |
| |
| <pre> |
| frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java |
| frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java |
| </pre> |
| |
| <h3 id="validation">验证</h3> |
| <p>制造商应测试已锁定引导加载程序的设备和已解锁引导加载程序的设备返回的值。</p> |
| |
| <h2 id="selecting-device-build">选择设备编译系统</h2> |
| |
| <p>启动菜单中提供了建议的设备编译系统,在不使用任何参数的情况下运行 <code>lunch</code> 命令即可查看。您可以从 developers.google.com 下载 Nexus 设备的出厂映像和二进制文件:</p> |
| |
| <ul> |
| <li><a href="https://developers.google.com/android/nexus/blobs-preview">预览二进制文件 (Blob)</a></li> |
| <li><a href="https://developers.google.com/android/nexus/images">已发布设备的出厂映像</a></li> |
| <li><a href="https://developers.google.com/android/nexus/drivers">已发布设备的支持二进制文件(驱动程序)</a></li> |
| </ul> |
| |
| <p>有关详情以及其他资源,请参阅<a href="building.html#obtaining-proprietary-binaries">获取专有二进制文件</a>和<a href="requirements.html#binaries">设备二进制文件要求</a>。</p> |
| |
| <table> |
| <thead> |
| <tr> |
| <th>设备</th> |
| <th>代号</th> |
| <th>编译配置</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>Pixel XL</td> |
| <td>marlin</td> |
| <td>aosp_marlin-userdebug</td> |
| </tr> |
| <tr> |
| <td>Pixel</td> |
| <td>sailfish</td> |
| <td>aosp_sailfish-userdebug</td> |
| </tr> |
| <tr> |
| <td>HiKey</td> |
| <td>hikey</td> |
| <td>hikey-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 6P</td> |
| <td>angler</td> |
| <td>aosp_angler-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 5X</td> |
| <td>bullhead</td> |
| <td>aosp_bullhead-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 6</td> |
| <td>shamu</td> |
| <td>aosp_shamu-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus Player</td> |
| <td>fugu</td> |
| <td>aosp_fugu-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 9</td> |
| <td>volantis (flounder)</td> |
| <td>aosp_flounder-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 5 (GSM/LTE)</td> |
| <td>hammerhead</td> |
| <td>aosp_hammerhead-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 7 (WLAN)</td> |
| <td>razor (flo)</td> |
| <td>aosp_flo-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 7(移动版)</td> |
| <td>razorg (deb)</td> |
| <td>aosp_deb-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 10</td> |
| <td>mantaray (manta)</td> |
| <td>full_manta-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 4</td> |
| <td>occam (mako)</td> |
| <td>full_mako-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 7 (WLAN)</td> |
| <td>nakasi (grouper)</td> |
| <td>full_grouper-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus 7(移动版)</td> |
| <td>nakasig (tilapia)</td> |
| <td>full_tilapia-userdebug</td> |
| </tr> |
| <tr> |
| <td>Galaxy Nexus (GSM/HSPA+)</td> |
| <td>yakju (maguro)</td> |
| <td>full_maguro-userdebug</td> |
| </tr> |
| <tr> |
| <td>Galaxy Nexus (Verizon)</td> |
| <td>mysid (toro)</td> |
| <td>aosp_toro-userdebug</td> |
| </tr> |
| <tr> |
| <td>Galaxy Nexus(试验版)</td> |
| <td>mysidspr (toroplus)</td> |
| <td>aosp_toroplus-userdebug</td> |
| </tr> |
| <tr> |
| <td>Motorola Xoom(美国 WLAN 版)</td> |
| <td>wingray</td> |
| <td>full_wingray-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus S</td> |
| <td>soju (crespo)</td> |
| <td>full_crespo-userdebug</td> |
| </tr> |
| <tr> |
| <td>Nexus S 4G</td> |
| <td>sojus (crespo4g)</td> |
| <td>full_crespo4g-userdebug</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <p class="note"><b>注意</b>:请不要在原本搭载 Android 4.1.2 或更高版本的 Nexus 7 上使用 Android 4.1.1。</p> |
| |
| <h2 id="flashing-a-device">刷写设备</h2> |
| |
| <p>您可以通过运行一个命令来刷写整个 Android 系统;这样做可验证正在刷写的系统与已安装的引导加载程序和无线通信模块的驱动程序是否兼容,还可以将启动、恢复和系统分区一起写入,然后重新启动系统。与 <code>fastboot oem |
| unlock</code> 类似,刷写设备也会清空所有用户数据。</p> |
| |
| <p>您可以通过两种方式使设备进入 fastboot 模式:在启动时按住相应的组合键手动实现此操作;从 shell 运行以下命令:</p> |
| |
| <pre> |
| $ adb reboot bootloader |
| </pre> |
| |
| <p>在设备处于 fastboot 模式后,运行以下命令:</p> |
| |
| <pre> |
| $ fastboot flashall -w |
| </pre> |
| |
| <p><code>-w</code> 选项会清除设备上的 <code>/data</code> 分区;该选项在您第一次刷写特定设备时非常有用,但在其他情况下则没必要使用。</p> |
| |
| <p class="note"><strong>注意</strong>:在 Motorola Xoom 上通过 fastboot 创建的文件系统无法发挥最佳作用。建议您使用 <code>$ adb reboot recovery</code> 命令通过恢复功能来重新创建文件系统。在执行恢复操作时,打开菜单(同时按电源键和音量调高键),清除缓存分区,然后清除数据。</p> |
| |
| <h2 id="restoring-devices-to-factory-state">将设备恢复到出厂状态</h2> |
| |
| <p>您可以在 <a href="https://developers.google.com/android/nexus/images">Google 的出厂映像</a>页面上查看 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 的出厂映像。</p> |
| |
| <p>Motorola Xoom 的出厂映像由 Motorola 直接提供。</p> |
| |
| </body></html> |