(2023/01/04 更新)Waydroid公式のイメージがLineageOS 18 / Android 11系に更新されたため、以下の内容のうち1. イメージ作成については不要となった。
できること
背景
知られている通り、AndroidカーネルはほぼLinuxそのものである。これを逆手に取り、LinuxカーネルでAndroidを動かそうと試みた賢い人々がおり、結果として以下のような形に結実した。
これまでも単なるAndroidエミュレータなら無数にあったが、Waydroidはエミュレーションという手法を慎重に避ける。代わりにlxc
で立てたコンテナ内でAndroidを動かすアプローチを取っており、これに伴って以下のメリットがある。
- ネイティブハードウェアの活用による省リソース化
- ホストシステム(Linux)とのシームレスな統合
さて、単にWaydroidを動作させるだけなら公式の手順を踏めばよいが、ここでは公式イメージ(LineageOS 17 / Android 10)ではなく開発版イメージ(LineageOS 18 / Android 11)を導入する手順を書く。なぜならウマ娘の動作にはAndroid 11のイメージが必要だから(後述)。
手順
実験環境
key | val |
---|
OS | Arch Linux |
CPU | Intel Core i7-11700K |
RAM | 32GB |
GPU | AMD RX6600XT |
Kernel | 5.19.6-zen1-1-zen |
Waydroid | v1.3.0 |
通常のAOSPのビルド環境、およびWaydroid本体(イメージを除く)の導入は済んでいるものとする。
要求環境
- 250GB以上の空き容量
- 根気
- Linux環境
- Wayland環境
- それなりの速度のネットワーク
- (できれば)コア数の多いCPU
1. イメージ作成
親切なことにビルド手順についても公式ドキュメントが整備されているが、2022年9月時点ではLineageOS 17 / Android 10向けとなっているため、該当部分を修正している。
依存パッケージのインストール
通常のAndroid(AOSP)のビルド環境に加えて、meson
, simg2img
等が必要になる。
(このほかにも依存関係があるかもしれないので、ビルドがコケたら適宜インストールする)
初期化・マニフェスト取得
ソースの同期
オプションで並列実行を指定しているが、それでも信じられないほど時間がかかる。途中で失敗した場合は再実行する。
ビルド設定
lunch
の引数は使っている CPU アーキテクチャに合わせる。
ビルド実行
メモリが不足する場合コア数を調整する。
イメージ形式の変換
できたイメージを適切な場所(たいていは/usr/share/waydroid-extra/images
以下?)に移す。
コンテナ設定
新しいバージョンではAndroid内部の変数を読んでくれるようなので不要かもしれない。
初期化
ここでいったん Waydroid 環境を初期化しておく。
2. GAPPS / ARM対応
どちらかというと以下が本題である。
ここまでの作業でx86_64のAndroidイメージが起動できるようになったが、まだプレイストアは使えない。さらに、ウマ娘はじめたいていの娯楽アプリはARM向けにしか作られていないため、このままでは動作しない。そこでOpenGAPPSとlibhoudiniを導入する。ざっくりいうと:
- OpenGAPPS
- カスタムROMでPlay Storeを使えるようにするプロジェクト
- libhoudini
- x64-ARM間の翻訳レイヤ
- Android 11以上にしか対応していない。わざわざイメージをビルドしたのはこれが理由
導入にあたっては以下のスクリプトが助けになる。
ここからは踏み込んだ説明は避けるが、READMEを参考に
- OpenGAPPSを導入
- libhoudiniを導入
- Android IDを取得し、Google のページで登録
する手続きで、Play StoreとARM向けアプリが動作するようになる。うまくいった結果が冒頭の画像である。
なお、冒頭の画像のうち、ターミナルの右半分はGPUの使用状況、画面最上部のバーの桃色部分はCPU使用率をそれぞれ示している。CPU使用率はごく低く、GPUもハードウェアアクセラレーションが効いているのが確認できる。
結論
本当にすごい時代になった。が、ウマ娘をプレイしていないので個人的な利益はとくにない。
補遺
ここまで書くと万能のようだが、動かないアプリも一定数ある。たとえばClash Royale、プリコネ RDなどは手元で動作しなかった。
原因として考えられること:
- 地域設定
- root化検知に引っかかっている
- Waydroidはroot化されたLineageOSと同等であるため、root化検知が働いている可能性がある
- Magisk系のモジュールを使えば回避できるかもしれないが、Waydroidではいろいろと制約があり(Zygiskが使えない、など)試していない