Ini adalah satu set skrip minimal untuk menjalankan emulator dalam wadah untuk berbagai sistem seperti Docker, untuk konsumsi eksternal. Script kompatibel dengan Python versi 2 dan 3.
*Perhatikan bahwa ini masih merupakan fitur eksperimental dan kami sarankan menginstal alat ini di lingkungan virtual Python. Harap ajukan masalah jika Anda melihat bahwa apa pun tidak berfungsi seperti yang diharapkan.
Demo ini dimaksudkan untuk dijalankan pada OS Linux. Sistem Anda harus memenuhi persyaratan berikut:
Interpreter Python harus diinstal (Python3 dengan Python3-VenV untuk membuat lingkungan virtual)
ADB harus tersedia di jalur. ADB datang sebagai bagian dari Android SDK. Perhatikan bahwa menginstal alat baris perintah sudah cukup.
Docker harus diinstal. Pastikan Anda dapat menjalankannya sebagai pengguna non-root
Docker-Compose harus dipasang.
KVM harus tersedia. Anda bisa mendapatkan akses ke KVM dengan menjalankan "Bare Metal", atau pada mesin (virtual) yang menyediakan virtualisasi bersarang. Jika Anda berencana untuk menjalankan ini di cloud (GCE/Azure/AWS/dll.) Pertama -tama Anda harus memastikan Anda memiliki akses ke KVM. Detail tentang cara mendapatkan akses ke KVM di berbagai penyedia cloud dapat ditemukan di sini:
Perlu diingat bahwa Anda akan melihat berkurangnya kinerja jika Anda memanfaatkan virtualisasi bersarang. Wadah telah diuji di bawah Debian dan Ubuntu yang menjalankan kernel 5.2.17.
Catatan: Gambar tidak akan berjalan di Docker di Mac atau Windows
Kami sekarang menjadi tuan rumah satu set kontainer di repositori publik. Anda dapat menemukan detail tentang wadah di sini. Anda sekarang dapat menjalankan wadah ini tanpa membangunnya. Misalnya:
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
Ini akan menarik wadah jika tidak tersedia secara lokal dan meluncurkannya. Anda dapat melihat itu dimulai:
Setelah ini, Anda dapat terhubung ke perangkat dengan mengonfigurasi ADB:
adb connect localhost:5555
Perangkat sekarang harus muncul setelah beberapa saat sebagai:
$ adb devices
List of devices attached
localhost:5555 device
Jika Anda ingin menggunakan ini dalam skrip, Anda dapat melakukan hal berikut:
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
Skrip yang lebih rinci dapat ditemukan di run-in-script-example.sh.
Anda dapat menginstal paket Python sebagai berikut:
source ./configure.sh
Ini akan mengaktifkan lingkungan virtual dan membuat emu-docker
yang dapat dieksekusi tersedia. Anda bisa mendapatkan informasi terperinci tentang penggunaan dengan meluncurkannya sebagai berikut:
emu-docker -h
Anda harus menerima perjanjian lisensi sebelum Anda dapat membuat wadah Docker.
Anda dapat secara interaktif memilih versi android dan emulator mana yang ingin Anda gunakan dengan menjalankan:
emu-docker interactive --start
Anda akan diminta untuk memilih gambar sistem dan versi emulator, setelah itu file Docker akan dibuat. Gambar dan emulator sistem akan diunduh ke direktori saat ini jika diperlukan. Skrip akan memberi Anda perintah untuk melihat log serta perintah untuk menghentikan wadah.
Jika server ADB lokal mendeteksi wadah yang dimulai secara otomatis, Anda tidak ada hubungannya untuk menanyakannya melalui ADB. Jika bukan itu masalahnya, Anda sekarang dapat terhubung ke perangkat yang berjalan menggunakan ADB:
adb connect localhost:5555
Untuk memeriksa apakah ADB telah melihat wadah, Anda dapat menggunakan:
adb devices
Perintah dan periksa apakah perangkat terdeteksi.
Jangan lupa untuk menghentikan wadah Docker setelah selesai!
Baca bagian tentang membuat emulator tersedia di web untuk menjalankan emulator menggunakan webrtc
Menerbitkan:
emu-docker list
Akan meminta URL Android Android dan URL output yang saat ini diterbitkan untuk file ZIP dari:
Untuk setiap gambar sistem, tingkat API, varian, ABI, dan URL ditampilkan. Untuk setiap emulator, saluran pembaruan (stabil vs canary), versi, OS host, dan URL ditampilkan.
Output contoh:
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
Seseorang kemudian dapat menggunakan alat seperti wget
atau browser untuk mengunduh emulator dan gambar sistem yang diinginkan. Setelah keduanya diperoleh, kita dapat membangun gambar Docker.
Diberikan file zip emulator dan file zip gambar sistem, kami dapat membuat direktori yang dapat dikirim ke docker build
melalui doa emu-docker
berikut:
emu-docker create <emulator-zip> <system-image-zip> [--dest docker-src-dir
(getcwd()/src by default)]
Ini menempatkan semua elemen yang tepat untuk menjalankan gambar Docker, tetapi belum membangun, menjalankan, atau menerbitkan. File zip Linux Emulator harus digunakan.
Untuk membangun gambar Docker yang sesuai dengan emulator dan gambar sistem ini:
docker build <docker-src-dir, either ./src or specified argument to
emu_docker.py>
ID gambar Docker akan menghasilkan; Simpan ID gambar ini.
Kami saat ini berasumsi bahwa KVM akan digunakan dengan Docker untuk memberikan kemampuan virtualisasi CPU ke gambar Docker yang dihasilkan.
Kami memberikan skrip menjalankan berikut:
./run.sh <docker-image-id> <additional-emulator-params>
Itu melakukan berikut:
docker run -e ADBKEY="$(cat ~/.android/adbkey)"
--device /dev/kvm
--publish 8554:8554/tcp
--publish 5555:5555/tcp <docker-image-id>
--device /dev/kvm
untuk memiliki akselerasi CPUCatatan: Anda dapat menggunakan ADBKEY publik dengan menyuntikkan variabel ADBKEY_PUB, yaitu: -e adbkey_pub = "$ (Cat ~/.android/adbkey.pub)"
Anda juga memiliki opsi untuk memasang partisi A /Data yang akan digunakan emulator jika tersedia. Ini memungkinkan Anda untuk menggunakan TMPFS yang dapat memberikan peningkatan kinerja, terutama dalam skenario virtualisasi bersarang.
Misalnya:
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>
Kami saat ini hanya mendukung akselerasi perangkat keras untuk NVIDIA. Untuk memanfaatkan akselerasi perangkat keras, Anda mungkin harus menginstal ekstensi NVIDIA Docker dari sini jika Anda menjalankan versi Docker yang lebih lama (<19.03). Anda harus memastikan Anda memiliki instalasi X minimal jika Anda menggunakan instance cloud. Misalnya XVFB dapat digunakan. Anda harus membangun wadah dengan melewati -bendera --gu:
emu-docker create stable Q --gpu
Anda sekarang dapat meluncurkan emulator dengan skrip run-with-gpu.sh
:
./run-with-gpu.sh <docker-image-id> <additional-emulator-params>
Skripnya mirip dengan yang dijelaskan di atas dengan penambahan yang akan:
--gpu all
)Akselerasi perangkat keras akan secara signifikan meningkatkan kinerja aplikasi yang sangat bergantung pada grafik. Perhatikan bahwa meskipun kita memerlukan server X11 untuk akselerasi GPU tidak akan ada UI yang ditampilkan.
Anda dapat mendorong gambar yang dibuat ke repositori dengan menyediakan parameter - -push dan - -repo dan - -TAG saat membuat gambar. Parameter - -TAG adalah opsional dan digunakan untuk menunjukkan versi gambar yang dibuat. Ini akan default ke build-id dari emulator, karena gambar sistem jarang diperbarui.
Kami mengadopsi skema penamaan berikut untuk gambar:
{API}-{sort}-{abi}
Di mana:
Sebagai contoh: 29-playstore-x86: 30.1.2 menunjukkan gambar sistem yang diaktifkan PlayStore dengan Q berjalan pada 32-bit x86.
Contoh doa untuk menerbitkan semua gambar q ke google cloud repo bisa:
emu-docker -v create --push --repo us.gcr.io/emulator-project/ stable " Q "
Gambar yang telah didorong ke repositori dapat diluncurkan langsung dari repositori. Misalnya:
docker run --device /dev/kvm --publish 8554:8554/tcp --publish 5555:5555/tcp
us.gcr.io/emulator-project/29-playstore-x86:30.1.2
Kami meneruskan port 5555 untuk akses ADB ke emulator yang berjalan di dalam wadah. ADB mungkin tidak secara otomatis mendeteksi perangkat, jadi jalankan:
adb connect localhost:5555
Perangkat Anda sekarang harus muncul sebagai:
$ adb devices
List of devices attached:
localhost:5555 device
Repositori ini juga berisi contoh yang menunjukkan bagaimana Anda dapat menggunakan Docker untuk membuat emulator dapat diakses melalui web. Ini dilakukan dengan menyusun set wadah Docker berikut:
Untuk menjalankan sampel ini dan dapat berinteraksi dengan emulator, Anda harus mengingat berikut:
Anda akan membutuhkan komposisi Docker.
Anda harus memiliki port 80 dan 443 tersedia. Wadah Docker akan membuat jaringan internal dan mengekspos port HTTP dan HTTPS.
Anda perlu membuat gambar Docker Emulator, seperti yang dijelaskan dalam dokumentasi di atas.
Bergantung pada jaringan Anda, Anda mungkin perlu giliran
Kami saat ini menggunakan Firebase untuk menangani otentikasi dan otorisasi. Anda perlu memberikan konfigurasi JSON dari proyek yang ingin Anda gunakan. Anda dapat menggunakan sampel yang disediakan di sini, tetapi hanya akan bekerja pada Localhost. Anda bisa mendapatkan konfigurasi firebase dari tempat konsol tempat konfigurasi Firebase Josn di sini:
./js/firebase_config.json
Ini akan digunakan untuk menghasilkan pengaturan konfigurasi dan utusan.
Untuk membuat wadah web, Anda harus memiliki alat berikut yang tersedia:
Selanjutnya Anda harus membuat wadah dengan versi gambar emulator & sistem yang ingin Anda gunakan. Misalnya:
. ./configure.sh && emu-docker create canary "P.*x86_64"
Setelah Anda mengurus langkah -langkah di atas, Anda dapat membuat wadah menggunakan skrip 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
Misalnya:
./create_web_container.sh
Ini akan melakukan hal berikut:
Anda sekarang dapat meluncurkan wadah sebagai berikut:
docker-compose -f js/docker/docker-compose.yaml up
Jika Anda ingin menyediakan ADB, Anda dapat menerapkan overlay yang ditemukan di JS/Docker/Development.yaml sebagai berikut:
docker-compose -f js/docker/docker-compose.yaml -f js/docker/development.yaml up
Arahkan browser Anda ke localhost. Anda kemungkinan akan mendapatkan peringatan karena penggunaan sertifikat yang ditandatangani sendiri. Setelah Anda menerima sertifikat, Anda harus dapat masuk dan mulai menggunakan emulator.
Ingatlah hal -hal berikut saat Anda membuat emulator dapat diakses melalui ADB:
~/.android/adbkey
. Ini adalah kunci pribadi yang digunakan oleh ADB. Tanpa ini, Anda tidak akan dapat mengakses perangkat melalui ADB.adb connect ip-address-of-container:5555
Sebelum Anda dapat berinteraksi dengan perangkat. Misalnya: $ adb connect localhost:5555
$ adb shell getprop
Ada sampel skrip cloud-init yang memberikan detail tentang bagaimana Anda dapat mengonfigurasi instance yang secara otomatis akan meluncurkan dan mengkonfigurasi emulator pada pembuatan. Detail tentang cara melakukan ini dapat ditemukan di sini.
Kami memiliki dokumen terpisah terkait dengan masalah yang berurusan.
Detail tentang desain dan cara memodifikasi aplikasi React dapat ditemukan di sini