Re:シルの日々の戯言。

散財が生き甲斐になりかけている、デジタルガジェット大好き自称黄色いネズミの戯言。

Motorola moto g7 plusにPixelExperienceを焼いてみた

Pixel 4aで試した時に(アプリの)radikoがカスタムROMなのに動作してくれると言う1点でPixelExperienceに興味を惹かれました。
別にPixel 4aでPixelExperienceを動作させているからと言うわけでは無いとは思いますが、Pixelとは全く無関係のスマートフォンにPixelExperienceを焼いてradikoが問題なく動いてくれるかを確認するために、moto g7 plusを衝動買いした・・・と言うのが前回の戯言日記です。
sylve.hatenablog.jp

Google系統ではないROM書き換えを大前提として衝動買いしたスマートフォンはEssential Phone PH-1以来だと思います。
しかし、Essential Phone PH-1は比較的ROM書き換えに寛容なモデルだったため、積極的にROM書き換えをサポートしていないモデルをROM書き換え用に入手したのは初めてです。*1

今回衝動買いしたmoto g7 plusは積極的にROM書き換えをサポートしていないとは言えども、ROM書き換えには必須となるbootloaderのunlockが容易に行える機種です。
既に戯言日記で白状していますし、Twitterへ画像アップロード済みなので既に確認済みですが、moto g7 plusにカスタムROMのPixelExperienceを焼いて遊んで見ることにします。

事前準備について

moto g7 plusにカスタムROMを焼く場合の準備事項を羅列しておきます。
カスタムROMを焼く前提条件も一応綴っておこうと思いますが、多分周知の事実だと思うので軽めに触れる程度に抑えます。

なんと申しますか、moto g7 plusにPixelExperienceを焼く場合にアルファ版ビルドイメージが必須と言うのは酷い罠です。
確かに公式ビルドを入手する際に表示されるChangelogに「We're using retrofit dynamic partitions now, check @LakeUpdates on telegram for more info about install guide」と書かれていますが、PixelExperience公式の機種別インストールガイドには全く反映されていないので、よほど注意深い人を除きハマリします・・・。

私もXDA Developersのスレッドを発見出来なかったら「やべぇ・・・文鎮化させちまった・・・」と頭を抱え続けていたと思います・・・。
forum.xda-developers.com

moto g7 plusのbootloader unlock

カスタムROM導入のためには、bootloaderのunlockは必須です。
ROM書き換えに寛容なメーカーの場合、開発者向けオプション→OEMロック解除を有効にした前提で「fastboot flashing unlock」と入力すればOKなので簡単です。

Motorolaスマホの場合はそこまで簡単には行えず、unlockコードを発行してもらう必要があります。
やり方はMotorolaのサイトの手順に従い、粛々と進める必要があります。なお、bootloader unlockコードの発行にはMotorola IDが必要になるので、面倒でもMotorola IDの新規登録を行いましょう。面倒な人はGoogleアカウントとの連携が可能なので、Googleアカウントを利用して雑に登録を済ませましょう。
motorola-global-portal.custhelp.com

方法としては、以下の感じです。前提条件としてはOEMロック解除を有効済み・bootloaderの画面*5を表示させていることの2点です。

  1. fastboot oem get_unlock_dataと入力して、デバイスIDを取得
  2. Motorolaサイト上でデバイスIDを入力
  3. 画面の指示に従い(何かと読み飛ばしがちな規約などで「りょ」と応答し)Request Unlock Keyボタンをクリック
  4. Motorola ID登録時のメールアドレスにUnlock Codeが送られる
  5. fastboot oem unlock (送られてきたUnlock Code)を入力する。
  6. Please re-run this command to confirm.と表示されることを確認する。
  7. もう1回fastboot oem unlock (送られてきたUnlock Code)と入力する。
  8. Bootloader is unlocked!と表示されることを確認する。

bootloader unlockを行うと強制的に初期化が行われるため、「将来的にROM焼くから今この瞬間にやっちまおうwww」と気軽にやるとデータ全損と言う惨劇が待っているので注意が必要です。
あと、警告は英語で散々出てきますがメーカー保証が無くなります。moto g7 plusは既にOSアップデートさえも見捨てられた(デジタルガジェット観点では)骨董スマホなので保証云々は無関係のお話になりますが、最新機種で気軽にbootloader unlockを行ってしまうとメーカー保証強制終了となるので注意してください。

ちなみに、(Windows環境下で)fastboot oem get_unlock_dataと叩いて応答が無い場合は多分OEM USBドライバの適用に失敗しています。OEM USBドライバの適用をやり直すか、どうしてもワッカンネ!と言う場合はLinuxでfastbootを叩ける環境を作ったほうが早いです。

Unlockが行えたのならばあとはROMを書き換えるだけですが、念のためにunlock実施後にbootloaderの再起動を実施しておきます。

fastboot reboot bootloader

再起動時、なにやら見慣れぬ警告画面が表示されるかも知れません。
bootloaderをunlockした影響で「あなたbootloaderがunlockされてますよ?」と言う忠告画面なので何も触れずに放置してください。メッセージが出るだけで起動に影響はありません。

PixelExperienceのカスタムリカバリー書き込み

まずはPixelExperienceから提供されているカスタムリカバリーを焼いていきます。

カスタムリカバリーを焼く前に、起動スロットだけ設定しておきます。先にも軽く振れた通りシームレスアップデート対応のためにA/Bスロットと言う定義があり、moto g7 plusもシームレスアップデートに対応したモデルなのでA/Bスロットが存在します。
必須ではないものの、ROM焼き前にAスロットから起動するよう設定しておくこととします。
・・・あ、念のために執拗にbootloader再起動コマンドぶち込んでますが、単に個人の思考が反映されてるだけです。*6

fastboot set_active a
fastboot reboot bootloader

その後、カスタムリカバリーを焼いていきます。

fastboot flash boot PixelExperience_lake-12.1-YYYYMMDD-hhmm-OFFICIAL.img

実際にはダウンロードしたカスタムリカバリーのimgファイル名(ファイルパス)を指定するので、上記例をそのまま思考停止で打ち込むのはやめてくださいね。・・・いや、YYYYMMDD-hhmmを日時や時間に置き換えずに入力したってネタが流行した直後なので・・・。*7

カスタムリカバリーを焼いたあとは、カスタムリカバリーを起動します。

fastboot reboot bootloader
fastboot reboot recovery

PixelExperience Recovery modeと言う画面が立ち上がってきたら成功です。
駄目だった場合、もう1回カスタムリカバリーを焼き直してみてください。

A/Bパーティションの同期

PixelExperienceの機種別インストールガイドにも書かれていますが、最初にA/Bパーティションの同期を行います。

  1. カスタムリカバリーで「Apply update」→「Apply from ADB」の順にタップする。
  2. PC側から「adb sideload copy-partitions-20210323_1922.zip」と入力し、適用する。
  3. カスタムリカバリーの画面が落ち着いたら、画面上部の「←」*8→「Advanced」→「Reboot to recovery」の順にタップする。

ここからmoto g7 plusの画面を操作したり、PC側からコマンド打ち込んだりで療法を操作する必要があります。
とは言うものの、単に焼くだけなので簡単です。

PixelExperienceのAndroid 12ベース アルファ版を焼く

一番のハマりどころだった、Android 12ベースのアルファ版を焼いていきます。

  1. カスタムリカバリーの画面で「Factory reset」→「Format data/factory reset」の順にタップしてユーザーデータを削除する。
  2. カスタムリカバリーの画面で「←」→「Apply update」→「Apply from ADB」の順にタップする。
  3. PC側から「adb sideload aosp_lake-ota-retrofit-eng.jorgelucas.zip」と入力し、適用する。
  4. カスタムリカバリーの画面で「←」→「Advanced」→「Reboot bootloader」の順にタップする。
  5. PC側から「fastboot set_active a」と入力する。
  6. PC側から「fastboot reboot bootloader」と入力する。
  7. PC側から「fastboot reboot recovery」と入力する。

まずはアルファ版を焼きます。その際PC側画面上の転送率が47%くらいで表示が止まりますが、最終的にエラーが表示されなければ問題はありません。*9
その後、一度再起動させてbootloaderの画面に戻ります。
理由としてはどうも一度焼くとA/Bシステムの切り替えが発生してしまい、そのままカスタムリカバリーから書き込もうとすると失敗するので、明示的にA/Bシステムの指定を行う必要がありました。(但し「おま環」かもしれません。)

PixelExperience(最新のビルドファイル)の書き込み

やーっと、準備が整いました。PixelExperienceの本番データを焼いていきます。

  1. カスタムリカバリーの画面で「Apply update」→「Apply from ADB」の順にタップする。
  2. PC側から「adb sideload PixelExperience_lake-12.1-YYYYMMDD-hhmm-OFFICIAL.zip」と入力し、適用する。*10
  3. カスタムリカバリーの画面で「←」→「Reboot system now」の順にタップする。

以上で完了です。「Reboot system now」を叩いてしばらく時間を置いて、「Welcome Pixel」のような画面が表示されればPixelExperience書き込み成功です。
もし、Welcome画面が表示されない場合はROM焼き失敗・俗に言う文鎮化状態なのでもう1回書き込んでみてください。

ちなみに、PixelExperienceのセットアップ画面は、Pixel標準ROMをダークモードにした感じです。あとSIMカードを挿していると、少し待機していると英語表記から日本語表記に切り替わります。

あとは普通にセットアップするだけ

Welcome画面が表示されたのならば、あとはAndroidスマホの初期セットアップと同じです。
Wi-Fiを指定して、「はい」辺りを連打して、Googleアカウントを設定して・・・と言う流れになります。

Google Playは上手い具合に処理したのか内包された状態なので、初期セットアップが終わったら、好き勝手やってくれればOKです。
OTAにも対応しているので、もし何か新しいセキュリティ更新が配信されれば通知の上で更新が走るかと思います。(設定してから新しい更新入ってないので、草稿作成時点では未確認ですが・・・)

ちなみにPixelExperienceと言う名称の通りPixel相当のアプリがプリインストールされていますが、moto g7 plusはFMラジオにも対応しているためFMラジオのアプリがプリインストールされています。また、上手い具合に入れたのかMotoオーディオと呼ばれるイヤホン・スピーカー接続時のイコライザ的なユーティリティもプリインストールされています。

あ、PixelExperienceを入れた要因でもあるradikoアプリですが、PixelExperienceを入れたmoto g7 plusでも起動できました。
moto g7 plusはFMラジオ対応なのでラジスマ向けのradiko+FMのアプリ*11のほうが(都合が)いいのかも知れませんが、残念ながら対応機種以外ではradiko+FMを利用してもFMラジオとの切り替えが行えないようなので、FMラジオ機能が内蔵されているからといって無条件で使えるわけでは無さそうです。

今のところ怪しい挙動は無い

radikoがきれいに動いてくれていますし、今のところPixelExperienceを焼いたmoto g7 plusで変な挙動はありません。

何かとカスタムROMを入れて動かなくなる(厳密にはroot化チェックの影響で動かなくなる)FGOも起動してくれましたし、ポケモンGOも普通に動いてくれています。
銀行系のアプリは流石に試していませんが、意味もなくチェックが厳しいゲーム系アプリが動いてくれているので恐らく動くんじゃないかなぁ・・・と思う次第です。

但し、最近のAndroid OSはmicroSDをシステム領域として利用できるようですが、アプリがmicroSD領域上に格納されると速度次第では不具合が発生します。・・・えぇ、なんでspeedtestアプリの起動に1分近く時間が掛かるのか、ポケモンGO起動時のファンファーレが鳴り終わって十数秒立たないと起動しないのか、懐かしついでに「なめこ栽培キット」を入れたら起動させた瞬間即落ちするのはなんでなのかと悩みましたわ・・・。*12

カスタムROMを焼いて延命させること自体はLineage OSを利用していたときからの利点として上げていましたが、システム改変チェックなどで一部アプリが動かなくなり「完全な置き換えには使えねえな・・・」と思っていました。・・・が、その問題はPixelExperienceでは発生しないので、PixelExperienceは延命目的の観点では個人的な要望が全て叶えられている最良のカスタムROMです。
対応機種はLineage OSレベルで多くは無いですし、モデル次第ではAndroid 12ベースの公式ビルドが提供されていないと言う問題はありますが、対応機種でありAndroid 12ベースの公式ビルドが存在している機種ならば(ソフトウェア的な延命目的の観点では)見逃すことができないカスタムROMです。

root化なんて不要・今までのアプリを引き続き使い続けられるようなカスタムROMを!・・・と言う偏屈極まりない思考を持たれている方は、PixelExperienceに手を出してみると幸せになれるかも知れません。
moto g7 plusの場合は純正ROMだとAndroid 10でメジャーバージョンアップは打ち切られ、月例セキュリティ更新も2021年1月くらいで終わっていましたが、PixelExperienceを入れると最新のAndroid 12L(12.1)+最新の月例セキュリティ更新が配信されているので、ピンポイントで攻撃を受ける機会は少ないかも知れませんがセキュアに安全に使っていくことができます。

・・・まぁ、ぶっちゃけてしまうと私がmoto g7 plusを買った理由はカスタムROMを入れること自体が目的なので、moto g7 plusを使い続けていくわけではありませんけど(マテ)*13

*1:本音を言うと過去にXperia Z5 CompactをROM書き換え用に購入した記憶がありますが、XperiaシリーズはDRMが消えて様々な問題が発生するので、最終的にROMは書き換えず手放した記憶があるので正真正銘の「初めて」では無い気がします・・・。

*2:macOS/Linux環境でROM焼きを行う場合は不要です。

*3:私はmacOS環境があるので、macOS環境でROM焼きしました。

*4:最近のAndroidスマホは、シームレスアップデートのためにA/Bパーティション・A/Bスロットと言う名称で2面パーティションが存在します。

*5:moto g7 plusの場合は、俗称ドロイドくん(緑色のAndroidマスコット)が開腹しているアイコンが表示されている状態の画面です。

*6:困ったら再起動、再起動は大体の問題を解決してくれる。

*7:言うまでもないことですが、YYYYMMDDは年月日・hhmmは時分です。草稿時点ではカスタムリカバリ・公式ビルドともに20220329-1800が設定されています。

*8:メインメニューに戻るボタンですが、「←」で表示されてます。

*9:仕様なのか分かりませんが、他のカスタムROMでも注意事項として表示される点なので気にしないでください。

*10:先ほどと同じく47%くらいで転送率表示が(ry

*11:対応機種無関係にダウンロードは可能です。

*12:たまたまmicroSDのフォーマットに合わせて一部アプリが消えると言う事象が発生したので気付けましたが、この戯言日記の草稿では「SpeedtestやポケモンGoでレスポンス問題があります。そのため注意が必要であります!」の類が書かれてたとかなんだとか・・・。

*13:Pixel 4aで遊んでいくと言うのが発端で、その派生でmoto g7 plusに手を出した訳ですし。そもそも論として、メジャーバージョンアップされる年数が結果的に長期間=セキュリティ面でも長期間パッチ提供などが見込められると言う明示的な理由からiPhone派ですし・・・。