« 2016年12月 | メイン

2017年4月

2017年4月30日 (日)

Android仮想デバイスとDocker開発環境をつなぐ

エンジニアの佐藤です。こんにちは。

Android開発を始めました。Android開発と言えば、Android Studioです。まずは正攻法でいこうと思いました。

ところで筆者は趣味のプログラミングのほとんどと、可能な限りの業務開発をクラウドの仮想デスクトップDockerコンテナ上で行なっています。技術が好きという個人的理由もありますが、常日頃慣れることで技術の細部まで知見が深まる効果を狙ってのものです。

ところがこのDocker仮想デスクトップ、Android開発と決定的に競合してしまうことがわかりました。問題はデバッグ環境となるAndroid仮装デバイス(AVD)です。理由は割愛しますが、つまるところAVDは、ハードウェアに直接インストールしてあるローカルOSでしか動かず、クラウド上では実行できないのです。

往生際の悪い筆者は、今度は(クラウド上の)Docker仮想デスクトップコンテナと、ローカルで実行されるAVDを接続することを考えました。今回はこの話を書かせていただきたいと思います。

以下がその目論見図となります。

Photo


ネットワークは以下のようになります。

Photo_3


AVDは通常、ポート5554と5555で着信待機しています(*1)。Android Studioはadbと呼ばれる仕掛け(コマンドプログラムとデーモンで構成)でAVD(あるいは実機)と通信しますので、この部分をSSHトンネルで仲介すれば、目論見が実現しそうです。

試してみましょう。

Docker仮想デスクトップサーバについては以下の筆者ブログを参考にします。
DockerでLinux仮想デスクトップサーバをつくる話

次にローカル環境にAndroid Studioをインストールし、AVDを一つ作成します。

Avdmanager_2


ここでは「Nexus_6_API_24」という名前で作成しました。作成したら、一旦Android Studioは終了します。

ここで例の「SSHトンネル」を仕掛けます。以下のコマンドは「SSH接続がある限り、リモートホスト(この場合はDocker仮想デスクトップコンテナ)で5554または5555ポートに向かって接続された場合、その接続をローカルの5554または5555ポートにフォワードする」という意味になります。これをローカル環境から実行します。(vncserverはリモートホストのホスト名)

$ssh user01@vncserver -R 5555:localhost:5555 -R 5554:localhost:5554

リモートホスト側で確認してみましょう。

$ netstat -ltnp
(中略)
tcp  0  0 127.0.0.1:5554  0.0.0.0:* LISTEN  -  
tcp  0  0 127.0.0.1:5555  0.0.0.0:* LISTEN  -

目論見通りフォワーディングされそうです。

リモートホストでAndroid Studioを起動します。

ローカル環境でAVDを起動します。筆者のMacOS環境では、ターミナルから以下のように入力します。

$ ~/Library/Android/sdk/emulator/emulator @Nexus_6_API_24

AVDが起動したら、リモートホストで実行しているAndroid Studioからデバッガーのアタッチが可能か見てみましょう。メニューを「Run -> Attach debugger to Android process」で選択すると、以下のダイアログが表示され、ローカル環境のAVDが接続されたことが確認できました。

Attach


インラインデバッガでデバッグしてみましょう。メニューを「Run -> Debug 'app'」と選択し、先ほど確認されたデバイスを選びます。

Debugstart


ブレークポイントでブレークできました!これでいつものやり方でAndroid開発をやっていけそうです。

Goal

手前のAVDがMacOSローカルで実行され、背景のAndroid Studioは仮想デスクトップクライアントで接続されたDocker上の環境で実行されています。

おわりに

ここまで読んでいただいてありがとうございます。「なんでわざわざ難しいことするの?」と思われた方も多いでしょう。普通は1台の開発マシンでやることをわざわざ分散しているのです。しかし、メリットもあると思います。

ローカルPCへのリソース投資が少なくて済む
クラウドとネットワークがどこでも使えるようになったので、ローカルPCへの固定費支出は抑え、なるべく従量課金のクラウドを使った方が安上がりです。今回紹介した手法は、開発設備の柔軟性を向上させます。

AVDに多量のリソースを割り当てられる
メモリ8GBの標準的なノートPCでは、メモリ4GBのAVDとAndroid Studioを同時実行するのは難しいでしょう。またAVDを2台以上起動したい場合も、今回の手法が役立つと思います。

今回ご紹介した手法が何かしらのお役に立てば幸いです。

(*1)以下のAndroid Debug Bridgeに詳しく書かれている
https://developer.android.com/studio/command-line/adb.html

採用情報

株式会社フレクトでは、事業拡大のため、
・Salesforce/Force.comのアプリケーション開発
・HerokuやAWSなどのクラウドプラットフォーム上での
Webアプリケーション開発
エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみたい方、
是非ご応募下さい。

フレクト採用ページへ

会社紹介

株式会社フレクトは、
認定コンサルタント
認定上級デベロッパー
認定デベロッパー
が在籍している、セールスフォースパートナーです。
また、heroku partnersにも登録されています。
herokuパートナー
株式会社フレクトのSalesforce/Force.com
導入支援サービス
弊社の認定プロフェッショナルが支援致します。
・Visualforce/Apexによるアプリ開発
・Salesforceと連携するWebアプリ開発
も承っております。
セールスフォースご検討の際は、
お気軽にお問合せください。

2017年10月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
ブログ powered by TypePad