Dockerで爆速構築!Androidエミュレータをコンテナ化する「HQarroum/docker-android」解説
「Androidのエミュレータを立てるだけでPCが重くなる…」「CI(継続的インテグレーション)でUIテストを自動化したいけど、設定が地獄だ…」そんな胃もたれしそうな状況を、このツールがサクッと軽くしてくれますよ。
どうぞ、じっくり味わってみてください!
この docker-android は、AndroidエミュレータをDockerコンテナの中に閉じ込めたものです。何が嬉しいかと言うと…
「僕の環境では動くのに」からの解放
Dockerさえあれば、誰のPCでも、CIサーバーの上でも、全く同じAndroid環境が立ち上がります。
リソースの節約(ミニマル設計)
このプロジェクトは「ミニマル」であることを売りにしていて、余計なものを削ぎ落としています。メモリ消費を抑えたい現場には最高です。
ヘッドレス(画面なし)動作
サーバー上で動かして、テスト結果だけ受け取るといった「自動化」に特化した使い方が得意です。
まずは、下ごしらえとして Docker がインストールされていることを確認してくださいね。
まずは市場(Docker Hub)から新鮮なイメージを仕入れてきます。
docker pull hqarroum/docker-android
次に、このイメージを火にかけます(実行します)。
docker run -d \
--device /dev/kvm \
-p 5555:5555 \
hqarroum/docker-android
--device /dev/kvm
これが隠し味です!ハードウェア加速を有効にするので、エミュレータが爆速になります(Linux環境で特に有効です)。
-p 5555:5555
Android Debug Bridge (ADB) と通信するためのポートを開けています。
コンテナが立ち上がったら、あなたのPC(ホスト)から繋いでみましょう。
# コンテナ内のAndroidに接続
adb connect localhost:5555
# ちゃんと認識されているか確認
adb devices
例えば、CIパイプラインの中でテストを走らせる際、以下のような設定(JSON)でコンテナ内のエミュレータをターゲットにできます。
{
"platformName": "Android",
"automationName": "UiAutomator2",
"deviceName": "Android Emulator",
"udid": "localhost:5555",
"app": "/path/to/your/app.apk"
}
これで、あなたが寝ている間にDockerの中のAndroid君がガシガシとテストをこなしてくれるわけです。素晴らしいですよね!
ネストされた仮想化
クラウド(AWSやGCP)上のVMで動かす場合は、そのインスタンスが「仮想化支援(KVM)」をサポートしている必要があります。これがないと、エミュレータが激重になってしまいます。
アーキテクチャ
お使いのPCがM1/M2 Mac(ARM)の場合は、イメージが対応しているか確認が必要です。このイメージは主にx86_64向けに最適化されていることが多いので。
いかがでしたか?本日の解説。 これを使えば、面倒なエミュレータ管理にサヨナラして、よりクリエイティブなコーディングに集中できるはずです。