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
オプションは、userdata
とcache
をerase
することを意味します。その上で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時間くらいで電池が尽きるようになるのです。
頻繁に通信しそうなアプリは、Gmailを除いて消したのですがそれでもこれです。「その他」が電源をガリガリ削っています。同じ条件のiPhone 5Sは90%くらい残ってます。
当初、バッテリーがへたれたのかと思って新品に換えたけど意味がありませんでした。Nexus 5の電池交換はY字精密ドライバと、両面テープで張り付いてるバッテリーを剥がす根気が必要で、無駄に面倒です。
Android Mにして様子見てる感じでは上の通り真っ当な電池の減りです(Wifiのアイコンが塗りつぶされてるのはバグっぽい…iOS7で良く見たやつだ…)。バッテリー効率が改善されたというよりも、L Previewから放置されてきたバグをやっと直した、って感じがします。