Unyablog.

のにれんのブログ

クラウドの Linux 上で Android Studio をリモート操作するネタ

※実用性はほぼありません。

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 をセットアップする

基本的にここに書いてあることをします。

qiita.com

やったことは

です。SDKAndroid Studio に同梱されています。

Ansible の PlayBook だと以下のようになります。(utils は僕の vimzsh 環境用です)

github.com

リモート接続する

いくつか方式を試してみました。

X11

せっかく mac だし向こう Linux だしということで、まずは X11 を試してみることに。

X11 について詳しくは以下をご覧ください。

www.kmc.gr.jp

SSH X11 Forwarding を使うには -X オプションを使うか ~/.ssh/config を以下のように記述します。

Host gcp
    Hostname {{ip}}
    ForwardX11 yes

そうして Android Studio./studio.sh を実行すると…実行されない!

いろいろ試した結果 X11ipv6 を無効化しないと使えないみたいなので無効化。

ひつまぶし食べたい: IPv6を無効にしているときのssh X11転送

再度実行すると…起動しました!

その後セットアップ等をして無事 IDE の画面に。

f:id:nonylene:20160406030133p:plain

超遅い!!!

メニューを開くのに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 のブログでやり方が紹介されているのでこれに従います。

medium.com

やったことは

  • xfce インストール
  • tightvncserver インストール・設定
  • ポート開放

です。

mac にははじめから VNC で接続できる機能があるのでそれで接続します。

すると…

そこそこ早い!!

さっきと段違いに早い。メニューを出すのも補完もそこそこ早い…のですが、やっぱりラグがありました。カーソル移動はむしろ遅くなってしまった。

実用できるレベルにまでしようとすると画質を大きく下げるしかありませんでした。南無。

RDP を使う

RDP は Remote Desktop で使われているプロトコルで、 microsoft がそこそこ力を入れて開発しているため高速とのこと。

Remote Desktop Protocol - Wikipedia

せっかくなので Linux で使える xrdp を入れて使ってみることにしました。

toricoro.hatenablog.com

特に設定もしないまま*3、 Remote Desktop for mac を用いてサーバーに接続します。

f:id:nonylene:20160406032948p:plain

こうすると接続できた!さっきよりも早い!!…のですが、日本語がうまく入力できないし実用的に早いというわけでもない。

日本語は調べればなんとかなりそうでしたが特にやる気もなかったのでこれぐらいでやめました。そもそも xfce まるごとリモート操作するの微妙に使いにくい…

結論

楽しいけど実用的ではない。

異常に近い場所にあればまだできるのかもと思いましたが、まあ IaaS じゃ無理ですね。

apt-get 等は異常に早いので太いネットワークがある気がする*4のですが、それでも無理でした。

その後ビルドだけをサーバーで行う方法を発見したので、それに伴う実装を最近はこつこつとやっています。また良い感じになったらブログに書きたい*5

追記: 書きました。

nonylene.hatenablog.jp

*1:https://bitbucket.org/chabernac/adbportforward/wiki/Home

*2:lib32z1 は書いてなかったけどインストールしないとコンパイルできなかった

*3:vnc server を入れていたからか xrdp 入れる以外は何もせずともできました

*4:それともキャッシュかなあ

*5:既に黒魔術的