이것은 외부 소비를 위해 Docker와 같은 다양한 시스템 용 컨테이너에서 에뮬레이터를 실행하는 최소 스크립트 세트입니다. 스크립트는 Python 버전 2 및 3과 호환됩니다.
*이것은 여전히 실험적인 기능이며 파이썬 가상 환경 에이 도구를 설치하는 것이 좋습니다. 예상대로 작동하지 않는 경우 문제를 제기하십시오.
이 데모는 Linux OS에서 실행되도록 고안되었습니다. 시스템은 다음 요구 사항을 충족해야합니다.
Python 통역사를 설치해야합니다 (가상 환경을 생성하려면 Python3-Venv가 포함 된 Python3)
ADB는 경로에서 사용할 수 있어야합니다. ADB는 Android SDK의 일부로 제공됩니다. 명령 줄 도구를 설치하면 충분합니다.
Docker는 설치해야합니다. 뿌리가 아닌 사용자로 실행할 수 있는지 확인하십시오
Docker-Compose를 설치해야합니다.
KVM을 사용할 수 있어야합니다. "베어 메탈"또는 중첩 가상화를 제공하는 (가상) 시스템에서 실행하여 KVM에 액세스 할 수 있습니다. 클라우드 (GCE/AZURE/AWS/ETC ..)에서 이것을 실행하려는 경우 먼저 KVM에 액세스 할 수 있는지 확인해야합니다. 다양한 클라우드 제공 업체에서 KVM에 액세스하는 방법에 대한 자세한 내용은 다음을 참조하십시오.
중첩 가상화를 사용하는 경우 성능이 감소 할 것입니다. 컨테이너는 커널 5.2.17을 실행하는 데비안과 우분투에서 테스트되었습니다.
참고 : 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-In-Script-Axample.sh에서 찾을 수 있습니다.
다음과 같이 파이썬 패키지를 설치할 수 있습니다.
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
ZIP 파일에 대해 현재 게시 된 Android SDK 및 출력 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
또는 브라우저와 같은 도구를 사용하여 원하는 에뮬레이터 및 시스템 이미지를 다운로드 할 수 있습니다. 두 가지를 얻은 후에는 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 Emulator Zip 파일을 사용해야합니다.
이 에뮬레이터 및 시스템 이미지에 해당하는 Docker 이미지를 작성하려면 다음과 같습니다.
docker build <docker-src-dir, either ./src or specified argument to
emu_docker.py>
도커 이미지 ID가 출력됩니다. 이 이미지 ID를 저장하십시오.
우리는 현재 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
사용합니다참고 : adbkey_pub 변수를 주입하여 공개 adbkey를 사용할 수 있습니다 : -e adbkey_pub = "$ (cat ~/.android/adbkey.pub)"
또한 에뮬레이터가 사용 가능한 경우 사용할 A /데이터 파티션을 마운트 할 수있는 옵션도 있습니다. 이를 통해 특히 중첩 가상화 시나리오에서 성능 향상을 줄 수있는 TMPF를 사용할 수 있습니다.
예를 들어:
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 및 -태그 매개 변수를 제공하여 생성 된 이미지를 저장소로 푸시 할 수 있습니다. -태그 매개 변수는 선택 사항이며 생성 된 이미지의 버전을 나타내는 데 사용됩니다. 시스템 이미지가 거의 업데이트되지 않으므로 에뮬레이터의 빌드 ID로 기본값이됩니다.
이미지에 대해 다음과 같은 이름 지정 체계를 채택했습니다.
{api}-{sort}-{abi}
어디:
예를 들어 : 29-Playstore-x86 : 30.1.2는 Q가 32 비트 x86에서 실행중인 Playstore 활성화 시스템 이미지를 나타냅니다.
모든 Q 이미지를 Google Cloud Repo에 게시하기위한 호출 예는 다음과 같습니다.
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
컨테이너 내부에서 실행되는 에뮬레이터에 대한 ADB 액세스를 위해 포트 5555를 전달합니다. ADB는 장치를 자동으로 감지하지 못할 수 있으므로 실행하십시오.
adb connect localhost:5555
장치는 이제 다음과 같이 표시해야합니다.
$ adb devices
List of devices attached:
localhost:5555 device
이 저장소에는 Docker를 사용하여 웹을 통해 에뮬레이터에 액세스 할 수있는 방법을 보여주는 예제가 포함되어 있습니다. 이것은 다음과 같은 Docker 컨테이너 세트를 작성하여 수행됩니다.
이 샘플을 실행하고 에뮬레이터와 상호 작용하려면 다음을 명심해야합니다.
Docker-Compose가 필요합니다.
포트 80과 443을 사용할 수 있어야합니다. Docker 컨테이너는 내부 네트워크를 생성하고 HTTP 및 HTTPS 포트를 노출시킵니다.
위의 설명서에 설명 된대로 에뮬레이터 Docker 이미지를 만들어야합니다.
네트워크에 따라 회전이 필요할 수 있습니다
우리는 현재 인증 및 승인을 처리하기 위해 Firebase를 사용하고 있습니다. 사용하려는 프로젝트의 JSON 구성을 제공해야합니다. 여기에 제공된 샘플을 사용할 수 있지만 LocalHost에서만 작동합니다. 콘솔에서 Firebase Josn 구성을 여기에서 파이어베이스 구성을 가져올 수 있습니다.
./js/firebase_config.json
이것은 구성 및 사절 설정을 생성하는 데 사용됩니다.
웹 컨테이너를 만들려면 다음과 같은 도구가 있어야합니다.
다음으로 사용하려는 에뮬레이터 및 시스템 이미지 버전이있는 컨테이너를 만들어야합니다. 예를 들어:
. ./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
브라우저를 LocalHost에 가리 킵니다. 자체 서명 인증서를 사용하여 경고를받을 수 있습니다. 인증서를 수락하면 로그인하고 에뮬레이터를 사용해야합니다.
ADB를 통해 에뮬레이터에 액세스 할 수있게 할 때 다음과 같은 사항을 명심하십시오.
~/.android/adbkey
. 이것은 ADB에서 사용하는 개인 키입니다. 이것 없이는 ADB를 통해 장치에 액세스 할 수 없습니다.adb connect ip-address-of-container:5555
장치와 상호 작용하기 전에. 예를 들어: $ adb connect localhost:5555
$ adb shell getprop
생성시 에뮬레이터를 자동으로 시작하고 구성하는 인스턴스를 구성하는 방법에 대한 세부 정보를 제공하는 샘플 클라우드-인이트 스크립트가 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 여기를 참조하십시오.
문제를 다루는 것과 관련된 별도의 문서가 있습니다.
디자인에 대한 자세한 내용과 React 응용 프로그램을 수정하는 방법에 대한 자세한 내용은 여기에서 찾을 수 있습니다.