UbuntuにWaydroidをインストール:コンテナでAndroidを「ネイティブアプリ」のように快適に動かす

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

課題:深夜2時にAndroid仮想マシンがメモリを使い果たしたとき

昨夜、Android環境で動作するオートメーションボットのデバッグをしていました。いつものようにAndroid Studioを立ち上げ、AVD(Android Virtual Device)を起動したところ、16GBのRAMを搭載したノートPCのファンが激しく回り始め、システムが悲鳴を上げ始めました。スワップが頻発し、操作の遅延(レイテンシ)にイライラが募ります。

BluestacksやAVDのようなエミュレータは、通常「完全仮想化(Full Virtualization)」に基づいています。これらはUbuntuの上でさらに重いOSを動かすため、CPUに多大な負荷をかけます。効率的に作業するためには、システムの既存リソースを直接活用できる、より軽量なソリューションが必要でした。

従来の仮想化がなぜ遅いのか?

Android仮想マシンを実行する場合、Ubuntuは完全に独立したゲストOS(Guest OS)に対してハードウェアリソースを割り当てる必要があります。これら2つのOSは独立したカーネル(Kernel)を持っており、非常に低速な中間層を介して通信します。

私は現在、12台のVMとコンテナで構成されるProxmox VEのホームラボを運用していますが、その経験から言えるのは「最高のパフォーマンスを求めるならコンテナを使え」ということです。Waydroidはこの問題を解決するために誕生しました。LXCコンテナ内でAndroidを実行し、Linuxとカーネルを共有します。これにより、パフォーマンスはほぼネイティブに近いレベルに達します。

Linux上のAndroidソリューション比較

  • Anbox: かつては人気がありましたが、現在は開発が停止しています。インストールが複雑で、カーネルモジュールのエラーが頻発します。
  • Genymotion: 動作は安定していますが、ライセンス料がかかり、依然としてVMアーキテクチャに基づいています。
  • Waydroid: 現在のベストチョイスです。Waylandをサポートしており、非常に高速で、完全に無料です。

トラブルを避けるためのWaydroidの正しいインストール方法

重要な注意点:WaydroidはWayland環境で最もよく動作します。X11(古いUbuntuで一般的)を使用している場合は、起動をサポートするためにwestonを追加でインストールする必要があります(ただし、滑らかさは若干低下します)。

ステップ1:システムの更新

このステップを飛ばさないでください。依存関係を同期させることで、後の面倒なライブラリの競合エラーを避けることができます。

sudo apt update && sudo apt upgrade -y
sudo apt install curl ca-certificates -y

ステップ2:公式リポジトリの追加

Waydroidはデフォルトのストアにはありません。以下のコマンドで開発者のリポジトリを追加する必要があります。

export DISTRO=$(lsb_release -sc)
curl https://repo.waydroid.net | sudo bash
sudo apt install waydroid -y

ステップ3:Androidイメージの初期化

インストール後、Androidのインストーラをダウンロードする必要があります。主に2つのオプションがあります。

  • VANILLA: Google Playサービスを含まない純粋なAndroid(非常に軽量)。
  • GAPPS: アプリをダウンロードするためのGoogle Playが含まれている(一般的な用途に適しています)。

アプリのインストールが便利なGAPPS版をお勧めします。

sudo waydroid init -s GAPPS

このプロセスでは約700MBのデータがダウンロードされます。待っている間にコーヒーでも淹れて一息つきましょう。

ステップ4:サービスの有効化

Waydroidはバックグラウンドのコンテナサービスとして動作します。ユーザーインターフェースを開く前に起動する必要があります。

sudo systemctl start waydroid-container
waydroid show-full-ui

Waydroid特有のトラブル解決方法

実際のインストールでは、いくつか小さな問題が発生することがあります。以下は、私のシステムで解決した方法です。

1. インターネット接続エラーの修正

Androidでネットワークに繋がらない場合、Ubuntuのファイアウォールがブリッジネットワークをブロックしている可能性が高いです。以下のコマンドでwaydroid0への通信を許可してください。

sudo ufw allow in on waydroid0
sudo ufw allow out on waydroid0
sudo ufw route allow in on waydroid0
sudo ufw route allow out on waydroid0

2. x86 PCでARMアプリを実行する (libhoudini)

ほとんどのAndroidアプリはARMチップ向けにビルドされていますが、PCはx86_64を使用しています。TikTokやShopeeなどを動かすには、変換レイヤー(translation layer)が必要です。コミュニティのスクリプトを使って素早く処理します。

git clone https://github.com/casualsnek/waydroid_script
cd waydroid_script
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
sudo python3 main.py install libhoudini

このスクリプトをインストールすれば、「互換性のないアーキテクチャ」というエラーは完全に消えます。

3. Googleへのデバイス登録 (Device is not certified)

コンテナ内で実行されているため、Googleはデバイスを「未認証」としてフラグを立てます。手動で登録するためにAndroid IDを取得する必要があります。

sudo waydroid shell
settings get secure android_id

表示されたIDをコピーし、Google Device Registrationにアクセスして貼り付ければ完了です。

おわりに

WaydroidはLinuxユーザーにとって本当に大きな進歩です。Android Studioの仮想マシンに4〜6GBのRAMを消費する代わりに、Waydroidは待機時にわずか1〜2%のCPUしか消費しません。アプリの起動速度も従来のエミュレータより3〜4倍高速です。

アプリのテストを素早く行いたい、あるいはUbuntuデスクトップでZaloやTikTokを使いたい場合、Waydroidは現在最も最適な選択肢です。

Share: