按月彙整:一月 2015

【保留數據刷機】Nexus 5和Nexus 10以OTA方式從Android 5.0升級5.0.1、從5.0.1升級5.0.2、從5.0.2升級5.1、從5.1升級5.1.1、從5.1.1升級6.0失敗後的解決辦法

註:Nexus 10只能升級到5.1.1。

本文以Nexus 10從Android 5.0升級5.0.1為例做講解。Nexus 5亦可按相似步驟操作。

設備已root。接到OTA後開始升級,設備重啓後失敗,提示/system/bin/install-recovery.sh has unexpected contents等錯誤。
重啓進入系統,永久取消root。以sideload方式刷升級包,依然失敗。
於是我試着按照錯誤提示,一步步修改升級包中的updater-script,將引發錯誤的動作註釋掉,然後把updater-script重新灌入升級包,逐漸消除報錯信息。等徹底沒有錯誤時,發現升級完之後設備卡在開機動畫那裡。

看來刷升級包是不太容易了,後來,找到下面這種解決辦法,通過刷原廠鏡像來升級:
https://developers.google.com/android/nexus/images 下載5.0.1工廠鏡像。
按照Massimiliano Ferrari所寫 http://techforpassion.blogspot.tw/2013/11/flash-android-factory-image-without-wiping-device-after-failed-ota-update-unbrick.html 一文,在不清除用戶數據前提下刷入原廠鏡像。

那篇文章的重點就是修改與系統總鏡像(例如image-mantaray-lrx22g.zip)處在同一目錄下的flash-all.shflash-all.bat文件,把可能清除用戶數據的命令或參數刪掉。例如,對於用Ubuntu系統來刷機的用戶來說,可以刪除flash-all.sh文件中的fastboot erase userdata命令行,以及fastboot -w update xxx.zip命令行中的-w選項xxx.zip為系統總鏡像的文件名,下文中的xxx.img為bootloader鏡像的文件名;另外請注意:如果刷Nexus 5,那麼只需把fastboot update那一行的-w去掉即可),使得該文件變成如下形式:

#!/bin/sh

# Copyright 2012 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.

fastboot erase boot
fastboot erase cache
fastboot erase recovery
fastboot erase system
fastboot flash bootloader xxx.img
fastboot reboot-bootloader
sleep 5
fastboot update xxx.zip

 

把設備和電腦相連,最好連接到機箱後面的面版。然後在終端機裡用adb devices命令看看設備是否正常連上,如果attached一欄顯示no permissions,那就執行sudo adb kill-server及sudo adb start-server,然後重新執行adb devices。

如果attached一欄顯示offline,則可以點擊設置界面中「開發人員選項」裡的「撤銷USB偵錯授權」按鈕,然後把「USB偵錯」開關關掉,再打開,重新給電腦授予調試設備的權限。再次用adb devices命令查看,如果attached一欄顯示device,則說明正常。

在更換數據線或把多臺設備連到同一臺電腦時,可能出現這兩個問題。

通過adb reboot-bootloader命令,將設備重啓到bootloader模式,然後用修改好的flash-all.sh文件刷機即可。Windows用戶需要修改的是flash-all.bat,並且需要用它來刷機。

注意事項:

  • 如果從命令行裡執行flash-all.sh文件,那麼執行前,請先將工作目錄切換到該文件所在目錄,因為flash-all.sh還要用到其它一些文件,而那些文件,通常都會放在與flash-all.sh相同的目錄之中。
  • 可能需要用sudo來執行flash-all.sh
  • 如果提示找不到fastboot命令,那麼可以通過apt-get或Synaptic安裝相應的工具,或者把那些刷機文件都放到android sdk的platform-tools目錄下,並把flash-all.sh中的fastboot改為./fastboot
  • 如果電腦是臺式機,那麼最好把數據線插到機箱後面版。

設備重啓後可能依然卡在開機動畫那裡(Nexus 5以不清除用戶數據的方式,從5.0.1升級到5.1時,沒有這種現象)。

如果真的卡住了,那就通過adb reboot recovery命令,使設備進入recovery模式,發現屏幕上提示failed to mount /cache字樣。此時可以先按下電源鍵不放,然後按音量提高鍵,待屏幕上出現菜單之後,鬆開兩鍵。通過wipe cache操作來格式化cache分區。此步驟比較耗時,需耐心等待。

重啓設備,這次也要在啓動動畫那裡停留一段時間。

經過軟件升級步驟之後,已能順利進入5.0.1系統。

進入bootloader模式刷root包,再重啓設備,這次順利進入5.0.1系統,且已具備root權限。
注意:刷好root包後重啓的時候,設備可能會黑屏。此時可以按住電源鍵不放,強行關閉平板,然後再開啓。

從5.0.1升級至5.0.2、從5.0.2升級至5.1、從5.1升級至5.1.1時,亦可按照上述步驟操作。

特別提示:

為了節省時間,升級好Nexus 10之後,先進入recovery模式清除緩存,等清除完緩存之後,直接在recovery菜單中選擇reboot to bootloader,把設備重啓到bootloader模式下,並刷入root包,這樣開機之後,只需升級一輪應用程序即可。如果在recovery模式下清除完緩存之後不重啓到bootloader,而是正常開機,那麼就要先升級一輪應用程序,然後等刷完root之後,又要升級一輪,比較耗時。

廣告