Ubuntu上でAndroidを動かしたい場合はエミュレータを利用する方法のほか、Waydroidを利用する方法があります。Waydroidは、Linux上で完全なAndroid環境をコンテナとして動作させ、Androidアプリをネイティブに近い速度で実行できるオープンソースのソフトウェアです。
主な特徴と仕組みは以下の通り。
- 軽量かつ高速:仮想マシン(エミュレータ)とは異なり、LinuxカーネルをホストOSと直接共有するため、パフォーマンスの低下が少なく非常に高速に動作します。
- シームレスな統合:Linuxのデスクトップ環境上で、通常のウィンドウアプリのようにAndroidアプリを起動できます。
- マルチウィンドウ対応:Androidアプリを独立したウィンドウとして扱えるため、Linuxのマルチタスク環境に自然に溶け込みます
Waydroidのインストール
Waydroidをインストールするには下記となりますが、Google Playを利用出来るようにするにはさらにインストールが必要になるので、まとめてインストールするスクリプトを作成しました。
# 依存関係のインストール sudo apt install curl ca-certificates -y # Waydroidリポジトリの追加 curl https://repo.waydro.id | sudo bash # Waydroidのインストール sudo apt install waydroid -y # 初期化 sudo waydroid init # 起動 sudo systemctl start waydroid-container waydroid session start waydroid show-full-ui
WaydroidのインストールからGoogle Playを使用可能な状態まで
以下のスクリプトで、下記をまとめて実行出来ます。
必要な依存パッケージをインストール
Waydroid本体をインストール
binder カーネルモジュールを確認・ロード
GAPPSイメージ(Google Play Store入り)で初期化
コンテナサービスを起動・自動起動設定
Android IDを自動取得して デバイス登録URL を案内
起動コマンドを表示
スクリプトを保存して実行、もしくはターミナルに直接貼り付けて実行します。
mkdir -p /opt/waydroid
cd /opt/waydroid
nano waydroid-setup.sh
bash waydroid-setup.sh
#!/bin/bash
# =============================================================
# Waydroid + Google Play セットアップスクリプト
# 対応: Ubuntu 22.04 ~ 26.04
# 使い方: bash waydroid-setup.sh
# =============================================================
set -e
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
success() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
# ── 0. root チェック ──────────────────────────────────────────
if [ "$EUID" -eq 0 ]; then
error "rootで実行しないでください。sudoを使う一般ユーザーで実行してください。"
fi
echo -e "${CYAN}"
echo "╔══════════════════════════════════════════════╗"
echo "║ Waydroid + Google Play セットアップ ║"
echo "╚══════════════════════════════════════════════╝"
echo -e "${NC}"
# ── 1. 依存パッケージ ─────────────────────────────────────────
info "必要なパッケージをインストール中..."
sudo apt update -qq
sudo apt install -y curl ca-certificates lzip python3 python3-pip \
wget unzip sqlite3 2>/dev/null
success "依存パッケージ OK"
# ── 2. Waydroid インストール ──────────────────────────────────
if ! command -v waydroid &>/dev/null; then
info "Waydroid をインストール中..."
curl -fsSL https://repo.waydro.id | sudo bash
sudo apt install -y waydroid
success "Waydroid インストール完了"
else
success "Waydroid はすでにインストール済み"
fi
# ── 3. binder カーネルモジュール確認 ─────────────────────────
info "binder モジュールを確認中..."
if ! lsmod | grep -q binder; then
sudo modprobe binder_linux || \
sudo modprobe binder || \
warn "binder モジュールをロードできませんでした。カーネルによっては手動対応が必要です。"
fi
# ── 4. GAPPS イメージで初期化 ────────────────────────────────
info "Waydroid を GAPPS イメージで初期化中(初回は数分かかります)..."
if [ ! -f /var/lib/waydroid/images/system.img ]; then
sudo waydroid init -s GAPPS -f
success "Waydroid 初期化完了(GAPPSイメージ)"
else
warn "既存の Waydroid イメージが見つかりました。再初期化をスキップします。"
warn "再初期化する場合: sudo waydroid init -s GAPPS -f"
fi
# ── 5. Waydroid コンテナ起動 ──────────────────────────────────
info "Waydroid コンテナサービスを起動中..."
sudo systemctl enable --now waydroid-container
sleep 3
success "コンテナ起動 OK"
# ── 6. Google Play 認証(証明書登録)────────────────────────
info "Google Play 用デバイス証明書を取得中..."
# Android ID を取得(セッション起動が必要)
info "Waydroid セッションを一時起動して Android ID を取得..."
waydroid session start &
SESSION_PID=$!
sleep 8
ANDROID_ID=$(waydroid prop get ro.boot.hardware.sku 2>/dev/null || true)
# より確実な方法でAndroid IDを取得
ANDROID_ID=$(sudo sqlite3 /var/lib/waydroid/data/data/com.google.android.gsf/databases/gservices.db \
"SELECT value FROM main WHERE name='android_id';" 2>/dev/null || echo "")
kill $SESSION_PID 2>/dev/null || true
sleep 2
if [ -n "$ANDROID_ID" ]; then
# 10進数→16進数変換
ANDROID_ID_HEX=$(python3 -c "print(hex(int('$ANDROID_ID'))[2:])" 2>/dev/null || echo "$ANDROID_ID")
success "Android ID 取得: ${ANDROID_ID_HEX}"
echo ""
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${YELLOW} Google Play デバイス登録 (手動ステップ)${NC}"
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo " 1. ブラウザで以下のURLを開く:"
echo -e " ${CYAN}https://www.google.com/android/uncertified/${NC}"
echo ""
echo " 2. Google アカウントでログインし、以下のIDを入力:"
echo -e " Android ID (16進): ${GREEN}${ANDROID_ID_HEX}${NC}"
echo ""
echo " 3. 「登録」ボタンをクリック"
echo ""
echo -e "${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
read -rp "デバイス登録が完了したら Enter を押してください..."
else
warn "Android ID の自動取得に失敗しました。"
warn "後で手動で取得してください: sudo waydroid shell, getprop ro.serialno"
fi
# ── 7. 完了・起動コマンド案内 ─────────────────────────────────
echo ""
echo -e "${GREEN}╔══════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ セットアップ完了! ║${NC}"
echo -e "${GREEN}╚══════════════════════════════════════════════╝${NC}"
echo ""
echo "▶ Waydroid を起動するには:"
echo -e " ${CYAN}waydroid session start${NC} ← セッション開始(バックグラウンド)"
echo -e " ${CYAN}waydroid show-full-ui${NC} ← 画面を表示"
echo ""
echo "▶ 停止するには:"
echo -e " ${CYAN}waydroid session stop${NC}"
echo ""
echo "▶ アプリを直接起動:"
echo -e " ${CYAN}waydroid app launch com.android.vending${NC} ← Play Store"
echo ""
echo "※ Play Store へのログイン後、デバイス認識まで最大15分かかる場合があります。"
echo "※ 認識されない場合: Waydroid を再起動して再度お試しください。"
echo ""
Googleアカウントの登録と日本語化
Waydroidが起動したらまずはGoogleアカウントを登録します。

Google Playが表示されます。英語メニューなのでシステムを日本語化します。

操作はAndroidと同じで、上から下へスワイプすれば「通知の確認」と「クイック設定」、下から上へスワイプすればアプリ一覧が表示されます。どちらでもよいので、設定画面を表示します。

「System」-「Languages & input」を選択。

言語を日本語にすれば日本語メニューになります。


ARMアプリを利用出来るようにする
WaydroidはLinux上でx86_64のAndroidを動かすため、ARMバイナリをそのままでは実行できません。ARM翻訳レイヤーを挟むことで変換します。
sudo apt install -y git python3.14-venv
sudo waydroid session stop 2>/dev/null; \
git clone https://github.com/casualsnek/waydroid_script && \
cd waydroid_script && \
python3 -m venv venv && \
venv/bin/pip install -r requirements.txt -q && \
CPU=$(grep -m1 'vendor_id' /proc/cpuinfo | grep -q 'AuthenticAMD' && echo "libndk" || echo "libhoudini") && \
echo "CPUに合わせて ${CPU} をインストールします..." && \
sudo venv/bin/python3 main.py install $CPU && \
sudo systemctl restart waydroid-container && \
echo "完了!ARM翻訳レイヤー導入済み"
もし動かないアプリがある場合
CPUによって推奨が異なり、AMDはlibndk・Intelはlibhoudiniが良いとされています。ただしアプリによっては逆の方が動く場合もあるため、うまく動かない場合は両方試してみてください。
| 翻訳レイヤー | 向いているCPU | 特徴 |
|---|---|---|
| libndk | AMD | AMD向け最適化あり |
| libhoudini | Intel | IntelのWSAから抽出、安定性高め |
もし動かないアプリがある場合は、もう片方の翻訳レイヤーに切り替えて試します。
cd waydroid_script
# libhoudiniに切り替える場合
sudo venv/bin/python3 main.py install libhoudini
sudo systemctl restart waydroid-container
⚠️ 注意:SSE 4.2命令セットを持たない古いCPUでは、どちらの翻訳レイヤーも動作しない場合があります。その場合はVirtualBox上のAndroid-x86が代替手段になります。
APKをダウンロード
APKを直接インストールしたい場合は、APKMirrorなどのサイトから直接APKをダウンロードし、ホスト側で下記を実行してインストールします。
waydroid app install /path/to/your/app.apk
ホストのフォルダをマウントする
ホストのフォルダをWaydroidの内部ストレージにbindマウントすることで、Android側からファイルが見えるようになります。
下例:/opt/lxd-data → Android の「Shared」
sudo mkdir -p ~/.local/share/waydroid/data/media/0/Shared
sudo mount --bind /opt/lxd-data ~/.local/share/waydroid/data/media/0/Shared
再起動後も自動でマウントするには
毎回手動実行が面倒なので /etc/fstab に追記します。
echo "/opt/lxd-data $HOME/.local/share/waydroid/data/media/0/Documents none bind 0 0" \
| sudo tee -a /etc/fstab
Waydroidを削除する方法
# 1. セッションとコンテナを停止
waydroid session stop
sudo systemctl stop waydroid-container
# 2. 自動起動を無効化
sudo systemctl disable waydroid-container
# 3. Waydroid本体をアンインストール
sudo apt remove --purge waydroid -y
# 4. データ・イメージを完全削除
sudo rm -rf /var/lib/waydroid
rm -rf ~/.local/share/waydroid
rm -rf ~/.config/waydroid
# 5. 自動起動ファイルを削除(設定した場合)
rm -f ~/.config/autostart/waydroid-session.desktop
# 6. リポジトリを削除
sudo rm -f /etc/apt/sources.list.d/waydroid.list
sudo apt autoremove -y
sudo apt update
ARM翻訳(waydroid_script)も削除したい場合は下記も実行。
sudo rm -rf ~/waydroid_script
このあとシステムを再起動すれば完了です。


