※実用性はほぼありません。
Andorid のビルドが最近遅くて、ブラウザで動画流しながら StackOverflow 調べながら twitter 流しながら…とやっているとすぐに mac がファンファンなりだして音声は途切れるわ熱くなるわという状態になります😭
メモリ 8GB だし、数年前の mac だから仕方ないといえばそうなのですが新しい mac を買うのはまだ早い気もする。
結局いい感じの IaaS を借りてそこでビルドすると早いのではという結論にたどり着き、ここ三週間ほどいろいろ試行錯誤してる中で出てきた一つのネタです。
本題
Android Studio をクラウドで動かしてリモート操作しよう
ビルドだけ Linux 側でやるのはコマンド打てばいい話なのですが、そうするとせっかくの IDE の機能を活かすことができません。どうやら ADB の remote port forward はできる*1という話を見たので、それなら向こう側で Android Studio ごと動かしちゃえばいいじゃんと考えました。
借りる
安かった GCE の Ubuntu, 4 core, 16GB を借りました。
Android Studio をセットアップする
基本的にここに書いてあることをします。
やったことは
JDK 8
,lib32stdc++6
,lib32z1
をインストール*2- Android Studio を unzip
です。SDK は Android Studio に同梱されています。
Ansible の PlayBook だと以下のようになります。(utils
は僕の vim や zsh 環境用です)
リモート接続する
いくつか方式を試してみました。
X11
せっかく mac だし向こう Linux だしということで、まずは X11 を試してみることに。
X11 について詳しくは以下をご覧ください。
SSH X11 Forwarding を使うには -X
オプションを使うか ~/.ssh/config
を以下のように記述します。
Host gcp Hostname {{ip}} ForwardX11 yes
そうして Android Studio の ./studio.sh
を実行すると…実行されない!
いろいろ試した結果 X11 は ipv6 を無効化しないと使えないみたいなので無効化。
ひつまぶし食べたい: IPv6を無効にしているときのssh X11転送
再度実行すると…起動しました!
その後セットアップ等をして無事 IDE の画面に。
超遅い!!!
メニューを開くのに15秒、補完を出すのに20秒ほどかかる。カーソルの移動だけならまあまだ我慢できないことも無いですが、色々と遅すぎる。
ビルドしても mac が静寂を保っているのは素晴らしいのですが…
そこで、ssh のレイヤで通信を圧縮することで高速化を試みました。
ssh XForwardingを速くする設定 | さかな前線
Host gcp Hostname {{ip}} ForwardX11 yes Compression yes CompressionLevel 9 TCPKeepAlive yes Ciphers blowfish-cbc,arcfour
以上のようにして接続してみると…
やっぱり遅い!!
さっきよりマシになったとはいえやはりメニュー開くのに5秒ほどかかってしまいます。
microsoft の Azure なら大阪にサーバーがあるので若干早いのかなと思いましたが、そんなに変わりませんでした。ローカルだとそこそこ早いんですけどね…
遅い以外にも文字が汚いし、mac の XQuartz は retina に対応していなくて悲しい。結局これは諦めることに。
VNC を使う
X11 では X ウィンドウを直接手元で表示していましたが、 VNC ではマシンの画面全体を全体をリモート操作します。Windows の Remote Desktop や Team Viewer 的な感じです。
これに関しては Google Cloud のブログでやり方が紹介されているのでこれに従います。
やったことは
xfce
インストールtightvncserver
インストール・設定- ポート開放
です。
mac にははじめから VNC で接続できる機能があるのでそれで接続します。
すると…
そこそこ早い!!
さっきと段違いに早い。メニューを出すのも補完もそこそこ早い…のですが、やっぱりラグがありました。カーソル移動はむしろ遅くなってしまった。
実用できるレベルにまでしようとすると画質を大きく下げるしかありませんでした。南無。
RDP を使う
RDP は Remote Desktop で使われているプロトコルで、 microsoft がそこそこ力を入れて開発しているため高速とのこと。
Remote Desktop Protocol - Wikipedia
せっかくなので Linux で使える xrdp
を入れて使ってみることにしました。
特に設定もしないまま*3、 Remote Desktop for mac を用いてサーバーに接続します。
こうすると接続できた!さっきよりも早い!!…のですが、日本語がうまく入力できないし実用的に早いというわけでもない。
日本語は調べればなんとかなりそうでしたが特にやる気もなかったのでこれぐらいでやめました。そもそも xfce まるごとリモート操作するの微妙に使いにくい…
結論
楽しいけど実用的ではない。
異常に近い場所にあればまだできるのかもと思いましたが、まあ IaaS じゃ無理ですね。
apt-get
等は異常に早いので太いネットワークがある気がする*4のですが、それでも無理でした。
その後ビルドだけをサーバーで行う方法を発見したので、それに伴う実装を最近はこつこつとやっています。また良い感じになったらブログに書きたい*5。
追記: 書きました。