Ubuntu上でAndroidを動かせるWaydroidを導入

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はlibndkIntelはlibhoudiniが良いとされています。ただしアプリによっては逆の方が動く場合もあるため、うまく動かない場合は両方試してみてください。

翻訳レイヤー向いているCPU特徴
libndkAMDAMD向け最適化あり
libhoudiniIntelIntelの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

このあとシステムを再起動すれば完了です。

タイトルとURLをコピーしました