22 December 2018

Nexus 7 (2012)をAOSP 7.1.2にアップグレード

2年前にPure Nexus 6.0.1にアップグレードしていたNexus 7 (2012)が、やはり異常にレスポンスが悪く使い物にならないので、解決方法を探していた。

5ちゃんねる掲示板で、Android 7 にアップグレードすれば「驚くほど軽くなる」との書き込みが多数あり、アップグレードしてみることとする。

Google公式のAndroid 5.1.1にダウングレードする

純正のAndroidシステムに戻してから作業するため、現在配布されている最新版のAndroid 5.1.1に戻す。

Factory Images for Nexus and Pixel Devices より、『"nakasi" for Nexus 7 (Wi-Fi)』 の最新版 5.1.1 (LMY47V) をダウンロードする。

ダウンロードしたzipファイルをLinuxマシンの作業ディレクトリにコピーし、展開

$ unzip nakasi-lmy47v-factory-5a0bb059.zip

展開したディレクトリにある、ファームウエア書き込み用スクリプトを編集し、ブートローダーの書き戻しを無効化する。

flash-all.sh
# fastboot oem unlock       ← すでにブートローダのunlockはされているので、再度アンロックの必要は無い
fastboot erase boot
fastboot erase cache
fastboot erase recovery
fastboot erase system
fastboot erase userdata
# fastboot flash bootloader bootloader-grouper-4.23.img       ← ブートローダーは書き戻さない (現状のTWRPを使い続ける)
fastboot reboot-bootloader
sleep 10
fastboot -w update image-nakasi-lmy47v.zip

Android 5.1.1への書き戻し作業は、次のように行う

$ adb reboot bootloader
 ← 再起動が行われて、ブートメニューが画面表示されるまで待つ
$ fastboot devices
015d490699512345	fastboot       ← 認識されない場合は、udevルールを読み書き可能に書き換えること
$ ./flash-all.sh
erasing 'boot'...
OKAY [  0.035s]
finished. total time: 0.035s
******** Did you mean to fastboot format this ext4 partition?
erasing 'cache'...
OKAY [  0.152s]
finished. total time: 0.152s
erasing 'recovery'...
OKAY [  0.036s]
finished. total time: 0.036s
******** Did you mean to fastboot format this ext4 partition?
erasing 'system'...
OKAY [  0.366s]
finished. total time: 0.366s
******** Did you mean to fastboot format this ext4 partition?
erasing 'userdata'...
OKAY [ 10.546s]
finished. total time: 10.546s
rebooting into bootloader...
OKAY [  0.023s]
finished. total time: 0.124s
target didn't report max-download-size
archive does not contain 'boot.sig'
archive does not contain 'recovery.sig'
archive does not contain 'system.sig'
archive does not contain 'vendor.img'
wiping userdata...
Creating filesystem with parameters:
    Size: 30080499712
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8160
    Inode size: 256
    Journal blocks: 32768
    Label: 
    Blocks: 7343872
    Block groups: 225
    Reserved block group size: 1024
Created filesystem with 11/1836000 inodes and 159268/7343872 blocks
wiping cache...
Creating filesystem with parameters:
    Size: 464519168
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7088
    Inode size: 256
    Journal blocks: 1772
    Label: 
    Blocks: 113408
    Block groups: 4
    Reserved block group size: 31
Created filesystem with 11/28352 inodes and 3654/113408 blocks
--------------------------------------------
Bootloader Version...: 4.23
Baseband Version.....: N/A
Serial Number........: 015d490699512345
--------------------------------------------
checking product...
OKAY [  0.040s]
checking version-bootloader...
OKAY [  0.027s]
sending 'boot' (5184 KB)...
OKAY [  0.706s]
writing 'boot'...
OKAY [  0.264s]
sending 'recovery' (5738 KB)...
OKAY [  0.768s]
writing 'recovery'...
OKAY [  0.234s]
erasing 'system'...
OKAY [  0.117s]
sending 'system' (649455 KB)...
OKAY [ 84.326s]
writing 'system'...
OKAY [ 36.453s]
erasing 'userdata'...
OKAY [  4.919s]
sending 'userdata' (139157 KB)...
OKAY [ 18.091s]
writing 'userdata'...
OKAY [ 12.620s]
erasing 'cache'...
OKAY [  0.088s]
sending 'cache' (9052 KB)...
OKAY [  1.206s]
writing 'cache'...
OKAY [  0.570s]
rebooting...
 
finished. total time: 160.716s
 
$ fastboot reboot

再起動され、OSが立ち上がるまで5分ほど掛かる

20200614-nexus7-511-screen01.jpg
Nexus 7 (2012) Android 5.1.1 メイン画面とアプリドロワ画面

20200614-nexus7-511-screen02.jpg
Nexus 7 (2012) Android 5.1.1 ストレージ容量とメモリー容量

20200614-nexus7-511-screen03.jpg
Nexus 7 (2012) Android 5.1.1 システム情報画面

Android 5.1.1 ダウングレード時に書き込み失敗する

2020年6月、オークションで売却するためにAOSP 7.1.2から5.1.1 (LMY47V)にダウングレードした。その時にいくつかエラーが発生したが、その一つがこれ

$ fastboot devices
015d4906995ff812	fastboot       ← fastbootコマンドで認識されるのを確認後…
$ ./flash-all.sh       ← この記事の最初のところで「改変」した書き込みスクリプトを実行 
erasing 'boot'...
OKAY [  0.034s]
finished. total time: 0.034s
******** Did you mean to fastboot format this ext4 partition?
erasing 'cache'...
OKAY [  0.137s]
finished. total time: 0.137s
erasing 'recovery'...
OKAY [  0.034s]
finished. total time: 0.034s
******** Did you mean to fastboot format this ext4 partition?
erasing 'system'...
OKAY [  0.371s]
finished. total time: 0.371s
******** Did you mean to fastboot format this ext4 partition?
erasing 'userdata'...
OKAY [  8.904s]
finished. total time: 8.904s
rebooting into bootloader...
OKAY [  0.023s]
finished. total time: 0.074s
extracting android-info.txt (0 MB)...
extracting boot.img (5 MB)...
target didn't report max-download-size
archive does not contain 'boot.sig'
archive does not contain 'dtbo.img'
archive does not contain 'dt.img'
extracting recovery.img (5 MB)...
archive does not contain 'recovery.sig'
extracting system.img (634 MB)...
archive does not contain 'system.sig'
archive does not contain 'vbmeta.img'
archive does not contain 'vendor.img'
wiping userdata...
Couldn't parse erase-block-size '0x'.
Couldn't parse logical-block-size '0x'.
mke2fs 1.44.1 (24-Mar-2018)
/tmp/TemporaryFile-0BgOmh: Unimplemented ext2 library function while setting up superblock
/usr/lib/android-sdk/platform-tools/mke2fs failed with status 1
mke2fs failed: 1
error: Cannot generate image for userdata

Google検索してみると、対処方法が2つあるようだ。

対処方法1 : fastboot update コマンドの -w スイッチを除去する

fastboot -w update image-nakasi-lmy47v.zip
     ↓ 次のように変更
fastboot update image-nakasi-lmy47v.zip

対処方法2 : image-nakasi-lmy47v.zip を解凍し、スクリプトを修正

flash-all.sh
# fastboot oem unlock       ← すでにブートローダのunlockはされているので、再度アンロックの必要は無い
fastboot erase boot
fastboot erase cache
fastboot erase recovery
fastboot erase system
fastboot erase userdata
# fastboot flash bootloader bootloader-grouper-4.23.img       ← ブートローダーは書き戻さない (現状のTWRPを使い続ける)
fastboot reboot-bootloader
sleep 10
fastboot flash recovery recovery.img
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash userdata userdata.img

今回は「2」のzipファイルを展開する方法を採用し、ファームウエアを書き込んだ。このことによる弊害は次のセクションで…

$ ./flash-all.sh 
erasing 'boot'...
OKAY [  0.026s]
finished. total time: 0.026s
******** Did you mean to fastboot format this ext4 partition?
erasing 'cache'...
OKAY [  0.092s]
finished. total time: 0.092s
erasing 'recovery'...
OKAY [  0.026s]
finished. total time: 0.026s
******** Did you mean to fastboot format this ext4 partition?
erasing 'system'...
OKAY [  0.118s]
finished. total time: 0.118s
******** Did you mean to fastboot format this ext4 partition?
erasing 'userdata'...
OKAY [  4.938s]
finished. total time: 4.938s
rebooting into bootloader...
OKAY [  0.023s]
finished. total time: 0.074s
target didn't report max-download-size       ← ここから下が、zip解凍したimgを書き込んでいくスクリプト修正部分
sending 'recovery' (5738 KB)...
OKAY [  0.722s]
writing 'recovery'...
OKAY [  0.292s]
finished. total time: 1.014s
target didn't report max-download-size
sending 'boot' (5184 KB)...
OKAY [  0.654s]
writing 'boot'...
OKAY [  0.214s]
finished. total time: 0.869s
target didn't report max-download-size
erasing 'system'...
OKAY [  0.118s]
sending 'system' (649455 KB)...
OKAY [ 78.940s]
writing 'system'...
OKAY [ 36.435s]
finished. total time: 115.492s
target didn't report max-download-size
erasing 'userdata'...
OKAY [  4.931s]
sending 'userdata' (104289 KB)...
OKAY [ 12.683s]
writing 'userdata'...
OKAY [ 10.571s]
finished. total time: 28.186s
vm@M720q-Ubuntu1804:~/Desktop/nakasi-lmy47v$ fastboot reboot
rebooting...
 
finished. total time: 0.074s

ストレージが6 GBytesしか認識されない

fastboot update コマンドでuserdataを作成せずファームウエアを書き込んでしまったため、意図せず、userdata領域のクリアと確保がされていないという不具合が出てしまった。

Androidを再起動後、設定 → ストレージ で表示される「ストレージの量」がたったの6GBytesしか認識されていない。

対処方法は、設定 → バックアップとリセット → データの初期化 を行うと、ストレージが再フォーマットされるので正しい値(30GBytes)が認識される。

最終的に、fastboot コマンドでユーザー領域が正しく認識されたか数値で確認できる

$ fastboot getvar all
(bootloader) version-bootloader: 4.23
(bootloader) version-baseband: N/A
(bootloader) version-hardware: unknown
(bootloader) version-cdma: N/A
(bootloader) variant: grouper
(bootloader) serialno: 015d4906995ff812
(bootloader) product: grouper
(bootloader) secure: no
(bootloader) unlocked: yes
(bootloader) uart-on: no
(bootloader) partition-size:bootloader: 0x0000000000600000
(bootloader) partition-type:bootloader: emmc
(bootloader) partition-size:recovery: 0x0000000000c00000
(bootloader) partition-type:recovery: emmc
(bootloader) partition-size:boot: 0x0000000000800000
(bootloader) partition-type:boot: emmc
(bootloader) partition-size:system: 0x0000000028a00000
(bootloader) partition-type:system: ext4
(bootloader) partition-size:cache: 0x000000001bb00000
(bootloader) partition-type:cache: ext4
(bootloader) partition-size:userdata: 0x0000000700f00000
(bootloader) partition-type:userdata: ext4
all: 
finished. total time: 0.206s

0x700f00000 → 30,080,499,712 Bytes (28.01GBytes)

AOSP 7.1.2 にアップグレードするために必要なファイルを揃える

参考にしたのは xda 『[ROM][NZH54D][2018/12/05][Asus Nexus 7 2012 WiFi/3G][F2FS/EXT4]Android 7.x AOSP』 の掲示板。

また、日本語の情報として 『Nexus 7(2012) Wi-Fi版にAndroid 7.1.2 AOSPを焼く方法!』や『Nexus 7 (2012)をAndroid 7.1.2にバージョンアップ』なども参考にする。

AOSP 7.1.2

現在でもAOSP 7.1.2は1ヶ月に1回程度更新が続いているようで
Build 20181208
Build 20181112
Build 20181016

Build 20170410 (7.1.2当初)

今回は最新版 aosp_grouper-7.1.2-ota-eng-20181208.ds.zip を使う

Beans GApps Mini

Androidの基本システムに、次のGoogleの管理システムを組み込む

xda 『[GAPPS] [7.1.2] [ARM/ARM64] [July 25th] Beans GApps

ダウンロードは、Beans GApps全てのバージョンを格納したページから最新版 BeansGapps-Mini-7.1.x-20170725.zip ダウンロードして用いた。

Nexus 7用 TWRP

この機会に、ブートローダも最新版にアップグレードする

TWRP for Asus Nexus 7 2012 Wi-Fiに掲載されいている最新版、twrp-3.2.3-0-grouper.img をダウンロードする

AOSP 7.1.2 にアップグレードする

・ AOSP 7.1.2 (aosp_grouper-7.1.2-ota-eng-20181208.ds.zip)
・ Beans GApps Mini (BeansGapps-Mini-7.1.x-20170725.zip)
・ TWRP (twrp-3.2.3-0-grouper.img)

これら3つのファイルを、Nexus 7 (2012)のダウンロードディレクトリ (/storage/emulated/0/Download)にコピーする。

再起動しブートメニューを表示し、リカバリーメニュー(TWRP)に進む。

$ adb reboot bootloader

ブートメニューが表示されれば、PCとのUSB接続を切り離してから、ボリュームキーで『Recovery Mode』を選択し、電源ボタンで起動する。

TWRPが起動するので、次の順序で作業を行う。

1.ユーザ領域以外のWipe

  Wipeメニューより、「Dalvik Cache」「System」「Data」「Cache」のみをWipe。
  ユーザ領域は、AOSPやBeans GAppsの更新ファイルがあるので消去しない。

2.AOSP 7.1.2の書き込みとリブート

  戻るボタンをタップしメインメニューに戻る。
  Installを選択し、aosp_grouper-7.1.2-ota-eng-20181208.ds.zip を書き込む。
  戻るボタンをタップしメインメニューに戻る。
  RebootメニューのRecoveryを選択し実行。

3.再起動後、Beans GAppsの書き込みとリブート

  TWRPのメインメニューまで進む。
  Installを選択し、BeansGapps-Mini-7.1.x-20170725.zip を書き込む。
  書き込みが終われば Reboot System を選択し実行。

再起動し、数分待てばAOSP 7.1.2が使えるようになる。

なお、Wipeで「Internal Storage」まで消去してしまった場合は、TWRPのメインメニューを表示した状態でUSBケーブルをパソコンに接続し、

TWRPのAdvancedメニューのADB Sideloadを選択実行する。

パソコン側で

$ adb sideload aosp_grouper-7.1.2-ota-eng-20181208.ds.zip

のように、ファイルを転送して直接書き込む方法を使う。

TWRPをアップグレードする

$ adb reboot bootloader
 ← 再起動が行われて、ブートメニューが画面表示されるまで待つ
$ fastboot devices
015d490699512345	fastboot       ← 認識されない場合は、udevルールを読み書き可能に書き換えること
$ fastboot flash recovery twrp-3.2.3-0-grouper.img
target didn't report max-download-size
sending 'recovery' (9790 KB)...
OKAY [  1.239s]
writing 'recovery'...
OKAY [  0.526s]
finished. total time: 1.765s
 
$ fastboot reboot

Magiskを使ってroot権限取得

xda 『 [2018.12.8] Magisk v18.0 - Root & Universal Systemless Interface [Android 5.0+] 』 を用いると root化ができる。

インストーラ : Magisk-v18.0.zip
アンインストーラ : Magisk-uninstaller-20181208.zip

これらのファイルを TWRP で書き込むだけで root化・unroot化が可能。 インストール作業の詳細は 『 How to Install Magisk 』 に詳しく書かれている。