Raspberry Pi 400の常用のSSDとは別に差し替え起動すべく、USBメモリにAndroidカスタムROMをRaspberry Pi 4/Raspberry Pi 400/Compute Module 4対応にしてくれた個人利用には制限なさ気なKonstaKang氏?製AOSP/Android 13をインストールしみてみた話。
なお、同時に別のUSBメモリに同じくラズパイ用でAndroid 12ベースのLineageOS 19/Android 12Lもインストールしてみました。
ちなみにAOSPなAndroid 12L他もあります。
KonstaKangさん、Android TV用も用意してくれています
一瞬、もう1台Raspberry Pi 400を買ってもいいかな?と思いましたが、ここのところ急激な円安も相まって値上がりしてる、Gyao!かTverしか観ないし、それも稀、15インチ液晶のノートPCや19インチ液晶のラズパイ400パソコンのブラウザで十分、仮にテレビで観たい場合があったとしても、ノートPCをHDMIケーブルつなげば、それが面倒なら、AnyCastは持っているのでスマホでミラーリングもできるわけで何れにせよ、自身の場合、Android TVそのものが要りませんでしたね...。
カスタムROMをPCやラズパイで試してみようと思ったそもそもの発端は、Android 9搭載で買って2ヶ月でAndroid 10にアップグレードされた手持ちのMotorola moto g8 Power LiteのOSアップグレードが1度で終わりそうな気配満々、入れ替えてみたいなと思いつつ、SoCがSnapDragonではなく、MediaTekだからという要因も大きいのかカスタムROMも実在しなさ気な中、より上位バージョンのAndroidってどんな感じなのかなと。
と言いつつ、手始めにx86_64のAndroid 11版...とBliss OS 14を試したら起動しなかったことから仕方なくAndroid 9ベースBliss OS 11.14をKVMでDebian bullseyeにインストールしてみたのが、つい先日。
ガラケーのみでスマホを持っていなかった、だいぶ昔、Android-x86をVirtualBoxに入れたことはあり、当時、それはGoogle(のオープンソース)謹製かと思い込んでいて最近、Debianで試してみた後、なんだ同じじゃんと気づいたということはありますが...。
そしたら、どうやら2年ほど前くらいから?ARM64なRaspberry Pi 3や4用があったらしきことに今更ながら気づき、期せずしてRaspberry Pi 400がメインになった自身には願ったり叶ったりじゃんと。
尤も当初はRaspberry Pi上で仮想化できるものはないものかと探っていて発見したんですけど、RaspbianやRaspberry Pi OSをゲストとできるものもなさ気な中、今のところ、それは無理っぽいので。CPUエミュレートで遅いながらもRaspberryPiをVMで動かせないか。のようにゲストとしてのラズパイはなくもなかった模様。
それでも極力避けたいと思っているmicroSDカード限定な話ならチラ見して通り過ぎるだけだったでしょうが、何本も余っているUSBメモリでもできる、microSDも同様ではありますが、常用のSSDと差し替えるだけでいけることがわかったので、やってみることにした次第。
さて書き込むメディアですが、今回、自身は、使いみちなくあぶれていたUSBメモリが数本あったのでこれにしました。
検証目的のみか、頻繁に使うかによっても違ってくるでしょうが、microSDカード、USBメモリ、SSD、それぞれ一長一短といったところかと。
検証目的のみなら、余っているメディアがあるなら、それで良いかと。
ちなみに
microSDカードは、6〜7年経過しているRaspberry Pi 2Bサーバで最初からブート専用として1度も替えることなく現役ではありますが、自身としては、耐久性への懸念が払拭できず、読み書きが多い場合、microSDカードは、極力避けたいと思っており、他では使ったことがありません。
USBメモリは、2.0か3.0かに関わらず、まともな転送速度でGUIでも遅延なく、応答がなくなることがないものがあれば、コスパも良く無難かなと思います。
ただ、経験上、USBメモリってストレージとしては良いですが、OS入れてラズパイでブートして利用するとなると、なかなか、まともに使えるものに出会えないんですよね...。
今はすべてSSDにしたものの、ラズパイサーバなどでUSBメモリを使っていた当初から選定に悩み続け、ハズレを引いたことも1度や2度ではありません。
8GBでもメーカーによってモデルによって全然違うし、ほぼ100%満足いくものもなし、そもそも容量が少ない、唯一パーフェクトと思える某メーカーの16GBのUSBメモリに出会うもサーバ用とならまだしも他の用途だと次第に容量不足を感じるようになり、改めて選定しようにも同じ製品の同じシリーズであっても32GBになると、また、少しシリーズが変わっただけでも途端に激遅だったり、CLIは超高速なれどGUIとなると途端にダメ...などなど相性が極めて難しい...。
USBハブでも限りなくラズパイとの相性問題と思える事象に遭遇したこともあり、USBとの相性はどこまでいっても続くのか?と思いきや、ラズパイに限れば、2B x1台、3B+ x2台、400 x1台、計4台使ってますが、今のところSSDはハズレなし。
よってテストと割り切るならmicroSDカードでもUSBメモリでも十分だと思いますが、SSDが余っているなら、また、気に入って本格的に使うなら差し替え用とは言え、ハズレが限りなく少ないSSDにするのがパフォーマンス的にも健康的にもベストかなと、120GBとかならヨドバシとかでも2000円程度からありますしね...って円安の影響...同じか...USBメモリもSSDも。
と言いつつ、自身の場合、iPhoneユーザーならいざ知らず、Androidスマホは持っており、対応する、より新しいAndroidバージョンでかつ開発が継続されているカスタムROMは欲しいものの、Raspberry Pi OSと差し替えてラズパイ上でAndroidを頻繁に使おうと思えるほど有用な状況を思い描くことができず、素のAndroidという意味でも12や13に現行の10と比べものにならないと言うほどの魅力を見いだすこともできず、検証の域を出ないので、なんでもよいんですけどね。
SSDで試してみたら、なんとUSBメモリよりも起動が遅い、遅いなんてもんじゃない、しかも起動したら、エラーでアプリを閉じるか、待機するのポップアップ、そして何をするでもなく電源が落ちてしまいました...。
2つあったSSDの内、1つは待ちきれず、もう1つは、こんな感じでした...なんで...。
尚、1つはLineageOS 18.1/Android 11、もう1つは、LineageOS 19.1/Android 12Lですが、どっちがどっちだかわかりません...。
あと、前者かな?resolution.txtもありつつ、config.txtにhdmi_groupやhdmi_modeなどHDMIモニタ設定があって以前3B+で同ディスプレイを使っていた時に設定し、表示された値を一応設定しました。
そもそもAndroid 13は12のマイナーチェンジ版程度らしく、検証での使用感などを比べてみるとLineageOS版Android 12Lと素のAndroid 13に近いAOSP13という違いはあれど、差異としては、以下の4点くらいかなという印象でした。
F-Droidが使えても使えなくても何れのイメージもインストールさえすればGoogle Playストアは使えるようにはなっていますけどね。
ちなみにGoogle PlayストアよりもF-Droid派な自身としては、最後の1点においてAndroid 12L/LineageOS 19推し。
あえて手持ちのAndroid 10と比べると別途アプリをインストールしなくともSSHサーバーやVNCサーバを有効にできるっぽい(実際のAndroidでもそうなんですよね?)のは、へーという感じですかね。
ハードウェアとしてRaspberry Pi 4系(4B/CM4/400)かつ、RAM4GB以上とブート・システム用のメディアが必要です(別途ラズパイ3用にもAndroid 7〜10相当のLineageOSもありますが)。
今回は、Raspberry Pi 400 RAM4GBとUSBメモリを使ったので以降の説明もこれに準じます。
また、メディアへのイメージ書き込みやメディア編集、microSDカード以外のメディアを使う場合、必要となるconfig.txtや場合によってはresolution.txtファイル編集などを行うにあたり、OSはなんでも良いですが、ラズパイパソコンやPCなどコンピュータが必要です。
ソフトウェアとしては、一覧から今回は、AOSP13/Android 13を選んだのでAOSP (Android 13) for Raspberry Pi 4を見ると簡潔過ぎるかに見えて実は、手順やリンクかファイル名等が一通り全て書いてあります。
要約すると最低限、AndroidカスタムイメージとGoogle Playストアインストール用圧縮ファイルがあれば、ほとんどの人には良さげ、更に必要ならrootアクセス権を与えるソフトウェア(zipとapk)、この後メディアに焼くイメージのuserdataパーティションをGPartedなどで事前に拡張したくないならリサイズ用のzipファイル、他に必要なものを用意できるならそれら。
ddでも良いですが、Raspberry Pi Imagerを使い、[OS]として[カスタムイメージを使う]のが簡単でしょう。
USBメモリのAndroidイメージを起動後、再起動からUSBメモリに入れたファイルのインストールもできるリカバリツールTWRPを起動してAOSP13-rpi-resize.zipをインストール...としても良いですが、どうみても手間がかかるのでGPartedなど好みのディスク管理ソフトを使えるPCなどの環境があるのなら、事前に設定しておくのが賢明でしょう。
具体的には、FAT32 1つの他、3つあるext4パーティションの内、userdataパーティション領域が4GBちょっとしかなく、アプリを入れるなどすると不足する可能性があるので用意した、より大容量であるはずのメディアに応じて拡張しておくのが良いでしょう。
ただ、説明のどこかにパーティション末尾に何かのための領域が必要らしく、resizeファイルではそれも確保してくれるらしき記述があったような...その容量は不明ですが、自身は、適当に1〜2GB空けておきました。
オリジナルの説明には、「別途USBメモリを用意しても良い」旨記述がありますが、FAT32パーティションのみあるUSBメモリを試してみたところ、なぜか、起動中にUSBポートに挿してもTWRP上では読み込めなかったので、Androidイメージを焼いたUSBのuserdataパーティションの方が賢明かも?何れにせよ保存できる領域をマウントして書き込んだイメージ以外に事前に用意したzipファイルなどをコピーしておきます。
microSDカード以外のメディアを使う場合は、bootパーティションをマウントしてconfig.txtを開き、このようにdtoverlay=android-sdcardをコメントアウトして無効化すると同時にdtoverlay=android-usbを有効にすべく、編集します。
これでUSBブートできるようになります。
また、放熱量が増えたり、負荷がかかりやすいので必須ではありませんし、しなくてもそこそこ快適ですが、例えば、こんな風にクロックアップしておくとより快適な操作感を味わうことができるかもしれません。
デフォルトでは、1920x1080とかになっていますが、なんと実際に使用するモニタの画面の解像度が異なるだけで起動できない(できているのかもしれませんが、表示されない)ので異なるのであれば、一致する解像度に書き換える必要があります。
尤もAndroidイメージは、ほぼ特定のAndroidデバイス用に作られたり、カスタムされたり、派生したりしているのでディスプレイ解像度に汎用性をもたせたり、変更できるようにしておいたりする必要はないと考えると、なんとなく理解できる気はしますけどね。
解像度設定のresolution.txtはbootパーティションにあるので編集するなら、これをマウントします。
ちなみにオリジナルの説明には「書き換える代わりにresolution.txtを削除することでも使用している液晶ディスプレイの解像度になるでしょう」といった旨の記述がありますが、少なくともリネームではダメでした。
これでRaspberry Pi 400などラズパイ4系(4/CM4/400)でAOSP 13/Android 13を書き込んだUSBメモリから起動することができるはずです。
Raspberry Pi 4系用は、タブレットとして認識されるようになっているようです。
タブレット情報画面を見ると(実機は400ですが、)[モデル]は[Raspberry Pi 4]、[Androidバージョン]は[13]となっています。
AOSP13/Android 13では設定アプリの[システム]から[Reboot to recovery]をONにした後、電源アイコンから再起動させることでTWRPを起動することができるようになっています。
ちなみにLineageOS 19/Android 12Lでは、手順が若干異なりました(が、実機未確認)。
このスイッチをONにして再起動し、TWRPパネルが起動したらオリジナルの説明通り、このTWRPパネル上で[Install]を選択、同じUSBメモリ上のuserdataパーティションに保存したなら[data]フォルダを選択、必要に応じてファイルをインストール...でき、場合によっては再起動を要求されることもあります。
TWRPパネル上でスクショも撮れず、グレアな液晶につき、外部からカメラで撮ると映り込みがひどいので画像は省略。
TWRPパネルの[Reboot]から[System]/[PowerOff]/[Recovery]を選択可、順に[Androidイメージ]起動/[電源断]/[TWRP]起動できるようになっています。
TWRPでGoogleアプリストアをインストールしていれば、TWRPから戻るか、起動し直すかでAOSP13/Android 13に戻った時点でGoogle Play Storeアイコンもアプリ一覧にあるはずです。
あとは、設定アプリの[System]の[Language]で日本語を追加、日本語の右の横線アイコンを上にスワイプ(ドラッグ)して1番めにもっていくと、すぐに日本語に変わります。
TWRPに行く前にやると初期化されてしまう場合があるので、そこでの設定が終わったら、このように必要に応じて設定しておくとよいでしょう。
LANケーブルを接続して有線で使っているRaspberry Pi 400でもAOSP 13/Android 13はネット接続できるようにしてくれていました。
設定アプリの[ネットワークとインターネット]を開くと[<-->インターネット ネットワークを切り替えるには、イーサネット接続を解除してください]と表示されていました。
この表示をタップ(クリック)して[インターネット]を開くと併せてWi-Fiスキャンも行われており、自身のステルスにしていない方のWi-Fiルータ含め、周辺のSSIDが表示されていました。
尚、LineageOS 19/Android 12Lでは抜いても表示されたままでしたが、AOSP13では、LANケーブルを抜くと、この表示は消え、Wi-Fiのみになったように記憶しています(うろ覚え)。
が、何れにせよ、なにか間違っているのか、自身の場合、今のところ、Android 12LもAOSP13もLANケーブルを抜いて、Wi-Fi用のSSIDやパスフレーズの入力設定、「自動的にWi-Fiを接続する」旨の設定をONにしても、なぜかWi-Fi接続できていません...。
ん?ステルスモードのSSIDだったから?まっ、有線では、つながるんだから、いっか。
ホーム画面上で上からスワイプ(ドラッグ)するか、画面上部右側の[<-->]アイコンをクリックするとショートカットメニューを表示できます。
Android 12から?SSHサーバやVNCサーバがデフォルトで組み込まれているようでAOSP 13/Android 13でも設定アプリの[システム]に有効化/無効化できるトグルがありました。
この内、VNCサーバをONにした結果、Raspberry 400パソコン上で操作している画面をノートPC/Debian bullseye側でvncviewer IPADDRESS:5900としてアクセス、表示することができました。
このページに掲載した画像は全てVNCビューワ(TigerVNC Viewer)越しにPC側でスクリーンショットを撮ったものです。
ラズパイ400パソコンで使用しているディスプレイがグレア(光沢あり)でスクショアプリを入れてPCに送信することもできたでしょうが、VNCのおかげで面倒なくスクショできたので助かりました。
何れにせよTWRP画面上ではスクショできず、スマホやPC側のWebカメラで撮るとグレアゆえに映り込みがひどくて微妙なので掲載省略...。
KonstaKangさんは、とても合理的な方のようでサイトは、これでもかというほど極めてシンプル、各イメージのページも記述が割と少なく、一見、物足りなさを感じてしまいますが、よく見ると記述が必要最小限なだけで実は、必要なことは全て書いてある...というのが凄い。
ついつい記述が多くなってしまう自身としては、見習いたいところです。