Nexus 7(2012)にAndroid 7をインストールする

Nexus 7(2012)が余っているので、AndroidのカスタムROMをインストールしてみました。
手順としては他のAndroid機種でも大体同じなので、試してみたい人はどうぞ。

なんでこんな古いタブレットをまだ使っているかというと、Androidアプリの実機テスト用です。
パワフルな最新機種で早く動くアプリを作るのは簡単です。
しかし古い（非力な）機種でもある程度の早さで動くアプリを作るには、アルゴリズムやデータ構造の工夫が必要です。
そうゆうテストをするために敢えて古い機種を残しています。

今回はXDAのフォーラムで紹介されているAOSP 7.xをインストールします。

# 1. TWRPのインストール

まずは`Recovery`と呼ばれるプログラムを書き換える必要があります。
`Recovery`は何をするかというと、Androidをリセットするときに元の初期状態に戻すためのプログラムです。

いくつか有名なリカバリーソフトがありますが、`TWRP`が一番有名なのでこれを使いましょう。

---

Nexus 7の`電源ボタン`と`下ボリュームボタン`を**同時押し**して、bootloaderモードに入ります。
![image740.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39529/f15056be-41c7-21b4-5466-f1ec27d0ed14.png)

PCとUSBケーブルで接続して、`fastboot`コマンドで確認してみましょう。

```
$ fastboot devices
015d15b4d927e80e	fastboot
```

初めての人は、OEMをロックを解除する必要があります。

```
$ fastboot oem unlock
```

`OEMロックを解除したら、製品保証対象外になるよ`と脅してきますが無視して`Yes`。
2012年製なので、もはや保証も何もないｗ

![DSC02155.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39529/27cae8dc-2896-7b79-23e6-c25ea2ac3676.jpeg)

---
TWRPを下記からダウンロードしてきます。

[(Asus Nexus 7 2012 WiFi) twrp-3.6.1_9-0-grouper.img](https://dl.twrp.me/grouper/twrp-3.6.1_9-0-grouper.img.html)

[(Asus Nexus 7 2012 3G) Download twrp-3.6.1_9-0-tilapia.img](https://dl.twrp.me/tilapia/twrp-3.6.1_9-0-tilapia.img.html)

ちなみに他の機種のRecoveryを探すには、「製品のモデル名 + TWRP」で探せば大概見つかります。（多くの場合はXDAというサイトで見つかります）

-----

では書き換えましょう。

```
$ fastboot flash recovery twrp-3.6.1_9-0-grouper.img
Sending 'recovery' (10836 KB)                      OKAY [  1.356s]
Writing 'recovery'                                 OKAY [  2.194s]
Finished. Total time: 3.615s
```

もしこのときに`FAILED (remote: '(InvalidSize)')`とか表示されたら、違うバージョンのRecoveryを探しましょう。
TWRPならほぼ問題ないとは思います。
（どうしても見つからない場合は、recovery領域のパーティションサイズを変更して、ddコマンドで書き換える方法もありますが、この記事では省略します）
```
Sending 'recovery' (12832 KB)                      OKAY [  0.509s]
Writing 'recovery'                                 FAILED (remote: '(InvalidSize)')
```

書き換えが成功したら、recoveryモードに入ります。
![maxresdefault.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39529/476b5474-5447-8833-76a5-902607dc067b.jpeg)

ちゃんと書き換えできていれば、TWRPが表示されるはずです。
![Screenshot_2022-04-21-20-28-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39529/a1e7780b-f697-f889-ce99-f62450d24a85.png)

# 2. OSのインストール

AOSPのカスタムROMを探してきて、ダウンロードします。

[(Asus Nexus 7 2012 WiFi) aosp_grouper-7.1.2-ota-20220311.eng.ds.zip](https://androidfilehost.com/?fid=2981970449027572655)

[(Asus Nexus 7 2012 3G) aosp_tilapia-7.1.2-ota-20220311.eng.ds.zip](https://www.androidfilehost.com/?fid=2981970449027572656)

インストール方法は2つあります。
1. `/sdcard/`に転送して、TWRPからインストール
2. `adb sideloader`を使用してインストール

今回は1番を試しましょう。

```
$ adb push aosp_grouper-7.1.2-ota-20220311.eng.ds.zip /sdcard/
aosp_grouper-7.1.2-ota-20220311.eng.ds.zip: 1 file pushed, 0 skipped. 1.3 MB/s (222437777 bytes in 166.948s)
```

転送が終わったら、インストールします。

`[Install] → aosp_grouper-7.1.2-ota-20220311.eng.ds.zip` を選択。
![Screenshot_2022-04-21-20-44-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39529/47f98d90-811d-ed54-b918-8dd2f82b8f98.png)


無事にインストールが完了すれば、このようになります。

![Screenshot_2022-04-21-20-46-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39529/0e62124a-7585-6fda-871b-499f1a265ee0.png)

ここで一旦`[Reboot] -> [Recovery]`で、再起動して、もう一度Recoveryモードに入ります。

# 3. Open GAppsのインストール

AOSP版のAndroid ROMには、Google Play StoreなどのGoogle Appsが入っていません。
この場合、Google Play Servicesを利用しているようなアプリ（ほぼ大半のアプリ）が動きません。
なのでインストールします。

[OpenGapps](https://opengapps.org/)

ここから `arm`,`7.1`,`pico`を選択します。
![Screen Shot 2022-04-21 at 6.51.49 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39529/f24b52a6-d887-da24-9d15-9cfd3d096564.png)

まずは`/sdcard/`に転送します。

```
$ adb push open_gapps-arm-7.1-pico-20220215.zip /sdcard/
open_gapps-arm-7.1-pico-20220215.zip: 1 file pushed, 0 skipped. 1.3 MB/s (190611834 bytes in 141.555s)
```

続いて、`gapps-config-grouper.txt` (または`gapps-config-tilapia.txt`）というファイル名で、インストールするGAppsを指定します。

```gapps-config-grouper.txt
# try it this way
Include
Core
calsync

# stock removals -- these would work
# Browser
CMAccount
CMUpdater
CMSetupWizard
Email
ExchangeStock
Hexo
# (Eleven)

# this doesn't work. may not need anyway if we skip 26MB GoogleTTS
# +PicoTTS
# -GoogleTTS

# maybe move fonts to /sdcard ? 38MB
# or in a pinch remove NotoSansCJK -- 18MB

```

これも`/sdcard/`に転送します。
```
$ adb push gapps-config-grouper.txt /sdcard/
```

あとは`Install`からインストールを行えば良いはずです。

起動前に`Wipe -> Format Data`からデータ領域をフォーマットしておきます。

# 4. ようやく起動！

Googleのロゴが5分くらい表示されたら、セットアップウィザードが表示されます。

もしかしたらGoogle Frameworkがクラッシュを繰り返すかもしれません。何回かのクラッシュした後は普通にセットアップ可能です。（そうゆう場合は、TWRPに戻って`Wipe`すると良いです）

![PXL_20220422_071102975.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39529/c253a56c-387d-e51d-0d84-da99bd34cd8b.jpeg)


# 5. AndroidWebViewを更新する

AOSP 7.xに入っているWebViewはバージョンが古いので、最近のJS frameworkが動きません。このため**Googleアカウントでログインが出来ない**という問題が発生します。

そこでWebViewを更新します。Android 7のリリースされた頃のAPKをダウンロードする必要があるため、少し古いバージョンのAPKを利用します。

https://www.apkmirror.com/apk/google-inc/android-system-webview/android-system-webview-70-0-3538-27-release/android-system-webview-70-0-3538-27-2-android-apk-download/

```
$ adb root
$ adb remount
$ adb install -r com.google.android.webview_70.0.3538.27-353802700_minAPI21(armeabi-v7a)(nodpi)_apkmirror.com.apk
```

# 6.使用感はどう？

2012年製のタブレットということで、さすがに現代のスマホに比べるとちょっともたつき感がありますが、`Developer Options`でアニメーションをOffにすると、そこそこ使えます。
GPUを使うようなアプリは駄目ですね。Webサイトを見るくらいなら使えます。

まぁ「低スペックAndroidの検証用デバイス」なので、アプリの動作検証をするくらいには丁度よいです。