LinuxシステムでAndroidアプリを動かす方法について、IvonはLinux Android Emulatorsの記事で複数の方案に触れました。本記事ではAndroid-x86の分岐である「Bliss OS」を紹介します。
Bliss OSはAndroid-x86の改良版と言えるもので、物理機にも仮想マシンにもインストールでき、Intel第10世代以降のGPUなど多くの新しいハードウェアに対応しています。Androidバージョンの更新も比較的速いです。
Google Playストアを内蔵し、別途トランスレーターを入れなくても64ビットの3Dゲームを遊べます。これはかなり大きな進歩です。
この記事では、LinuxにBliss OSのQEMU/KVM仮想マシンをインストールし、virglrendererで仮想マシンのGPUアクセラレーションを行い、スマホゲームを遊べるようにする方法を扱います。
動画版のインストール手順はこちら:
1. なぜBliss OSを選ぶのか?#
関連記事:Bliss OS紹介
Bliss OSはAndroid-x86をベースに開発されたAndroidシステムで、x86アーキテクチャのPCやタブレットでAndroidを動かすために設計されています。Android-x86を基礎に多くの実用ツールをプリロードし、活発なオープンソース更新モデルを維持しています。
比較すればわかりますが、Android-x86公式サイトの最新バージョンはAndroid 9.0である一方、Bliss OSの最新テスト版はAndroid 13に到達しています。
Androidバージョンが古いことは一見大きな問題ではなさそうですが、ARMトランスレーションでは大きな差になります。Android-x86 9.0はIntelの「liboudini」技術に依存し、x86アーキテクチャのAndroidシステム上でARMアーキテクチャのAPKを実行しますが、対応するのは32ビットARM-v7eabiのAPKだけです。現在は64ビットARM-v8aのAPKしか提供しない開発者が増えています。したがって、64ビットARMアーキテクチャのAPKと互換性を持たせるには、Android 11以降のlibhoudiniへ切り替える必要があります。
Androidバージョンが新しく、より多くのPCハードウェアと互換性があるだけでなく、Bliss OSはAndroidをPCらしくする機能も追加しています。たとえば強制回転、キーマッピング、ゲームモード、タッチクリックのシミュレーション、KernelSU(より検出されにくいroot権限)などの実用機能があり、さらに従来のAndroid recoveryを「Gearlock」に置き換えています。
ちなみに、Bliss OSの開発チームはWaydroidも開発しているため、両者の機能には似ているところがあります。
2. 仮想マシンのインストールに必要なソフトウェアとハードウェア#
私のシステム仕様:
- CPU:Intel i5-10210U
- GPU:Intel® UHD Graphics 620
- Android-x86バージョン:11.0
- QEMUバージョン:8.1.1
- virglrendererバージョン:0.10.4
CPUの仮想化が有効で、KVMカーネルモジュールが読み込まれていることを確認してください。
LinuxシステムにQEMU、Libvirt、Virt Managerパッケージをインストールしてください。Ubuntuはこの記事を参考にインストールします。Arch Linuxはこの記事を参考にしてください。
次に互換性のあるグラフィックカードを用意します。virglrendererは準仮想化GPU技術で、QEMU/KVM仮想マシンがGPUパススルーなしで3Dハードウェアアクセラレーションを得られます。
virglrendererにはIntelとAMDのグラフィックカードをおすすめします。Nvidiaクローズドソースドライバーのvirglrendererはあまり安定していません。
GPUパススルーをやる場合、NvidiaはAndroid側ドライバーに問題があるため、IntelまたはAMD GPUを使う必要があります。
Nvidiaグラフィックカードの場合、ハードウェアアクセラレーションを諦め、Bliss OSのNo HW Accelerationモードで起動することをおすすめします。
3. Bliss OSシステムのインストール開始、ディスク分割#
Bliss OS公式サイトは各種バージョンのISOを提供しており、インストール方法はおおむね同じです。
Bliss OS 14(Android 11)とBliss OS 15(Android 12L)はIntel libhoudiniでARMアーキテクチャのAPKを変換します。それ以降のバージョンではGoogle libndkに切り替わっています。
ここではBliss OS 15を例にします。
公式サイトまたはSourceForgeからISOをダウンロードし、GApps内蔵版 (Bliss OS 15.9.x (x86_64-v2) with GApps) を選びます。その後、ファイル破損を防ぐためファイルの完全性を確認します。

Virt Managerを開き、新規仮想マシンを作成し、ISOを選択します。システムはAndroid-x86を選びます

8GB RAM、4コアCPUの割り当てをおすすめします。ARM命令変換が大量のRAMを消費することがあるため、RAMは多いほど良いです。

少なくとも64GBの仮想ディスクを割り当てます

インストール前に設定をカスタマイズする項目にチェックを入れます

チップセットタイプはQ35、ファームウェアはUEFI (OVMF_CODE.fd) を選択します

ディスクをVirtIOに設定します

CDROMをSATAに変更します

起動デバイスをすべてチェックし、CDROMを一番上に置きます

Spiceのリッスンタイプをなしに設定し、OpenGLにチェックを入れ、デバイスでIntelグラフィックカードを選択します

ビデオカードをVirtIOに設定し、3Dアクセラレーションにチェックを入れます。ここでの3DアクセラレーションはVirGLで実現しています。Linux virtio-gpu virglrenderer for QEMU/KVMを参照してください。

システムのインストール開始をクリックします
キーボードでBliss OS Installationを選択します

Enterを押し、
Create/Modify Partitionを選択します
GPTパーティションテーブルを使用することを確認します

キーボードで操作します:左右キーで
Newへ移動し、Enterを押し、+512Mを入力し、さらにef00を入力してパーティションタイプをEFIに変更します。パーティション名をefiに設定し、最初のパーティションをEFIパーティションにします。
キーボードでFree Spaceへ移動し、Enterを押して
Newを選び、すべてEnterで進め、パーティション名にandroidを入力し、2つ目のパーティションをLinuxシステムパーティションにします。(アライメントの都合で3つのパーティションが出ることがありますが、気にしなくてよいです)
キーボードで
Writeへ移動し、Enterで変更を書き込みます。その後Quitへ移動して終了します。分割済みのディスク
vda2を選択します
システムをExt4でフォーマットします

EFI/GRUBをインストールし、フォーマットします

インストール後、Virt Managerの強制シャットダウンボタンをクリックします。ハードウェア一覧からCDROMを削除します

以後の起動では最初の選択肢を選ぶと、デフォルトでvirglrendererアクセラレーションのシステムが読み込まれます。ハードウェアアクセラレーションなしの選択肢をテストする場合は、QEMUビデオカードをQXLに変更し、起動時にVM Options → VBox/VMWare - No HW Accelerationを選択して起動してください。

Bliss OSはGoogle Playストアを内蔵しており、デバイス認証なしで直接Googleアカウントにログインできます。
ARMトランスレーターはデフォルトで有効なので、手動インストールは不要です。
4. Bliss OSの画面解像度を変更する方法#
起動メニューでVM Options → Debug QEMU/KVM VirGLを選び、Android shellに入ります

blikidコマンドでEFIディスクパーティションを確認します。通常は/dev/sda1ですEFIパーティションをマウントします
mount /dev/sda1 /mntandroid.cfgを編集します
cd /mnt/efi/boot
vi android.cfgまず
linux $kd/kernelの行を見つけ、最後にvideo=1920*1080を追加します。次にset gfxmode=の行を見つけ、解像度を変更します。再起動
umount /dev/sda1
reboot -f別の解像度変更方法として、SecondScreenをインストールして強制調整する方法もあります。
解像度変更後にマウスが同期できない場合は、2本目のマウスを用意し、Virt ManagerのUSBリダイレクト機能でパススルーする必要があります。
Virt ManagerのウィンドウはBliss OS仮想マシンの解像度変化に反応できないようで、画面が依然としてぼやけて見えます。
5. Bliss OS使用テクニック#
Bliss OSはデフォルトでBoringdroidのデスクトップモードを有効にしており、システム下部にタスクバーが常駐します。
全画面で実行したいアプリがある場合は、システム設定 → Boringdroid → Set full screen appで選択できます。
Bliss OSには「Set Orientation」アプリがプリインストールされており、画面を強制回転できます。ただしこれは古すぎるので、私はOHMAE Ryosuke’s Force Rotation Screenの方が使いやすいと思います。
スクリーンショットはプルダウンメニューから撮影します。画面録画については、virglrendererで録ると色がおかしくなるため、PC側のOBS Studioで仮想マシンウィンドウをキャプチャすることをおすすめします。
ネイティブAndroidのマルチウィンドウ対応はあまり良くありません。どうしても使うなら、開発者向けオプションで「自由形式ウィンドウ」を有効にできます。
Bliss OSはKernelSUとTermuxを内蔵しています。Root権限は全域で有効ではなく、個別アプリに対してマウントする必要があります。
仮想マシンのADB接続はReddit記事を参考にして無線接続しました。ADB ShellでRoot権限を有効にするには、KernelSUを開いて「com.android.shell」に権限を付与すればよいです。
6. 実際にBliss OSでゲームを遊ぶ#
ゲームのインストールは、x86アーキテクチャをネイティブサポートするバージョンをおすすめします。Google Playが自動でフィルタしてくれるはずです。ARMアーキテクチャのAPKをインストールすると、システムは変換のために追加リソースを消費します。
ゲームがエミュレーターを検出しなければ起動するはずですが、一部のゲームでは動画再生に問題があります。おそらくvirglrendererのbugです。起動メニューのDebuggingメニューでhwcomposer.drm方式を使って起動してみてください。
ゲームでマウスクリックが反応しない場合は、システム設定 → Blissify → Force Mouse Click as touchで、マウスクリックイベントを強制的にタッチクリックへ変換できます。このオプションを有効にするとマウスホイールが無効になる点に注意してください。
Bliss OSは「ゲームモード」を内蔵しており、システム設定 → Blissify → Gaming Modeで有効化できます。ユーザーがゲームアプリを開くと通知が自動で無効化され、スクリーンショットに便利なフローティングボタンが表示されます。
一部のゲームはキーマッピングがないと操作できません。KernelSUを開いてXtMapperにRoot権限を付与できます。次にXtMapperを開き、サービスを有効化し、アプリを選択してキー割り当てを設定します。
また、QtScrcpyのキーマッピングも仮想マシンと組み合わせて使えます。
Bliss OSトランスレーターの実力をテストするため、以下のゲームはすべてARM-v8アーキテクチャのAPKでテストしました。Google Playがインストールさせてくれない場合は、自分でAPKを探してください。
《Fruit Ninja》、《Temple Run 2》は正常に動作します。
次は《原神》です。Waydroidでは動くので、理論上Bliss OSでもいけるはずですが… virglrendererがあまり安定せず、原神v4.1.0はシェーダーコンパイル時にクラッシュします。
もう一つの大型ゲーム《Tower of Fantasy》は、スクリプトなしで正常にゲームへ入れました。

