これは、外部消費のために、Dockerなどのさまざまなシステムのコンテナでエミュレータを実行する最小限のスクリプトのセットです。スクリプトは、Pythonバージョン2と3の両方と互換性があります。
*これはまだ実験機能であり、このツールをPython仮想環境にインストールすることをお勧めします。何かが期待どおりに機能していないことに気付いた場合は、問題を提出してください。
これらのデモは、Linux OSで実行されることを目的としています。システムは次の要件を満たす必要があります。
Pythonインタープリターをインストールする必要があります(仮想環境を作成するためにPython3-venvを備えたPython3)
ADBはパスで利用できる必要があります。 ADBは、Android SDKの一部として提供されます。コマンドラインツールをインストールするだけで十分であることに注意してください。
Dockerをインストールする必要があります。ルート以外のユーザーとして実行できることを確認してください
Docker-Composeをインストールする必要があります。
KVMは利用可能でなければなりません。 「ベアメタル」またはネストされた仮想化を提供する(仮想)マシンで実行することで、KVMにアクセスできます。クラウド(GCE/Azure/AWS/など)でこれを実行する予定がある場合は、最初にKVMにアクセスできることを確認する必要があります。さまざまなクラウドプロバイダーでKVMにアクセスする方法の詳細については、こちらをご覧ください。
ネストされた仮想化を利用している場合、パフォーマンスが低下することに注意してください。コンテナは、カーネル5.2.17を実行するDebianおよびUbuntuでテストされています。
注:画像はMacまたはWindowsのDockerで実行されません
現在、パブリックリポジトリにコンテナのセットをホストしています。コンテナの詳細はこちらをご覧ください。これで、これらのコンテナを構築せずに実行できます。例えば:
docker run
-e ADBKEY= " $( cat ~ /.android/adbkey ) "
--device /dev/kvm
--publish 8554:8554/tcp
--publish 5555:5555/tcp
us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2
これにより、コンテナがローカルで利用できない場合にコンテナが引き下げられ、起動します。あなたはそれが始まっていることがわかります:
この後、ADBを構成することにより、デバイスに接続できます。
adb connect localhost:5555
デバイスは次のようにしばらくすると表示されます。
$ adb devices
List of devices attached
localhost:5555 device
スクリプトでこれを使用したい場合は、次のことを行うことができます。
docker run -d
-e ADBKEY= " $( cat ~ /.android/adbkey ) "
--device /dev/kvm
--publish 8554:8554/tcp
--publish 5555:5555/tcp
us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2
adb connect localhost:5555
adb wait-for-device
# The device is now booting, or close to be booted
より詳細なスクリプトは、run-inscript-example.shにあります。
次のようにPythonパッケージをインストールできます。
source ./configure.sh
これにより、仮想環境がアクティブになり、実行可能なemu-docker
利用可能になります。次のように起動することで、使用に関する詳細情報を取得できます。
emu-docker -h
Dockerコンテナを作成する前に、ライセンス契約を受け入れる必要があります。
実行して使用するAndroidおよびエミュレータのバージョンをインタラクティブに選択できます。
emu-docker interactive --start
システムイメージとエミュレータバージョンを選択するように求められます。その後、Dockerファイルが作成されます。システムイメージとエミュレータは、必要に応じて現在のディレクトリにダウンロードされます。スクリプトは、ログを表示するコマンドと、コンテナを停止するコマンドを提供します。
ローカルADBサーバーが開始コンテナを自動的に検出した場合、ADBを介してそれを照会するために何もすることはありません。そうでない場合は、ADBを使用して実行中のデバイスに接続できるようになりました。
adb connect localhost:5555
ADBがコンテナを見たかどうかを確認するには、以下を使用できます。
adb devices
コマンドとデバイスが検出されたかどうかを確認します。
完了したら、Dockerコンテナを停止することを忘れないでください!
Webrtcを使用してエミュレータを実行するために、ウェブ上でエミュレータを使用できるようにするセクションを読んでください
発行:
emu-docker list
現在公開されているAndroid SDKとZIPファイルの出力URLを照会します。
各システム画像について、APIレベル、バリアント、ABI、およびURLが表示されます。各エミュレータについて、更新チャネル(安定したカナリア)、バージョン、ホストOS、およびURLが表示されます。
出力の例:
SYSIMG android 21 L x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-21_r05.zip
SYSIMG android 22 L x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-22_r06.zip
SYSIMG android 23 M x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-23_r10.zip
SYSIMG android 24 N x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-24_r08.zip
SYSIMG android 25 N x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-25_r01.zip
SYSIMG android 26 O x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-26_r01.zip
SYSIMG android 27 O x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-27_r01.zip
SYSIMG android 28 P x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-28_r04.zip
SYSIMG android 28 Q x86_64 https://dl.google.com/android/repository/sys-img/android/x86_64-Q_r04.zip
SYSIMG google_apis 21 L x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-21_r30.zip
SYSIMG google_apis 22 L x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-22_r24.zip
SYSIMG google_apis 23 M x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-23_r31.zip
SYSIMG google_apis 24 N x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-24_r25.zip
SYSIMG google_apis 25 N x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-25_r16.zip
SYSIMG google_apis 26 O x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-26_r13.zip
SYSIMG google_apis 28 P x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-28_r09.zip
SYSIMG google_apis 28 Q x86_64 https://dl.google.com/android/repository/sys-img/google_apis/x86_64-Q_r04.zip
SYSIMG google_apis_playstore 28 P x86_64 https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86_64-28_r08.p
SYSIMG google_apis_playstore 28 Q x86_64 https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86_64-Q_r04.zp
EMU stable 29.0.11 windows https://dl.google.com/android/repository/emulator-windows-5598178.zip
EMU stable 29.0.11 macosx https://dl.google.com/android/repository/emulator-darwin-5598178.zip
EMU stable 29.0.11 linux https://dl.google.com/android/repository/emulator-linux-5598178.zip
EMU stable 28.0.25 windows https://dl.google.com/android/repository/emulator-windows-5395263.zip
EMU canary 29.0.12 windows https://dl.google.com/android/repository/emulator-windows-5613046.zip
EMU canary 29.0.12 macosx https://dl.google.com/android/repository/emulator-darwin-5613046.zip
EMU canary 29.0.12 linux https://dl.google.com/android/repository/emulator-linux-5613046.zip
その後、 wget
やブラウザなどのツールを使用して、目的のエミュレータとシステムイメージをダウンロードできます。 2つが取得された後、Docker画像を作成できます。
エミュレーターzipファイルとシステムイメージzipファイルが与えられた場合、 emu-docker
の次の呼び出しを介してdocker build
に送信できるディレクトリを作成できます。
emu-docker create <emulator-zip> <system-image-zip> [--dest docker-src-dir
(getcwd()/src by default)]
これにより、Docker画像を実行するためにすべての適切な要素が配置されますが、まだ構築、実行、公開されていません。 Linuxエミュレーターzipファイルを使用する必要があります。
これらのエミュレーターとシステム画像に対応するDocker画像を構築するには:
docker build <docker-src-dir, either ./src or specified argument to
emu_docker.py>
Docker画像IDが出力されます。この画像IDを保存します。
現在、結果のDocker画像にCPU仮想化機能を提供するために、KVMがDockerで使用されると仮定しています。
次の実行スクリプトを提供します。
./run.sh <docker-image-id> <additional-emulator-params>
次のことを行います。
docker run -e ADBKEY="$(cat ~/.android/adbkey)"
--device /dev/kvm
--publish 8554:8554/tcp
--publish 5555:5555/tcp <docker-image-id>
--device /dev/kvm
を使用して、CPU加速度を発揮します注:adbkey_pub変数を注入して、public adbkeyを使用できます。ie:-e adbkey_pub = "$(cat〜/.android/adbkey.pub)"
また、エミュレータが使用できる場合に使用するA /データパーティションをマウントするオプションもあります。これにより、特にネストされた仮想化シナリオで、パフォーマンスを向上させることができるTMPFSを使用できます。
例えば:
docker run -e ADBKEY="$(cat ~/.android/adbkey)"
--device /dev/kvm
--mount type=tmpfs,destination=/data
--publish 8554:8554/tcp
--publish 5555:5555/tcp <docker-image-id>
現在、NVIDIAのハードウェアアクセラレーションのみをサポートしています。ハードウェアアクセラレーションを利用するには、古いバージョンのDocker(<19.03)を実行している場合、ここからNvidia Docker拡張機能をインストールする必要がある場合があります。クラウドインスタンスを使用している場合は、最小限のXインストールがあることを確認する必要があります。たとえば、XVFBを使用できます。 -gpuフラグを通過して、コンテナを構築する必要があります。
emu-docker create stable Q --gpu
これで、 run-with-gpu.sh
スクリプトでエミュレータを起動できます。
./run-with-gpu.sh <docker-image-id> <additional-emulator-params>
スクリプトは、上記のものと同様です。
--gpu all
)ハードウェアの加速により、グラフィックスに大きく依存しているアプリケーションのパフォーマンスが大幅に向上します。 GPUアクセラレーションにX11サーバーが必要な場合でも、UIは表示されないことに注意してください。
画像を作成するときに、-Pushおよび--Repoおよび - タグパラメーターを提供することにより、作成した画像をリポジトリにプッシュできます。 -tagパラメーターはオプションであり、作成された画像のバージョンを示すために使用されます。システム画像がめったに更新されないため、これはエミュレータのビルドIDにデフォルトになります。
画像に次の命名スキームを採用しました。
{api} - {sort} - {abi}
どこ:
例: 29-PlayStore-X86:30.1.2は、 32ビットX86で実行されているQを使用したPlaystore対応のシステム画像を示します。
すべてのQ画像をGoogleクラウドリポジトリに公開するための例の例は次のとおりです。
emu-docker -v create --push --repo us.gcr.io/emulator-project/ stable " Q "
リポジトリにプッシュされた画像は、リポジトリから直接起動できます。例えば:
docker run --device /dev/kvm --publish 8554:8554/tcp --publish 5555:5555/tcp
us.gcr.io/emulator-project/29-playstore-x86:30.1.2
ポート5555を転送して、ADBがコンテナ内で走るエミュレータにアクセスします。 ADBはデバイスを自動的に検出しない可能性があるため、実行してください。
adb connect localhost:5555
これで、デバイスが次のように表示されるはずです。
$ adb devices
List of devices attached:
localhost:5555 device
このリポジトリには、Dockerを使用してWebからエミュレータにアクセスできるようにする方法を示す例も含まれています。これは、Dockerコンテナの次のセットを作成することによって行われます。
このサンプルを実行してエミュレータと対話できるようにするには、次のことを念頭に置いておく必要があります。
Docker-Composeが必要です。
ポート80と443を利用できる必要があります。 Dockerコンテナは、内部ネットワークを作成し、HTTPおよびHTTPSポートを公開します。
上記のドキュメントで説明されているように、エミュレータDocker画像を作成する必要があります。
ネットワークに応じて、ターンが必要になる場合があります
現在、認証と承認を処理するためにFirebaseを使用しています。使用するプロジェクトのJSON構成を提供する必要があります。ここで提供されるサンプルを使用できますが、LocalHostでのみ動作します。コンソールからFirebase構成を取得できます。ここでFirebase Josn構成を配置します。
./js/firebase_config.json
これは、構成とエンボイの設定を生成するために使用されます。
Webコンテナを作成するには、次のツールを使用できる必要があります。
次に、使用するエミュレータとシステムの画像バージョンを備えたコンテナを作成する必要があります。例えば:
. ./configure.sh && emu-docker create canary "P.*x86_64"
上記の手順を処理したら、 create_web_container.sh
スクリプトを使用してコンテナを作成できます。
$ ./create_web_container.sh -h
usage: create_web_container.sh [-h] [-a] [-s] [-i] -p user1,pass1,user2,pass2,...
optional arguments:
-h show this help message and exit.
-a expose adb. Requires ~ /.android/adbkey.pub to be available at run.
-s start the container after creation.
-i install systemd service, with definition in /opt/emulator
例えば:
./create_web_container.sh
これは次のことを行います。
これで、コンテナを次のように起動できます。
docker-compose -f js/docker/docker-compose.yaml up
ADBを利用可能にしたい場合は、JS/Docker/Development.yamlにあるオーバーレイを次のように適用できます。
docker-compose -f js/docker/docker-compose.yaml -f js/docker/development.yaml up
ブラウザをローカルホストに向けます。自己署名された証明書の使用により、警告が発生する可能性があります。証明書を受け入れたら、エミュレータの使用を開始できるはずです。
ADBを介してエミュレータにアクセスできるようにするときは、次のことを念頭に置いてください。
~/.android/adbkey
。これは、ADBが使用する秘密鍵です。これがなければ、ADBを介してデバイスにアクセスできません。adb connect ip-address-of-container:5555
デバイスと対話することができます。例えば: $ adb connect localhost:5555
$ adb shell getprop
作成時にエミュレータを自動的に起動および構成するインスタンスを構成する方法の詳細を提供するサンプルクラウドInitスクリプトがあります。これを行う方法の詳細はこちらをご覧ください。
問題への対処に関する別のドキュメントがあります。
デザインの詳細とReactアプリケーションを変更する方法は、こちらをご覧ください