Linuxコンテナで動作するAndroid、Waydroid
(waydro.id)- Waydroidは、WaylandベースのGNU/Linuxデスクトップ上で完全なAndroidシステムをコンテナとして起動し、AndroidアプリをLinuxアプリのように一緒に実行できるようにするプロジェクト
- Linux名前空間とLXC、binderインターフェースを活用し、Androidコンテナが必要なハードウェアへ直接アクセスでき、arm、arm64、x86、x86_64のGNU/Linuxプラットフォームをサポート
- AndroidアプリはLinuxのアプリケーションフォルダーに統合でき、Multi-Window Mode、Full UI Mode、Fullscreen Modeといった利用環境別の実行モードを提供
- ランタイムはLineageOSベースの最小限にカスタマイズされたAndroidシステムイメージで構成されており、現在のイメージはAndroid 13ベース
- インストール後はwaydroid-containerサービスを開始し、アプリメニューで初回起動ウィザードを進める必要があり、Waydroid-Linuxベータ版ディストリビューションはlive modeではなくインストール環境で動作
WaydroidのAndroid-on-Linuxアーキテクチャ
- Waydroidは、一般的なGNU/LinuxシステムのWaylandベースのデスクトップ環境上で完全なAndroidシステムをコンテナとして起動する方式を採用
- コンテナ内部のAndroidはLinux名前空間を使用
- user
- pid
- uts
- net
- mount
- ipc
- AndroidシステムはLXCとbinderインターフェースを通じて必要なハードウェアへ直接アクセス
- 対応プラットフォームはGNU/Linuxベースのarm、arm64、x86、x86_64
- プロジェクトは無料のオープンソースで、リポジトリはGitHubにある
デスクトップ統合と実行モード
- AndroidアプリはLinuxアプリケーションと並んでデスクトップ上で動作し、WaydroidはAndroidアプリをLinuxのアプリケーションフォルダーに追加
- 実行モードは利用方法に応じて分かれる
- Multi-window mode: Androidのfreeform window定義を拡張して複数の機能を追加
- Full UI Mode: ゲームやフルスクリーンのエンターテインメント向けにAndroid UI全体を表示
- デスクトップ・キオスク向けのFullscreen Modeを利用可能
- パフォーマンス面では、WaylandとAOSP mesaを使用して可能な限りネイティブに近い動作を目指す
- Androidランタイム環境はLineageOSベースの最小限にカスタマイズされたAndroidシステムイメージとともに提供され、現在のイメージはAndroid 13ベース
ドキュメント、インストール、Waydroid-Linuxベータ
- ドキュメントとIssue管理は別リンクで確認可能
- ドキュメント: docs.waydro.id
- バグレポート: GitHub Repo
- 開発リポジトリ: GitHub
- デスクトップ向けインストール文書: installation docs
- 手動イメージダウンロード: SourceForge
- systemdディストリビューションでの迅速なインストール手順は、ディストリビューション別のインストール文書に従ったうえで、自動起動されていなければwaydroid-containerサービスを開始し、アプリケーションメニューからWaydroidを起動して初回起動ウィザードを進める
- 初回起動中に求められた場合は、OTAリンクとしてSystem OTAとVendor OTAを入力
- System OTA:
https://ota.waydro.id/system - Vendor OTA:
https://ota.waydro.id/vendor
- System OTA:
- Waydroid-Linux Betaは、Waydroidが実現できる統合の可能性を示すために作られた完全統合ディストリビューション
- 初期アルファリリースはUbuntu 20.04(focal)から開始
- 現在はUbuntu 22.04(jammy)とDebian 12(bookworm)も含む
- 実行可能な作業範囲を広げるためのさまざまなツールとスクリプトを含む
- WaydroidはLXCとbinder用のカーネルモジュールを使用するため、Waydroid-Linuxはlive modeでは動作せず、正常に動作させるにはインストールが必要
- ベータ版のダウンロード項目はREADME.mdの確認を求めており、例としてUbuntu 22.04 KDE-Plasma、Ubuntu 22.04 Gnome、Debian 12 Beta、Ubuntu 21.10 Beta、以前のアルファリリースが提供されている
1件のコメント
Hacker Newsのコメント
これがフロントページに載ったのは意外。かなりよく知られたソフトウェアだから
残念なのは、Waydroidで動くGoogle提供イメージがないこと。たとえば汎用システムイメージのようなもの。ネットで拾った任意のROMにパスワードを入れるのは気が進まない
https://source.android.com/docs/core/tests/vts/gsi
Waydroidのようにコミュニティの支援と継続的な提供が必要なプロジェクトにとっては自然な選択肢。GoogleはAndroidの基盤であるAOSPに元からあった多くの自由・オープンソース部分を何年にもわたって削り続けてきたため、LineageOSのようなプロジェクトが代替コンポーネントを開発する必要があった。それでもLineageOSがAOSPに加える変更は、Googleを含む大半のスマートフォンメーカーより少ないと思う
MacでDocker DesktopやOrbStackのようなもので起動できるコンテナ化されたAndroidがあればいいのに
Dockerイメージを改造して、root化した中間者プロキシをあらかじめ設定しておき、Androidアプリを載せてネットワークトラフィックやAPI呼び出しをずっと簡単に観察したい
sudo ip netns exec wiresharkこれがFuriLabsがAndroidアプリ統合をうまく作り上げた土台だった。もちろんフォークして[0]大幅に手を入れたけど、LinuxフォンでAndroidアプリを使えるようにしたユーザー体験は素晴らしかった
[0] https://github.com/FuriLabs/waydroid
Furiphone FLX1はこれを積極的に活用していて、本当に良い。普通のAndroidスマホに求めることの大半はできる
もちろん自分の求めるものは多くないけど、SignalやSpotifyに使っている人も知っている。素晴らしいプロジェクトで、Linuxフォンにぴったり
結局、携帯を2台持ち歩く必要がありそう。銀行やクレジットカードのアプリは毎日必要な必須アプリだし、一部のアカウントはデスクトップブラウザでも携帯アプリでの認証なしではログインすらできない。個別の支払いでも頻繁に携帯アプリでの確認が必要になる。より自由なユーザー体験のために口座を変えられる状況でもない
金融以外でも、主な仕事ではGoogle製品群を使わなければならないし、別の仕事ではDiscordも使う必要があった。こちらは機能が減ってもブラウザで何とかなるかもしれないけど、銀行・クレジットカードアプリはそうはいかない
これはWaydroidやFLX1への不満ではなく、その作業と創意工夫には感謝している。完全に自由・オープンソースなスマホを所有して自作することを長く夢見てきたし、その作業量も分かっている。昔はNokia N900も2台使っていた
ただ、時代は変わったし、今の日常生活で求められるアプリやプロトコルを自由・オープンソースベースのシステムの上で、あるいは並行して動かせる方法が見つかってほしい
ただしOLEDパネルがない点は致命的な欠点になり得る
昔買ったアプリが3つある。スウェーデン語辞書、ドイツ語-スウェーデン語辞書、英語-スウェーデン語辞書
まだインストールはできるけど、アプリストアではもう配信されていない。会社のNorstedtsは案の定サブスクリプションモデルに移行した。これらのアプリをデスクトップで使うためにWaydroidを使っていて、とても満足している
多くのアプリはGoogleやSamsungのような「公式」Androidディストリビューション上で動くことに依存していて、WaydroidのLineageベースのディストリビューションでは動かない
https://gitlab.com/android_translation_layer/android_transla... のようなWine風アプローチは、アプリに「公式」Androidディストリビューション上で動いていると思わせるのに役立つかもしれない
ATLのWine風アプローチはAPIをまねるという点では確かにもっと直感的だけど、それでもATL向けの別個の再実装が必要。対してWaydroidはAndroid環境全体を動かすので、MagiskやmicroGを再利用できる可能性がある
これを見るたびに「すごいな! Linux対応アプリがない素敵なAndroidアプリを実行できるかも」と思うけれど、毎回これといって思い浮かばない。絶対に必要なAndroidアプリってあるだろうか?
Organic MapsにはデスクトップLinux版もあるが、機能の同等性にはまだ遠い。ただ、Organic Maps向けの優れたデスクトップUIを作ろうというこの助成金[1]のおかげで変わるかもしれない
[1] https://nlnet.nl/project/OrganicMaps-ConvergentUI/
このコンテナはハードウェアUSBデバイスにアクセスできるのか? PEQ入りのMoondrop FreeDSP USB-Cケーブルを持っているが、ひどいAndroidアプリでしか動かない
手元のAndroidタブレットはタッチスクリーンの出来も悪く、EQ設定を変えるのに時間がかかりすぎる。普通にLinuxノートPCでやりたい
たとえそうでなくても、結局はLinuxコンテナなのだから、udevルールを少しいじればどうにでも動かせるはずだ
こうしたプロジェクトで相変わらず欠けているように見えるものがいくつかある。ホストのハードウェア3Dアクセラレーションを、ほとんどのスマートフォンが標準対応しているOpenGL ESやVulkanのバージョンで使う部分が不足している
また、多くのアプリには、スマートフォン上で動いていないことを検知する組み込みの仕組みがあり、cpuinfoを見て申告されたデバイスと照合したうえで終了してしまう
デバイス側で期待されるARM対応も増え続けており、要求スループットもそれに伴って上がっている。だから、ありふれた最新のモバイルARM SoCですらエミュレートするのに必要なx86ホスト性能は、どんどん高くなっている
最後に、対応するAndroidバージョンはほぼ常に最新より3〜4世代遅れている。アプリは古いAndroidのサポートをすぐ打ち切るか、旧OSでは機能や最適化が少ない状態で動く。このプロジェクトのAndroidベースのバージョンは2020年のものだ
逸話レベルではあるが、この分野で最も互換性と最適化が優れたエミュレーションスタックを持つBlueStacksでさえ、7800X3D / RTX 3090で動かすと、ほとんどのゲームは昨年のSnapdragon 8搭載スマートフォンでネイティブ動作させるより遅い
virtio-gpu-rutabaga: https://www.qemu.org/docs/master/system/devices/virtio-gpu.h...
Rutabaga Virtual Graphics Interface: https://crosvm.dev/book/appendix/rutabaga_gfx.html
gfxstream: https://android.googlesource.com/platform/hardware/google/gf...
“Gfxstream Merged Into Mesa For Vulkan Virtualization” (2024-09)
https://www.phoronix.com/news/Mesa-Gfxstream-Merged
Android開発用の公式x86コンテナやROMがなぜ存在しないのか分からない。AndroidアプリのCIビルドでは最新のAndroidバージョンでテストを回していないのだろうか? APKのCIビルドがAndroidコンテナなしでどうやってGUIテストを実行しているのか気になる
驚くべきなのは、複数のAndroidコンテナをLXC上で動かせるように、これを抽象化した人がいないことだ
Waydroidではイメージが1つしかない。自分が見る限り、かなりパッチの入ったカスタムLinuxカーネルを使っているようだったし、きちんと調べたわけではないが、LXCインターフェース側はかなり単純に見えた