[Essential Phone(PH-1)]Android Qベータ版からAndroid Pへのダウングレードでハマった点

#概要

Google PixelやEssential Phone(PH-1、以下PH-1と記します)等、ツールを用いてAndroidのOSのバージョンを上げ下げできる機種はアプリ開発者にとっては非常に便利かと思います。

PH-1でAndroid Qのパブリックベータ版を使用していたのですが、あらかた検証が終わったのとYoutubeのアプリがなぜか落ちまくる状況だったのでAndroid Pにダウングレードしたいと思い、PH-1の[Developer Overview](https://www.essential.com/developer)からOSのイメージファイルを落としてきてFlashしたのですが、途中でエラーメッセージが出てハマりました。

いろいろ調べて何とか元通りに戻したので、その記録を記します。

#ハマりポイント1：Boot loaderのunlockの後再起動したら「No command」と表示されて動きが止まる

##結論：Factory resetをするしか選択肢がない。Boot loader unlockの前に必ずデータをバックアップする。

<center>![IMG_0144.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38930/56c8d888-301d-de7d-5e05-6a70eede96de.jpeg)</center>

Boot loader unlock後再起動したらこんな画面に。

この状態で放置すると数十秒後に自動的に端末は再起動するし、Powerキー長押しで端末の電源を強制的に落として再起動することもできるが↓こんな画面になってしまう。

![IMG_0147.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38930/23e7649d-e124-8b3c-ca3d-e4c5cb02d042.jpeg)

文字が非常に小さいけど読み取ると

>Can't load Android system. Your data may be corrupt. If you continue to get this message, you may need to perform a factory data reset and erase all user data stored on this device.

と書いてあって、Factory resetをしないと使えないという。
仕方ないのでVol Downキーを押して「Factory data reset」を選んでPowerキーを押して選択。
本当にする？と聞かれるので「Yes」を選択。これ以外選択肢がないw。
なのでBoot loader unlock前に必ずデータはバックアップ等する必要がある。

再起動がかかった時にVol Downキーを押しっぱなしにすればBootloaderの画面になる。

# ハマりポイント2：Flash時に一部書き込みができないエラーが出る

## 結論：問題ないように見えるが`unlock_critical`をしないと後々困る。

Flash時に

```
Sending 'abl_a' (780 KB)                           OKAY [  0.107s]
Writing 'abl_a'                                    FAILED (remote: 'Flashing is not allowed for Critical Partitions
')
fastboot: error: Command failed
Sending 'abl_b' (780 KB)                           OKAY [  0.107s]
Writing 'abl_b'                                    FAILED (remote: 'Flashing is not allowed for Critical Partitions
')
```

のようなエラーが出ました。

ただ、エラーは出ているんだけど**ダウングレードは一応成功します**(そのように見える)。設定を済ませてアプリも入れた後は普通に使えたのですが、Androidのセキュリティパッチが来てインストールする際に**エラーとなって全然インストールできない状態**になってしまいました。(セキュリティパッチのダウンロードには成功するがその先に進もうとしたら「**更新できませんでした インストールエラー**」とでてその先に進まない)

エラーの内容が分からないので本当の原因は不明だし、上記の`'Flashing is not allowed for Critical Partitions'`のメッセージとの関連も不明だが、何かしら書き込めないパーティションがあるのかも？という仮定。

`flashing is not allowed for critical partitions`でググったらXDA DevelopersのGoogle Pixel 2の掲示板にたどり着きました。
[failed remote: flashing is not allowed for critical partitions](https://forum.xda-developers.com/pixel-2-xl/help/failed-remote-flashing-allowed-critical-t3715283)

ここの[レス#2の方の書き込み](https://forum.xda-developers.com/showpost.php?p=74750065&postcount=2)に

```
fastboot flashing unlock
```

の後に

```
fastboot flashing unlock_critical 
```

とすればいけると書いてあって、手元のPH-1でもこれで「Androidのセキュリティパッチが来てインストールする際にエラーとなって全然インストールできない状態」は解消されました。criticalなものにロックがかかってたと。

ダウングレード後Boot loaderを再度ロックかければ

```
fastboot flashing lock 
```

~~これで`unlock_critical`でunclockしたcriticalな部分も再度ロックされるようです。~~
~~別途`flashboot flashing lock_critical`を実行したほうが良さそう？~~

この後

```
fastboot flashing lock_critical
```

も実行してはじめてBoot loaderのロック完了だそうです。

`fastboot flashing lock` `fastboot flashing lock_critical`の後の再起動後も「`No command`」の画面になるので、目的に応じて

- Factory resetをする
- Vol Downキーを押しっぱなしにすればBootloaderを起動する

どちらかの対応が必要です。

***

#そもそもどうやってダウングレードするの？

ダウングレードの方法についてはPH-1のDeveloper Overviewにも記してありますが、簡単におさらいも兼ねて・・・

※当方はMac使用ですが、Windows利用の方もadb toolsのインストール周り以外は共通の操作かと思います。

##1. (Android Studio等を入れていない方は)fastboot toolのセットアップ

SDK Platform Tools release notes
[https://developer.android.com/studio/releases/platform-tools.html](https://developer.android.com/studio/releases/platform-tools.html)
で「`Download SDK Platform-Tools for ***`」を選択(***はWin or Mac or Linux)。

Macの場合、ダウンロードしてできた「`platform-tools`」をユーザーディレクトリ直下に置いてもOK。例えば

```
/Users/ユーザー名/platform-tools
```

にファイルを置く。

自分の場合、`.bash_profile`に

```
export PATH=$PATH:/Users/ユーザー名/platform-tools
```
を追記してパスを通しました。シェルを再起動すれば`adb`コマンドが打てるようになるはず。

ターミナルで「`adb help`」と打って

```
Android Debug Bridge version 1.0.41
Version 29.0.1-5644136
Installed as /Users/ユーザー名/platform-tools/adb
(以下略)
```
とか出てきたら成功。

##2. OSのイメージファイルを落としてくる

Android Builds for Essential Phone
[https://www.essential.com/developer/current-builds](https://www.essential.com/developer/current-builds)
で好みのイメージをダウンロードする。

その時の最新のイメージなら「`Current Builds`」、以前のイメージ(Android 7系、8系)なら「`Previous Builds`」を選んで「Submit Form」をクリック。

「`Download (OTA)`」と「`Download (Fastboot)`」があるけど、OSのダウングレードは「Download (Fastboot)」を選ぶ必要がある。

##3. PH-1側で「OEMロック解除」「USBデバッグ」を有効に

`設定＞システム＞端末情報`の一番下の「ビルド番号」を何回もタップして開発者モードを有効にする。

一つ前に戻って「システム」に「開発者向けオプション」が表示されるようになるので、その中の「OEMロック解除」「USBデバッグ」をONに。

PCとPH-1をつなぐと「USBデバッグを許可しますか？」と表示されるので、「このパソコンからのUSBデバッグを常に許可する」にチェックを入れて「OK」を選択。

##4. PCとEssential Phone(PH-1)をつなぎ、Boot loaderのunlock
ターミナルで

```
adb reboot bootloader
```
と入力しEnter。端末が再起動するのでBootloaderの起動画面になるので

```
fastboot flashing unlock
```

と入力しEnter。
PH-1側で「Unlock Bootloader?」と表示されるので、本体側面の`Vol Down`キーで`Yes`にカーソルを選択し`Power`キーを押すとBoot loaderのロックが外れる。

再起動がかかるので、本体側面の`Vol Down`キーを押しっぱなしにしてBoot loaderを起動する。ターミナルで`adb devices`と入力してPH-1が表示されたら、次に

```
fastboot flashing unlock_critical
```

を実行する。終わると再び再起動がかかるので、本体側面の`Vol Down`キーを押しっぱなしにしてBoot loaderを起動する。

##6. OSイメージのFlash

2.でダウンロードしてきたOSイメージのZIPファイルを解凍した中に`flashall.sh`があるので、ターミナルで実行。

```
cd [OSイメージのZIPを解答してできるディレクトリ]
./flashall.sh
```

OSの書き込みが開始され、画面に色々ログが表示される。

##7. Boot loaderを再ロック

6.が終わったら再び再起動がかかるので`Vol Down`キーを押しっぱなしにしてBoot loaderを起動し、ターミナルで以下のコマンドを実行。

```
fastboot flashing lock
```

完了したら再び再起動がかかるので`Vol Down`キーを押しっぱなしにしてBoot loaderを起動し、ターミナルで以下のコマンドを実行。

```
fastboot flashing lock_critical
```