なるようになるかも

力は多くの場合、その人の思いを超えない。

Nexus5にAndorid M Preview入れた。

あるいはAndroidのデータ領域についての話。もしくはLollipopのバッテリーイーターに対する愚痴。

「Previewを入れるには全てのデータが消える覚悟が必要」みたいな話をよく聞きますが、Androidのデータ構造を理解せずに、batやシェルスクリプトを使ってアップデートをしている人の勘違いです。

前提条件はありますが、ユーザーデータ領域を残したままM Previewを入れることはできます。

Androidのデータ領域について

fastbootコマンドはおまじないではありません。データ領域の意味が分かれば、何をしているのか理解できます。

データ領域名 説明
bootloader fastbootモードで起動するのがこのブートローダ…みたいな認識で合ってるんでしょうか。通常oemロックにより読み取り専用領域となっていますが、Nexus端末はアンロックできます。ブートローダーのアンロック時には端末データが全部消し飛ぶので、一度アンロックしたら放置してます。
radio 通信領域に関わるファームウェア。「ベースバンド」という言葉が良く使われます。
boot boot領域です。Linuxカーネルと初期RAMディスクに相当します。bootとbootloaderはよく混同されてる気がする。
recovery リカバリ起動を行うための領域です。OSが起動不可能になった場合に、修復を行えるようにするため、OSとは別系統のシステムが存在するのです。必要最小限の構成のため、中身はほぼbootと同じらしいです。root化とカスタムリカバリのインストールもよく混同されてる気がする。
system Android OSのうちカーネルを除く部分(要はユーザーランド)です。システムはユーザー権限で動くので、root化するにはカスタムリカバリを用いてsuをインストールする方法が採られます。
userdata ユーザーデータ領域です。この領域を消さなければ、OSのみをアップデートすることができます。初回のOS起動時に既存のユーザーデータの最適化を行ってくれますが、挙動がおかしくなる場合もあるようです。その場合は諦めましょう。
cache 一時的なキャッシュとして利用される領域です。

flash-allがやっていること

fastbootにはいろいろコマンドがありますが、書き込みを行うflashと、削除を行うeraseだけ覚えとけば問題ない気がします?

flash-all.shの中身を見ると以下のような感じです。

fastboot flash bootloader bootloader-hammerhead-HHZ12h.img
fastboot reboot-bootloader
sleep 5
fastboot flash radio radio-hammerhead-M8974A-2.0.50.2.26.img
fastboot reboot-bootloader
sleep 5
fastboot -w update image-hammerhead-MPZ44Q.zip

まずブートローダーを書き換えて、続いてベースバンドバージョンを上げます。

fastboot -w updateというコマンドが出てきます。-wオプションは、userdatacacheeraseすることを意味します。その上でupdateコマンドで、zipファイルの中身をflashします。

image-hammerhead-MPZ44Q.zipの中身を見ると、

  • boot.img
  • recovery.img
  • system.img
  • userdata.img
  • cache.img

があります。それぞれが上表のデータ領域に相当しています。

ユーザーデータ領域を残したままAndroid Mに入れ替える

前提として、ブートローダーをアンロックしたまま利用している必要があります。ブートローダーのアンロックに伴う端末初期化は回避する方法がなさそうです。

fastboot flash bootloader bootloader-hammerhead-HHZ12h.img
fastboot reboot-bootloader
fastboot flash radio radio-hammerhead-M8974A-2.0.50.2.26.img
fastboot reboot-bootloader

ここまでは公式の方法と同じです。あとはimage-hammerhead-MPZ44Q.zipを解凍して、

fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash system sytem.img

だけやれば、データを移行してOSだけアップデートできました。

cache領域のeraseは、やった方がよさそうですが、今のところやらなくても支障はありません。root権限があるなら、fastbootコマンドを使わなくても、単に/cacheの中身を消せばいいです。

Lollipopのバッテリー問題

Android Mはバッテリーの持ちがよくなる」みたいな話があります。アップデートした理由はほぼこれに尽きます。

条件が謎なのですが、Lollipopは一旦バッテリーイーターなモードに入ると、何もしなくても大体10~12時間くらいで電池が尽きるようになるのです。

f:id:quesera2:20150530163809p:plain:w300

頻繁に通信しそうなアプリは、Gmailを除いて消したのですがそれでもこれです。「その他」が電源をガリガリ削っています。同じ条件のiPhone 5Sは90%くらい残ってます。

当初、バッテリーがへたれたのかと思って新品に換えたけど意味がありませんでした。Nexus 5の電池交換はY字精密ドライバと、両面テープで張り付いてるバッテリーを剥がす根気が必要で、無駄に面倒です。

f:id:quesera2:20150530164955p:plain:w300

Android Mにして様子見てる感じでは上の通り真っ当な電池の減りです(Wifiのアイコンが塗りつぶされてるのはバグっぽい…iOS7で良く見たやつだ…)。バッテリー効率が改善されたというよりも、L Previewから放置されてきたバグをやっと直した、って感じがします。