amd64 Debian 11 bullseyeにLineageOS 18.xベースでAndroid 11相当の環境を再現してくれるWaydroidをインストールしてAndroidを弄り倒してみた話。
動機は、カスタムROM探しではなく、スマートじゃない家電をスマート化しまくっている自身も初の最初からスマート家電の空気清浄機を買ったこと。
それに限らずスマート家電全般、新たにできることよりできなくなることの方が多すぎて避けてきた専用スマホアプリ、今回買った空気清浄機にもDaikin Smart APPはあってAmazon Alexa/Google Homeにも対応。
が、しかし、これまで使用してきた空気清浄機にはあった赤外線リモコンが付属しないため、(自作)スマートリモコンや自作スマートスピーカーから操作できず、同スマートスピーカー機能も入れた2台のパソコンからはパネル操作も音声操作もできなくなるなんて!と抗っている道の途中。
そんな折、Waydroidに出会った次第。
Waydroidとは、GNU/Linuxベースの任意のプラットフォーム(arm/arm64/x86/x86_64)上のコンテナ内で完全なAndroidを実行し、Androidアプリを提供してくれるAnboxを大幅改良したとされるアプリ。
Androidシステム内のコンテナは、Linux用コンテナ仮想化技術LXCをベースにLXCとバインダを通して必要なハードウェアに直接アクセスでき、ハイパフォーマンスを実現できているとのこと。
実際、他の仮想化技術と違い、何かとワンクッションなく、Linuxシステムをほぼそのまま使っていることもあり、Linux上の他アプリ同様、かつ、Androidスマホを使っているのと遜色ない爆速起動と再現性、操作性は驚異的です。
Waydroidのインストール方法は、本家ドキュメントInstall Instructionsとしてディストロごとにまとめられています。
DebianやUbuntu、その派生の場合は、こんな感じです。
curlでダウンロードする際、失敗する場合は、[-s ディストロ]オプションをつけろとありますが、どこに?curl?自身にはよくわかりません。
waydroid initでWaydroidが使用するLineageOSベースでAndroidの「バニラ」イメージをダウンロードし、インストール時に作成されるディレクトリ/var/lib/waydroid内に配置してくれます。
F-DroidやAurora StoreなどGoogle Play Storeの代替ストアで事足りるのであれば、このコマンドで十分です。
先のCLIではなく、Waydroidをインストール後、デスクトップメニューからWaydroidを選択することでGUI操作もできます。
最初、GAPPS版があるのを知らず、バニライメージでGoogle Play StoreをAPKPureで、Google Play Services(Google Play開発者サービス)の代替をとmicroG各種apk、比較すべく、Google Play開発者サービスを、やはり、APKPureからダウンロードしてみたり、その直後、WaydroidのGAPPS付きに気づき、waydroidを再構築してみたり。
ただ、再構築する際、ホームディレクトリ内のwaydroid関連ファイルを削除し忘れ、アプリ群が残っていたこともあり、結局、GAPPS版に全て入っていたことから、自前ダウンロードしたapkファイルの検証はできていません...。
waydroid initに-sオプションでGAPPSを付けることでWaydroidが使用するLineageOSベースのAndroid+Google App Store/Google Play Store付きイメージをダウンロードし、インストール時に作成されるディレクトリ/var/lib/waydroid内に配置してくれます。
先のCLIではなく、Waydroidをインストール後、デスクトップメニューからWaydroidを選択することでGUI操作もできます。
GUI版でもこのようにVANILLAイメージとGAPPS同梱イメージを選択できます。
あとはGoogleプロテクトの対処をすれば、Google Play Storeにログインでき、即使える状態になります。
Waydroidを起動できるのは、その名からなるほどと思うWaylandからだけでXorgベースのGUIデスクトップからでは起動できないようです。
今どきのGNOMEは、Wayland実装の方がメインとなっている模様かつ、両方ともインストールするようでログイン画面で選択できるリストの内、単に[GNOME]とあるのが、そう(である可能性が高い)です。
一方、Xorg版の方は、おそらく、[GNOME on Xorg]などとなっているかと。
また、Debian系ならaptでインストールできるはずのWayland軽量簡易実装デスクトップweston(終了は[Ctrl]+[Alt]+[Back Space])などでももちろん起動できます。
よってGNOMEをインストールしていない場合やwestonをインストールしてみたい場合、何れか、または両方をインストールの上、ログアウトして切り替えましょう。
何れにせよ、自身の場合、GNOME 2系までは愛用していましたが、GNOME 3系になってからは違和感だらけで慣れないため、あらゆるデスクトップ環境は入れるのでインストールはされていても使うことはありませんでした。
尤も今どきのGNOMEはスマホやタブレット向けっぽいので、そういう意味ではWaydroidとは違和感もなく相性は良いのでしょうが。
そんな中、westonもインストールし、使ってみたところ、軽量で良い感じではあるものの、waydroidを使う上で端末などLinuxホスト上のアプリも併用するにあたっては、GNOMEの方が良いのかも?ということで苦手なGNOMEを使っています。
ここからは、Linuxホスト上でWayland実装のデスクトップを起動している前提で進めます。
Waydroidのコンテナは、waydroidコマンドか、systemdのsystemctlコマンドで開始(start)・停止(stop)、後者なら再起動(restart)もできます。
また、systemctl enableしてあれば、次回以降起動時は常にwaydroid-containerが起動するようにできます。
が、実際のところ、waydroid initした時点で、またその後もwaydroid-containerがバックグランドで起動するようになっており、何れも改めてstartする必要はないでしょう。
Waydroidのセッションの開始は、waydroidコマンドでこのようにし、後者の場合、開始(start)・停止(stop)できます。
ただ、前者は、後者をというかセッション開始を含むので、CLI操作の場合、通常、開始に関しては、前者のwaydroid show-full-ui &を使うのが無難かと思います。
セッションを開始して数秒でWaydroidが起動します(環境を整備して初めての時やパソコン起動後、初めての時は20秒前後とか若干時間はかかるかと)。
停止は、起動中のWaydroid左上のマスコットアイコン付き[Waydroid]をクリック|タップ、[終了]をクリック|タップ、もしくは、[Alt]+[Tab]などでLinuxホスト上の端末に切り替えてwaydroid session stopすればできます。
が、前者の場合、画面は閉じても端末で開始したセッションの終了はしてくれないので結局、フォアグランド起動なら端末で[Ctrl]+[c]、バックグラウンド起動なら[jobs]、[%1]、[Ctrl]+[c]などで停止させる必要があります...。
というか、Waydroidについては、GUI操作の方が、超高速で快適、手間がありません。
アプリケーションメニューなどからWaydroidを選んで起動、画面上部のマスコットアイコン付き[Waydroid]をクリック|タップ、[終了]をクリック|タップで終了。
ただし、GUIで開始・終了しても時にプロセスが残っていることがあり、それを知らずにWaydroidを起動しようとすると異様に時間がかかったりします。
そんな時、ps aux | grep waydroidしてみると、たくさんプロセスがあるでしょうから、sudo pkill -f waydroidしてから起動し直しましょう。
ご愛嬌はさておき、このネイティブアプリ並みの速さに慣れてしまうと他の手法でAndroidを使う気にはならないほどです。
数年前からGoogleは、GAPPS/Google Play Storeをインストールしてあるスマートデバイスが、未知(未登録)の場合、安全を配慮して明確に弾くようになったようです。
カスタムROM界隈にも影響があるとのことですが、救済策が用意されており、一手間増える以外の問題はないでしょう。
Googleにログインしてみると(waydroid用ではなく)そんなスマホにおけるカスタムROM用のadbコマンドによるデバイス登録の方法が紹介されていました。
これと同様なことがwaydroidでもできそうです。
ここではLinux PC上のWaydroidがそれに当たり、Google Protectにおいてデバイスとして登録されていないため、頻繁に[Device is not Play Protect certified]|[デバイスがPlayプロテクトに認証|認定されていません]といった旨のメッセージが表示される他、Google Play Storeなども即落ちしたりしてログインできず、使えない状態になります。
やはり、これへの対処法が、WaydroidのドキュメントGoogle Play Certificationにありました。
要は、Googleにこういうデバイス使うよって伝えるべく、登録すれば良いとのことで、やってみるとあっさり使えるようになりました。
まず、waydroid shellを起動し、このような環境変数を設定しつつ、sqliteを実行し、android_idとして得られた数値をhttps://www.google.com/android/uncertifiedにアクセスして登録すれば、登録された旨が表示されます。
この時、ログインを求められる場合は、Android(ここではLinuxホスト上のWaydroid)のアカウントに使うメールアドレスをIDとし、それ用のパスワードでログインします。
ただし、手持ちのAndroidスマホと同じアカウントを使うとスマホ側で不都合があったケースもあるようなのでWaydroid用にGmailアカウントを取得しておくのが賢明でしょう。
その後、数分〜数十分程度でしょうか、登録が完了・反映されていれば、waydroidを再起動するなり、停止して後で起動するなりすると先のメッセージも出なくなります。
逆にWaydroidを起動して当該メッセージが表示されなくなったり、エラーなく、Google Play Storeにログインできるようになっていれば、登録は完了、反映されていることになります。
基本、拒否されることはないようで自身も環境を一から入れ直して通算2度やってみましたが、何れも、あっさり登録されました。
起動(セッションを開始)したWaydroidにアプリをインストールするには、いくつか方法があります。
1つは、Linuxホスト上にダウンロードした.apk/.xapkファイルをLinuxホスト上の端末を使ってwaydroid app installする方法です。
そして、もう1つは、Linuxホストのではなく、起動中のwaydroid上のブラウザで.apkファイルをダウンロードしてきて.apkファイルをダブルクリック|ダブルタップする方法です。
APKPureアプリを介して主にxapkファイルをインストールするなど細かく言うと他にもありそうですが、さておきます。
起動したWaydroidは、LineageOSベースだけあり、Androidそのものです。
テストするなり、戯れるなり、思いっきり堪能しましょう。
Linux OS上で爆速起動する完全なAndroidであるwaydroidですが、惜しい点が1つ。
LinuxホストがLANケーブルで有線接続している場合は、Linuxホストとブリッジ接続してくれてホストとはネットワークアドレス範囲は異なるものの、Waydroid内部でもIPアドレスが配布され、ネット接続はできますが、Wi-FiとはブリッジされないようでLinuxホストでWi-FiのみONだとWaydroid内ではネット接続できません。
逆に言えば、そのままでは既存LANとの通信は無理にしても、前者ならWaydroid内のブラウザアプリからでもインターネットには接続できます。
他方でデフォルトのパーミッション設定だとlsするのですら、管理者権限(sudo)はいるものの、ホストから[~/.local/share/waydroid/data/media/0/]でWaydroid内のストレージにアクセスできるので既存LANとWaydroidストレージ間でのファイルのやり取りはできます。
ただし、この時、Waydroid側に転送したデータが反映されるのは、セッション継続中の単なる再起動時ではなく、一度、Waydroidセッションを切断後、改めてセッションを開始した時です。
リアルタイムに転送したい場合は、本家ドキュメントSetting up a shared folderにあるようにmount --bindした共有フォルダを作ります。
このマウント前後で特に画像において同名ファイルを共有フォルダ上に上書き保存した場合、Waydroid側のファイラーのサムネイルは前の画像が表示されているかもしれませんが、開いてみると(うまく表示できないにしてもサイズ等確認してみれば、)実際には、上書きしたファイルになっているはずです。
一方、どうにも無線LANを有効にすることができず、アクセスポイント情報を保存することもできていません。
設定アプリの [ネットワークとインターネット]内の[Wi-Fi]においてタップで一時的にはONになるものの、画面を移動するとOFFになるんですよね。
よって周囲のSSIDも表示されません。
いろいろいじっている内、瞬間的に「保存済みネットワーク」項目が現れるようにはなったものの、それと認識できるかできないかの間に即消えてしまい...。
[Wi-Fiを自動的にONにする]は最初からONを維持できていますが、そもそもWi-FiのONを維持できず、アクセスポイント情報も保存できないため、アクセスポイントに接続することもできません。
Wi-Fi Directはグレーアウトしていて使うこともできません。
Bluetoothについても似たり寄ったり。
あ、FAQ by github.com/waydroidによれば、「Waydroidは、仮想イーサネットアダプタを介してネットワーク接続を取得しているから、Wi-Fiがないのは当然」とある...。
続いて「ただアプリに関しては、Waydroid Prop Options/Modify app behaviourにあるように[waydroid prop set persist.waydroid.fake_wifi '*']を使える」とも...。
それ以上、どこにも説明はないようで、これにより、何のメリットがあるのか...わからない...。
何れにせよ、たぶん、そこで設定したアプリが、有線接続とは別にWi-Fiに接続できているように振る舞うだけで仮想イーサネットアダプタによって取得されたネットワークセグメントを変更できるわけでも、既存LANとブリッジしてくれるわけでも、任意のアクセスポイントと接続できるようになるわけでもないんですよね、きっと...。
ということは、Wi-Fiオンできないのは、バグではなく、仕様ってことか...。
Google Play Storeの多くアプリで画面がモニタに対して横になっちゃう問題、本家WaydroidのissuesRotated apps are unusable on desktops/laptops #70 に既にいくつか解決策がありました。
自身は、その内、waydroid shellコマンドのみによる対策をとってみることに。
不思議なことに?見事、当該事象に見舞われるアプリにのみ有効なようです。
ただし、このコマンドで補正されるアプリに関しては、landscape表示のようにパソコン画面いっぱいに使うWaydroidに対し、
という、今わかっているだけでも少し残念な状況なので、これらも解消する対策があるなら、それに越したことはないでしょう。
十分マシですけどね、横になって操作できない部分があるよりは...。
各所を敵に回しそうなセンセーショナルな表題ですが、本来、タブレットを兼ねないパソコン用を意図していないことに起因すると思われるパソコン上で動くWaydroid上で見せる一部アプリの挙動問題が1つ。
要は、パソコン用は想定外、だからパソコン上でAndroidという思想のWaydroidにも遠因はあるにせよ、直接起因するものではなさ気なスマホ・タブレット前提のアプリ作りに起因しそうな気配がする不具合が1つありそうというのが主旨。
仕方ないと言えば、仕方ないことですが、仮想化技術もあり...。
それは、多くのアプリがPCモニタに対してなぜか画面が「横向きに表示されてしまう」こととマウス|マウスパッドで辿り着けない画面上の座標位置があり、それが画面半分くらいの面積に至ること。
タブレットと2 in 1ではないパソコン画面を想定しておらず、特に自動回転などスマホ・タブレット前提に作られているため、ジャイロセンサーのないパソコンで起こるものなのか、解像度判定の仕方によるのか。
はたまた、スマホ上では自動回転にも対応しているF-Droid収録アプリは少なくとも任意に試したものは全て、極々一部な気はするものの、TVerやYahoo!音声アシスト、Microsoft SwiftKeyキーボードのように稀にGoogle Play StoreからインストールしたアプリもWaydroid上で問題ないことからするとGoogle Play Storeに依存したアプリほど顕著な現象なのか...。
F-Droidの場合、F-DroidからダウンロードしたF-Droidの.apkをインストールしても、そのF-DroidからインストールしたAurora Store含むアプリも正常な向きで利用できているので。
また、使わないものの、あえて入れてみたGoogleマップ、Googleニュース、Googleフォト、YouTube Music等々、Google謹製、Google系は、全く問題なく正常に表示されます。
Aurora Storeについては、F-Droidのアプリも表示できる一方、それより何よりGoogle Play Storeのアプリと元ファイルの入手場所が同じで基本全てインストールできるとの触れ込みのストアアプリ。
よってGoogle Play Storeのアプリに起因することがあれば、そこも同じようで、オープンソースではないAdobe Express、Instagram、Yahoo!マップ、WNNウェザーニュース、Redditなど有名どころのアプリがやはり横向きに。
この表示画面が横になっちゃう問題、マウスやタッチパッドによるポインタの移動方向は、通常通りで縦の場合と同じ、自動回転も効かないので脳みそがプチパニック。
なんとか脳を騙してマウス|タッチパッド操作できても画面の上端(モニタの左端)には行けても画面の下端(モニタの右端)にはいけず、ホームボタン、履歴ボタン、戻るボタンにアクセスできないどころか、画面上にボタンがあってもクリック|タップできません。
[Alt]+[Tab]や[Alt]+[Shift]+[Tab]は効くものの、中央から画面の下端(モニタの右端)にあるボタンの場合、何かの拍子にフォーカスを移動できることもあれば、どうやってもフォーカスを移動できない場合があり、後者が圧倒的で一筋縄ではいかず、画面の向きとポインタ移動方向の違いも相まって何とも不甲斐ない感覚に襲われますw。
よってPCモニタを横にして外付けキーボードとマウスを使って向きを合わせることはできてもボタンが押せず、完全な解決には至りません...。
Waydroidが原因とは思えないだけに、本当に多くのアプリの作りによる問題だとしたら根深く、各アプリが修正してくれでもしない限り、解決するのは困難かと...。
全てのアプリを試したわけではありませんが、F-Droidに収録されたアプリについては、Google Play/Aurora Storeの多くのアプリに見られる残念な事象がないようです。 => しかもこの問題は解決したので何れにせよノープロブレム。
Wi-Fi設定できない問題はあるものの、Waydroid独自にならネット接続はできるわけで、そこさえ目を瞑れば、ストアプリとしてF-Droidを使う分には、Waydroidは既にパソコン上で使えるAndroidエミュレータのみならず、本格的なAndroidとして唯一無二とも言うべき、最強のアプリと言っても過言ではないかと。
Wi-Fi設定できない問題は残るものの、画面が横になっちゃう問題解決でGoogle Play StoreやAurora Storeを使う場合でもパソコンでAndroidを使う上でWaydroidは既にベストチョイスと言えるでしょう。
Google Play Storeから最新版ではなく、APKPureからダウンロードした会員登録不要&クラウドを経由しなくて済む旧バージョンのDaikin Smart APPをスマホと併用してパソコンでも使えるか試してみたくて、実際インストールもできたのですが、画面横向き現象とWi-Fiアクセスポイント登録・保存ができず...目前にして断念...。
本来の目的を果たせず残念...も超簡単に本格的なAndroidを爆速起動でき、操作性も快適なWaydroidという素晴らしいアプリに出会えたので満足。
その後、スマート家電である空気清浄機、旧バージョンのアプリで会員登録・ログイン・クラウド経由を回避しつつ、パソコンでも使えるブラウザ操作パネルを自作すべく、スマートな加湿ストリーマ空気清浄機を更にスマート化。
その完成形である市販スマート家電用ブラウザ操作パネルと操作スクリプトを自作。
結果、スマート家電専用アプリすら使う必要がなくなるので会員登録・ログイン・クラウド経由の必要もなく、スマホ・タブレット・パソコンからパネル操作、AmazonアレクサやGoogleアシスタントではない自作Raspberry Pi/Julius/Open JTalkスマートスピーカーでも、同機能を入れたDebian PC+Julius/Open JTalkスマートスピーカーやRaspberry Pi 400パソコン+Julius/OpenJTalkスマートスピーカーでも音声操作できるようになりました。
企業・営利事業としては、ユーザーを囲い込みたい、囲ったユーザー情報を共有したくない、=> 専用アプリの氾濫・自由度の低さにユーザーげんなり...。
そうした中、共通規格を作る、ビジネス化を考える、値の張る高いものになる、誰もが使えるものじゃなくなり、広く浸透しなくなる、市場規模拡大も望めない、ビジネスとして持続可能性や旨味がなくなる、しかも世界の流れとマッチしないからガラパゴス化、作った規格も陳腐化...するという悪循環に陥りやすい罠...。
ユーザーとしては、ブラウザとかデバイスを横断して使える共通アプリやスクリプトからCLI操作できるように操作コマンドを公開してくれるだけで十分なんですけどね、そっからビジネス化できるならするにしても、自分でできる人は自前で自作、なんともシンプルな話。
似たケースにスマートメータがあるけど、電気会社やガス会社が一斉にアナログなメーターからスマートメーターに更新、無線で検針、費用削減、効率向上を図るとする一方、ユーザーの家に設置してあるのに、リアルタイムというメリットはあるにせよ、そのユーザーが電気やガスの使用量や料金を確認したいと思うと別途、何万円もする機器を購入したり、サービス加入しなきゃいけないとか正気の沙汰じゃないよね。
なんで遠くにある事業者が経費節減できるようになるのに目の前にいるユーザーが自分の家の使用量知るためにバカ高いコスト支払うことになるの?そんなの払う人どんだけいるの?結果、それって意味あるの?
ユーザーが事業者ならともかく、個人が自分の家の使用量を確認するだけならAPIかなんか用意して必要な人は、無料で取得できるようにしてくれても良さそうなもんだけど。
少なくともユーザーが個人の場合、電気やガスの使用量を知りたいとしても、それがリアルタイムであったとしても、仮に機器ごとに使用量がわかるとしても、スマートパネルとかで確認できるとしても、それを目安に省エネ図るにしても今みたいなコストに見合うメリットなんてないからね?
なんともはや...。
写真・画像とかだと顕著ですが、カラーバランスが変で青みや赤みが強くなりがち...?なのはなんとかならないものでしょうかね...。
これは余談ですが、エミュレータとしては、Androidバージョンを選べると尚最高かなと。
バージョンではないですが、どっかでwaydroidデバイス以外の選択もできたような気がしたのですが、あれ、なんだったかな?
そんな感想をもった自身は、振り返ってみれば、過去、パソコンやラズパイで次のように時折、パソコンでAndroidを試してみています。
エミュレータに関しては、その昔、Eclipseでやってみて激遅過ぎてげんなりした記憶も...。
ただ、これらではGoogle Play Storeは使っておらず、ラズパイ+USBメモリのLineageOSでAurora Storeを入れた気がするもアプリの挙動は試さないまま、なぜか起動しなくなったんですよね...。
と思ったら、起動できた...、TWRPが起動したりもしますが、電源を落として再起動してみるとLineageOSが起動...、起動後はそうでもないものの、やはり、Waydroidを使ってしまうと起動は遅いな...と思えてしまいますね...。
Android StudioのエミュレータはPC上で使えるのかに興味があっただけ、Android x86はVirtualBoxにインストールできるか否かにしか関心がなく、BlissOS、LineageOS、AOSPはカスタムROMを探すた旅の途中だったのでストアやアプリを試してみようという意識がなかったんですよね...。
自身にとって今やメインとなっているRaspberry Pi 400にもWaydroidをインストールしてみました。
気づけば、Debian、Raspberry Pi OS共にWaydroidが起動しなくなっていました。
前者は、Waylandデスクトップは機能、Waydoroidコンテナは起動しており、初期化もできているが、端末からセッションを開始しようとすると下記リンクのメッセージがエンドレス、後者は、そもそもWaylandデスクトップが軒並み実行できなくなっており、回復方法不明。
そんな折、Debianについては、Failed to get service waydroidplatform, trying again... #282のsjbat氏の投稿がドンピシャ、[sudo waydroid upgrade]後、[waydroid show-full-ui &]で再び、Waydroidが起動しました(最初は時間かかる)。
Raspberry Pi OSの方は、Waylandが起動できるようになってみると、waydroid upgradeするまでもなく、あっさり、インストール済みバージョンが起動しました。