Waydroid をインストール

Android 環境のコンテナシステム。

Genymotion と似ているが Linux 前提でより軽量っぽい。

# 環境
- Ubuntu 24.04 LTS
- Lenovo X1 Carbon 
 - Intel(R) Core(TM) i5-7300U CPU @ 2.60GHz
 - Intel HD Graphics 620


こちらの説明を元にインストールしていきます。


https://docs.waydro.id/usage/install-on-desktops#ubuntu-debian-and-derivatives

# 事前設定

## Wayland が必要

現在 Wayland で動いているかどうかは Ubuntu Desktop の「設定」画面で確認できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c17b24ad-df4e-4908-bbb3-92c441c23b01.png)

## 母艦の Linux のディストリビューションとバージョン

インストーラーでは Linux のディストリビューションとバージョンを指定するやり方を示されている。ソースを読むと指定しなくてもあまり変わらない感じなのだけれど、年のために指定してインストールすることにしよう。
指定するにはディストリビューションのリリースコードネームを使う。
今回試すのは Ubuntu24.04 であるが、リリースコードネームは何だったかな? いつも忘れるので以下で確かめておく。


```
$ lsb_release -sc
noble
```

ということで、 Ubuntu 24.04 は Jammy ということになる。


# インストール

Waydroid のレポジトリを追加。ここでリリースコードネームを指定する。

```
$ sudo apt install curl ca-certificates -y
$ curl -s https://repo.waydro.id | sudo bash -s noble
```
apt でインストールできるようになる。

```
$ sudo apt install waydroid -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下の追加パッケージがインストールされます:
  bridge-utils libgbinder libglibutil liblxc-common liblxc1 libpam-cgfs lxc lxc-utils lxcfs
  python3-gbinder uidmap
提案パッケージ:
  ifupdown btrfs-tools lvm2 lxc-templates lxctl
以下のパッケージが新たにインストールされます:
  bridge-utils libgbinder libglibutil liblxc-common liblxc1 libpam-cgfs lxc lxc-utils lxcfs
  python3-gbinder uidmap waydroid
アップグレード: 0 個、新規インストール: 12 個、削除: 0 個、保留: 145 個。
1,786 kB のアーカイブを取得する必要があります。
この操作後に追加で 5,991 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/main amd64 bridge-utils amd64 1.7-1ubuntu3 [34.4 kB]
.
.
.
```

# 設定とコンテナダウンロード

DashからWeydroidを起動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/750f17bd-2a6d-4579-93e8-ab7f4130e8f4.png)

最初の起動で、作成するコンテナを設定します。「Android Type」を 「GAPPS」 と変更し、「Download」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/644e619b-5065-4411-882c-5b478b138509.png)

ダウンロードしている過程のプロンプトは以下のようになっていました。

```
Waiting for waydroid container service...
Downloading https://sourceforge.net/projects/waydroid/files/images/system/lineage/waydroid_x86_64/lineage-18.1-20250503-GAPPS-waydroid_x86_64-system.zip/download
[Downloading] 883.36 MB/883.43 MB    1597.23 kbps(approx.) Validating system image
Extracting to /var/lib/waydroid/images
Downloading https://sourceforge.net/projects/waydroid/files/images/vendor/waydroid_x86_64/lineage-18.1-20250503-MAINLINE-waydroid_x86_64-vendor.zip/download
[Downloading] 191.89 MB/191.91 MB    12737.92 kbps(approx.) Validating vendor image
Extracting to /var/lib/waydroid/images
Done
```

起動しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5c328c8f-8e68-4be0-b623-6b8f46c9f8a3.png)


しかしながら、記事執筆に際してインストールしたときにはネットワークにつながらないというトラブルが発生しました。

そのようなトラブルが起こった場合は記事末尾の「トラブルシューティング」を参照して下さい。

なお、以下の Wi-Fi 表示は繋がっていないように見えますが、実はここの表示はあまり意味はないそうでここでつながっているかどうかは判断できません。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a91e560d-81e0-44c5-abf9-0de72f953bd2.png)

ネットワークがつながることが確認できた後、Google Play 開発者サービスのエラーの対処を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e3121586-77eb-4ae6-8809-815e06c68d76.png)

事前に venv をインストールしてから

```
$ sudo apt install python3-venv
```
こちらにある記述の通り作業して実行します。


https://github.com/casualsnek/waydroid_script

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

```
Waydroid はAndroid11ベースらしいので、「Android 11」を選択します。
```
? Select Android version (↑↓ Select Item) 
❯ Android 11
  Android 13
  Exit
```

Google の認証を受けるための作業を進めます。

```
? Select Android version Android 11
? Please select an action ([↑↓]: Select Item) 
  Install
  Remove
  Hack
❯ Get Google Device ID to Get Certified
```

Google Device ID が表示されるのでこれをコピーしておきます。


```
? Select Android version Android 11
? Please select an action Get Google Device ID to Get Certified
1234567890303014759
   ^----- Open https://google.com/android/uncertified/?pli=1
          Login with your google id then submit the form with id shown above
```

https://www.google.com/android/uncertified/?pli=1
にアクセスし、コピーしたIDを入力して登録します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a8c7d5ba-3582-4145-86d9-248e40908b98.png)


更に、ARMアーキテクチャのアプリを使うようにするために、変換ライブラリをインストールします。
再度 waydroid_script を実行します。

```
? Select Android version Android 11
? Please select an action ([↑↓]: Select Item) 
❯ Install
  Remove
  Hack
  Get Google Device ID to Get Certified
```

変換ライブラリには`libhoudini` , `libndk`があるらしいです。intel CPU には  libhoudini , AMD CPU には `libndk` が適しているらしいです。今回は intel CPU を用いているので libhoudini を選びます。

```
? Select Android version Android 11
? Please select an action Install
? Select apps ([↑↓]: Select Item. [Space]: Toggle Choice), [Enter]: Confirm 
  ○ gapps
  ○ microg
  ○ libndk
  ○ magisk
  ○ smartdock
  ○ fdroidpriv
❯ ○ libhoudini
  ○ widevine
```

waydroid を一度終了し、
```

$ waydroid session stop


```
再度 waydroid を起動すると、Google Play が使えるようになります。

ARM アーキテクチャのアプリも使用できます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c1e758cc-1c6d-4fcf-96b9-a4581634d2a5.png)


# 設定
「Android Genymotion Desktop をインストール」
https://qiita.com/nanbuwks/items/95242180174e03a483dc
の「その他の設定」
の内容をWaydroidでも行って、日本語などを使えるようにしていきます。


設定が終わると、アプリを入れて一通り使えるようになります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/2228e2fb-60d3-4810-a389-edce67f31043.png)

# 使いこなし

## ウィンドウの移動

SUPERキー(JP109 キーボードの場合は Windows キー)+マウス左ドラッグ

## 起動、終了

画面を閉じると終了したように見えますが、以下で調べるとセッションは継続して動作しています。
```
$ waydroid status
Session:	RUNNING
Container:	RUNNING
Vendor type:	MAINLINE
IP address:	192.168.240.112
Session user:	nanbuwks(1000)
Wayland display:	wayland-0
```
セッションを終了するには以下のようにします。

```

$ waydroid session stop

```
設定の変更の反映も、同様にセッションを止めて再起動するのが良さそうです


## 画面表示サイズ

インストールしたままだと全画面表示となりますが、以下でウィンドウサイズを指定できます。

```
$ waydroid prop set persist.waydroid.width  600
$ waydroid prop set persist.waydroid.height 1280
```

全画面表示に戻すには以下のようにします。
```
$ waydroid prop set persist.waydroid.width  ""
$ waydroid prop set persist.waydroid.height ""
```

## ウィンドウの移動


## Android アプリを呼び出す

Waydroid 中のアプリは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6527243b-8bd6-4255-80ee-7154098f2429.png)

Ubuntu のメニューからも直接呼び出すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/177c9bf9-b4ff-47e4-b481-8f5d497b5ec5.png)


# トラブルシューティング


## インストールでエラー
```

$ sudo apt install waydroid -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 python3-gbinder : 依存: python3 (< 3.11) しかし、3.12.3-0ubuntu2 はインストールされようとしています
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
```

ディストリビューションコードネームの設定を間違えていました。修正してやり直したらOK.

## ネットワークに接続できないとき


最初に試したらネットワークに接続できませんでした。
Ubuntu 24.04 には firewalld が用意されていますが、それが Waydroid へのアクセスを遮断しているようです。
Ubuntu 24.04 は特に設定をしなければ firewalld が有効になりませんが、Dockerを入れたときに有効になったかな?
```
$ sudo systemctl status firewalld 
```
とすると以下のような状態になっていました。


```
● firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2025-05-06 18:20:03 JST; 12min ago
       Docs: man:firewalld(1)
   Main PID: 805 (firewalld)
      Tasks: 3 (limit: 9134)
     Memory: 3.9M
        CPU: 1.596s
     CGroup: /system.slice/firewalld.service
             └─805 /usr/bin/python3 /usr/sbin/firewalld --nofork --nopid

 5月 06 18:20:12 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t nat -F DOCKER' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:12 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t nat -X DOCKER' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:13 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t filter -F DOCKER' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:13 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t filter -X DOCKER' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:13 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t filter -F DOCKER-ISOLATION-STAGE-1' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:13 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t filter -X DOCKER-ISOLATION-STAGE-1' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:13 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t filter -F DOCKER-ISOLATION-STAGE-2' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:13 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t filter -X DOCKER-ISOLATION-STAGE-2' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:13 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t filter -F DOCKER-ISOLATION' failed: ip6tables: No chain/target/match by that name.
 5月 06 18:20:13 nanbuwks-ThinkPad-Yoga-370 firewalld[805]: WARNING: COMMAND_FAILED: '/usr/sbin/ip6tables -w10 -t filter -X DOCKER-ISOLATION' failed: ip6tables: No chain/target/match by that name.
```
firewall の trasted ゾーンに登録したらいいのかと思い、設定ツールをインストールして
```
$ sudo apt install firewall-config
```
設定しましたがうまくいかず。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ff8ccbb5-dc7d-44c5-8b2d-b1ef02b4cb2a.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/8a3db28b-cc29-43be-88a6-f823aacad46b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e44f5372-c999-407f-b720-3f4a8d7da0df.png)

このドキュメントを見てあれこれやって、一度通信できるようになったけれども再起動すると再び遮断されてしまいました。

https://docs.waydro.id/debugging/networking-issues

また、

`/usr/lib/waydroid/data/scripts/waydroid-net.sh` の

```
LXC_USE_NFT="false"
```

を設定すると解決したという報告もあるけれども、確認すると既に false となっていました。



`/usr/lib/waydroid/data/scripts/waydroid-net.sh` はいろいろと問題があるらしいですね。

今回は、Docker も使わくなっていたので firewalld を無効にして、解決しました。

```
$ sudo systemctl disable firewalld
$ sudo systemctl stop firewalld
```