2015/05/26

Nexus9 を Android 5.1.1 にアップデートするとか

他の人が普通にできるのに、それがなぜかうまくいかない無銘闇人です。

最近、ブログを更新してなかったわけですが、久々に技術的なネタを見つけたので、備忘録的な意味合いでの更新です。

今回は Nexus9 の Android 5.1.1 アップデートについて。
以下、経緯ですが、経緯とかはどうでもいいって人はスキップ ↓

=====
昨年の11月末に Nexus9 (Wifi 版) を購入したわけですが、どうもこの端末、無銘闇人と実に相性が悪いみたいです…。メモリリーク起こして、重くなったり、起動画面ループになったり、端末の上部が熱くなったり、キーボードフォリオが早々にご臨終したり…。(最後のは関係ないか)

で、今回、躓いたのが Android 5.1.1 へのアップデート。
通知領域にアップデートができますとなったので、早速アップデートを実行しましたが、途中で画面中央に「エラーです」の一言のみ表示して再起動。

メモリリークが解決すると噂されていただけに、期待を早々に裏切られました。orz。そもそも、「エラーです」って表示で、ユーザにどうしろと言いたいのかと開発者に小一時間問い詰めたいくらいです。せめて、エラー内容でも表示すればいいのに…。

その後、何度か繰り返しましたが失敗が続いたので、PCからの操作に踏み切りました。

が、リカバリーモードの sideload でのアップデート失敗。しかも、中途半端にアップデートが適用されたがために、初期化された Nexus9 には「unfortunately, NFC service has stopped」などのエラーメッセージの嵐で、ブートローダ以外は操作できず…。

fastboot からのインストールも、system.img をインストールする段階で「data length is too long」のエラーでアップデートできず。その解決方法も掲示板でイメージファイルが壊れているとか、fastboot のバージョンが古いとか全然役に立たない情報ばかりで、もう散々です…。

でも、何とか回避策を見つけたので、紹介したいと思います。
=====

以下、私と同じエラー (flash-all.sh をやって、"data length is too long") が出る人用の回避手順です。環境はもちろん、LinuxMint (おそらく、Ubuntu でも可。読み替えれば Windows でも可です)。

ここでやっているのは結局、OS データの新規インストール (ROM焼き) となりますので、バックアップを取ってから試して下さい。なお、自己責任でお願いします。
  1. Nexus9 側の作業
    1. OEMロックの解除 (この段階で初期化されます)
      →「Nexus 9のBootloaderアンロック方法 | Gadgen(ガジェン)」を参考に解除
    2. 上記のサイトの最後の写真のような状態にしておく
      ※「Devide State - UNLOCKED」や「FASTBOOT USB」と表示されている状態
    3. USBケーブルでPCに繋ぐ
  2. PC側の作業
    1. fastboot のインストール
      端末 (terminal) を開いて以下を実行
      $ sudo apt-get install android-tools-fastboot
      あるいは、「[TOOL] [LINUX/MAC] Nexus Tools 2.6 (Featured… | Development Tools | XDA Forums」の #1 の bash ... のコードをコピペして端末で実行
    2. Factory Images for Nexus Devices - Nexus Files for Developers — Google Developers」から自分の Nexus9 に合った Factory Image をダウンロード
      私は Nexus9 (Wifi 版) なので、「"volantis" for Nexus 9 (Wi-Fi)」の「5.1.1 (LMY47X)」の「LINK」からダウンロードしました。866.1 MBくらいあるので、時間がかかります。
    3. 端末 (terminal) を開き、ダウンロードしたディレクトリに移動
      $ cd ~/Downloads
      ※「~/Downloads」の所が、ダウンロードしたディレクトリになります。
    4. 端末 (terminal) から md5sum を実行して、ファイルがおかしくないかチェックします。
      $ md5sum volantis-lmy47x-factory-3efdc8d4.tgz
      a63624b4b42caf1d8327c4e19d7005e5  volantis-lmy47x-factory-3efdc8d4.tgz
      「a636...」 に当たる部分がファクトリーイメージのサイトにある自分がダウンロードしたイメージの「MD5 Checksum」のコードと同じだと OK です。
    5. 多くのサイトでは、ここで flash-all.sh (Windows では flash-all.bat) を実行とありますが、そのまま実行すると、「data length is too long」と出て、アップデートできない場合があります (私がそうでした)。おそらく、flash-all.sh の最後の行の「fastboot 〜 update 〜」でこけているので、fastboot が .zip をうまく読み込めてないのではないでしょうか? なので、地道にインストールしていきます。 まずは、flash-all.sh の最初の部分を実行
      $ fastboot flash bootloader bootloader-flounder-3.44.1.0123.img
      $ fastboot reboot-bootloader
    6. コケる原因である image-○○○.zip を展開します。(○○○はイメージファイルによって異なります)
      $ unzip image-○○○.zip
    7. 展開したディレクトリ image-○○○に入ります。
      $ cd image-○○○ 
    8. 中に .img ファイルがあるので、順番に Nexus9 に書き込んでいきます。
      $ fastboot flash boot boot.img
      $ fastboot flash cache cache.img
      $ fastboot flash recovery recovery.img
      $ fastboot flash system system.img
      $ fastboot flash vendor vendor.img
      ※2015/12/25 上の recovery の部分に不足がありましたので、修正しました

      あるいは、まとめて for 文でもできちゃいますね。
      $ for i in *.img; do
      > fastboot flash ${i%.img} $i
      > done
      ※ 「>」は入力しません。 
    9. 全ての書き込みで「OKAY 〜」と表示されていたら問題なく作業が完了しているので、以下のコマンドを実行して、Nexus9 を再起動
      $ fastboot reboot
      問題がある場合は、再度、上記操作の見直しをする。
これで、Nexus9 には Android 5.1.1のセットアップ画面が表示されているはずです。

参考サイト