Google PixelでAndroid OSをダウングレードする
モバイルアプリ開発におけるOSバージョンの重要性
こんにちは!カシオでモバイルアプリエンジニアをしている小澤です。
スマートフォンアプリを開発する際、OSのバージョンによる動作の違いに悩まされることは日常茶飯事です😵💫
ピンとこない方も多いのと思うで具体的に考えてみましょう。Androidアプリでは、ビルド時に、アプリがどのOSバージョンのAPI仕様に準拠しているかを、targetSdkとして指定します。
たとえば、Android 13 (APIレベル33) では通知権限 POST_NOTIFICATIONS が導入されました。これは文字通り「アプリが通知を出すことを許可するための権限」です。
targetSdk 32以下でビルドするのならあまり気にしなくてよいですが、33以上の場合はちゃんと意識してコーディングする必要があります。
このような新規に導入、あるいは廃止されたAPIの動作確認時には、次のような点が気がかりになります。
特定のtargetSdk未満/以上の場合の動作はどうなるか?
アプリがインストールされた状態でOSをアップグレードした場合、アプリ内の動作はどうなるか?
前者はエミュレータを使ったり、OSバージョンの異なる端末を複数台用意すれば確認できます。しかし、エミュレータではOSのアップグレードは不可能です。そのため後者は実端末での一発勝負になってしまいます!
一か八かで実装して、そのテストが失敗したら目も当てられませんね…。仮にうまく動作したとしても、他の疑問点が浮かんでくるはずです。これは必ずです。
ちなみに今回例に挙げた通知権限については、公式で実装ガイドラインが公開されています。が、実際に動作確認もせずにリリースに踏み切るのは大変リスキーですね。
Google Pixelをダウングレードする
調べると、GoogleのPixelやNexusは公式で工場出荷時のイメージファイルを配布しており、これを利用すればダウングレードが行えるようです。
これが可能ならテスト手法を検討する必要がなくなります。何度でも試せばよいのですから!
ということで、今回は Pixel 4a (Android 11) のダウングレードを試してみます。
❗❗注意❗❗
ダウングレードを実行すると、端末が工場出荷状態に戻されることにご注意ください。今回は検証用端末を使用するので不要でしたが、必要なら必ずバックアップを取ってから実施してください。
ダウングレードはスマートフォンの通常利用範囲を超える行為です。手順の間違いなどで動作不能になる可能性も0ではありません。必ずご自身の責任において実施してください。
たとえばPixelの場合はGoogleがバックアップの方法を紹介しています。参考にしてください。
1. 状況の確認とイメージファイルの取得
今回の目標は、Android 11のPixel4aをAndroid 10にダウングレードすることです。まずはダウングレード前の端末情報をメモしておきましょう。
すでに述べたとおり、GoogleはPixel等の工場出荷時のイメージファイル (ファクトリーイメージ) を公開しています。
この中から現在のファクトリーイメージを抑えておきます。今回は "sunfish" for Pixel 4a が該当しますね。細かく違うものが色々ありますが、上述のビルド番号から次のものがヒットしました。いざとなればこれに戻せばOKですね!
11.0.0 (RP1A.200720.011, Sep 2020, All carriers except EMEA and SG)
SHA:1a38c5a683d79c06b454f4b88afec982aca33b67c474fdc0c2542408a0367f3a
2. 端末の準備
設定>システム>開発者向けオプションからOEMロック解除のトグルスイッチをONします。
ちなみに、このOEM (Original Equipment Manufacturer) ロックというのは、デバイスのブートローダの起動を制御する機能のことです。
その上でケーブルでPCと接続します。以降はケーブルは抜き差ししないようにしてください。
3. Flash Toolの準備
ダウングレードはAndroid Flash Toolから行います。flash.android.com にアクセスすると警告が表示されるので、それに従ってポップアップブロックを解除しましょう。その後に再読込するとポップアップが表示されるのでAllow ADB accessをクリックします。
端末側にもUSBデバッグの許可を要求するモーダルが出るかもしれません。内容を確認して許可してください。
続いてAdd new deviceから端末を選択して、それがSelect a Buildに表示されることを確認します。
4. ダウングレードを実行する
いざ、ダウングレードを実行しましょう!
今回ダウングレードするOSは以下です。もともとインストールされているOSの情報から、それに近しいものを選びましょう。今回は"sunfish" for Pixel4aの中から日本の携帯通信会社 (JP carriers) というフレーズを含むものから選択しました。
一覧画面のFlashのリンクから改めてAndroid Flash Toolを起動し、続けてSelected device, Selected Targetからダウングレードしたいデバイスとイメージファイルを選択します。他にデバイスを接続していないのなら基本的に一択のはずです。
併せて以下のチェックボックスもONにします。これはつまり、
工場出荷時にリセットしてもよいか
ダウングレード完了後にブートローダをロックしてもよいか
を尋ねています。いずれも問題なければOKとしてください。
改めて内容を確認したらInstall Buildをクリックします。するとちょっと怖い警告画面が出てくるので、内容を確認してからConfirmをクリックします。
この警告をまとめると次のような内容です。そりゃそうだというものばかりですね😎
必要ならバックアップを取りましょう
デバイス操作はしないでください
ケーブルを抜かないでください
するとライセンスの承諾を求められるのでI Acceptを選択します。
端末上はFastboot Modeと表示されるようになります。
一方、ブラウザの表示が切り替わってからReselect your deviceを選択します。はじめてFastbootモードに切り替えた場合はデバイスを再選択する必要があるかもしれません。
次にUnlock Bootloaderが表示されます。またまた警告内容を読んでStartをクリックします。
すると端末の画面に以下の案内が表示されます。
音量ボタンの上下でメニューを選択できるので、Unlock the bootloaderに切り替えてから電源ボタンで決定しましょう。するとAndroid Flash Tool上でダウングレードが開始されます🚀
完了すると端末が再起動され、ブラウザにはインストールが完了した旨が表示されます。お疲れ様でした!
ダウングレード結果を確認する
端末上でAndroidバージョンを確認しましょう。ちゃんとAndroid10に切り替わっていますね!
端末は出荷状態に戻っているので適宜セットアップを行いましょう。忘れがちな点として、開発者モードもOFFになっています。ちゃんと戻してあげましょう。
まとめと補足
今回はPixel4aを利用してダウングレードを試してみました!
このような手段がひとつ確立されていると、心理的にもデバッグがかなり楽になると思います🥳
「ダウングレード」で検索するとグレーな方法もたくさんヒットします。しかし今回紹介した方法はGoogleが配布しているイメージファイルを利用するので、ある程度安心できるのではないでしょうか。あくまで自己責任とはなりますが、開発の一助となれば嬉しいです。
また、これは対応する中で任意のAndroidOSをインストールする方法でもあります。ダウングレードはその一面でしかありません。つまり、対応するイメージファイルさえあれば好きなOSへのバージョンアップも可能になります。便利ですね!