リモートマシンのエミュレータとadbで接続して開発する


はじめに

リモートの仮想マシンにRDPでつないでAndroid開発を試みた際、HAXMが動作しない問題1に直面しました。
さすがにリモートの仮想マシンというただでさえ枷の多い環境で、更にエミュレータまで動作に問題があるとなると、開発時のストレスが大変なことになりそうだったので、エミュレータだけローカルで動作させる方法を探してみました。

調査結果

以下のように開発を行うローカルマシンから、エミュレータを動作させるリモートマシンに対してsshでポートフォワーディングを行います。
こうすることで、ローカルのadbなどなど、各種ツールがリモートのエミュレータと接続することができるようになります。

ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 <ユーザー名>@<リモートマシンのアドレス> -p <ポート番号>

接続後、ローカルのadbを再起動することで認識されるようになります。
AndroidStudioからきちんとビルドしたapkをインストールさせて動かすことが出来ますし、Logcatにもきちんとログが出力されますし、ブレークポイントで処理を止めることも出来ます。
軽く触ってみた感じ、ローカルで通常の方法で動作させているエミュレータと遜色ない動作をします。


リモートのWindowsマシンからローカルのUbuntuマシン上のエミュレータを使う

解説

5554はtelnet用、5555はDDMSなどのツール用にオープンされているポートです。これらの通信をリモートに飛ばすことでリモートマシンに存在しているエミュレータを制御することが可能になります。

参考


  1. HAXMは仮想マシン上で仮想化を行うことは出来ません