註: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.sh
或flash-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之後,又要升級一輪,比較耗時。