هذه مجموعة من البرامج النصية الدنيا لتشغيل المحاكي في حاوية لمختلف الأنظمة مثل Docker ، للاستهلاك الخارجي. تتوافق البرامج النصية مع كل من Python الإصدار 2 و 3.
*لاحظ أن هذه ميزة تجريبية ونوصي بتثبيت هذه الأداة في بيئة افتراضية Python. يرجى تقديم مشكلات إذا لاحظت أن أي شيء لا يعمل كما هو متوقع.
تهدف هذه العروض التوضيحية إلى تشغيل نظام التشغيل Linux. يجب أن يستوفي نظامك المتطلبات التالية:
يجب تثبيت مترجم Python (Python3 مع Python3-Venv لإنشاء بيئات افتراضية)
يجب أن يكون ADB متاحًا على المسار. يأتي ADB كجزء من Th Android SDK. لاحظ أن تثبيت أدوات سطر الأوامر يكفي.
يجب تثبيت Docker. تأكد من أنه يمكنك تشغيله كمستخدم غير الجذر
يجب تثبيت Docker-Cormse.
يجب أن يكون KVM متاحًا. يمكنك الوصول إلى KVM عن طريق التشغيل على "Bare Metal" ، أو على جهاز (افتراضي) يوفر المحاكاة الافتراضية المتداخلة. إذا كنت تخطط لتشغيل هذا في السحابة (GCE/Azure/AWS/etc ..) يجب عليك أولاً التأكد من إمكانية الوصول إلى KVM. يمكن العثور على تفاصيل حول كيفية الوصول إلى KVM على مختلف مقدمي الخدمات السحابية هنا:
ضع في اعتبارك أنك سترى انخفاض الأداء إذا كنت تستخدم المحاكاة الافتراضية المتداخلة. تم اختبار الحاويات تحت قيادة Debian و Ubuntu kernel 5.2.17.
ملاحظة: لن يتم تشغيل الصور في Docker على Mac أو Windows
نستضيف الآن مجموعة من الحاويات في مستودع عام. يمكنك العثور على تفاصيل حول الحاويات هنا. يمكنك الآن تشغيل هذه الحاويات دون بنائها. على سبيل المثال:
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
يمكن العثور على برنامج نصي أكثر تفصيلاً في example.
يمكنك تثبيت حزمة 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
سيتم الاستعلام عن عناوين URL SDK المنشورة حاليًا وعناوين URITING لملفات zip من:
لكل صورة نظام ، يتم عرض مستوى واجهة برمجة التطبيقات والبديل و ABI و URL. لكل محاكي ، يتم عرض قناة التحديث (مستقرة مقابل الكناري) ، الإصدار ، نظام التشغيل المضيف ، وعنوان 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 صورة للنظام ، يمكننا إنشاء دليل يمكن إرساله إلى docker build
عبر الاحتجاج التالي لـ emu-docker
:
emu-docker create <emulator-zip> <system-image-zip> [--dest docker-src-dir
(getcwd()/src by default)]
هذا يضع جميع العناصر الصحيحة لتشغيل صورة Docker ، ولكن لا تقوم ببناء أو تشغيل أو نشر بعد. يجب استخدام ملف zip المحاكي Linux.
لبناء صورة Docker المقابلة لهذه المحاكيات وصور النظام:
docker build <docker-src-dir, either ./src or specified argument to
emu_docker.py>
سيتم إخراج معرف صورة Docker ؛ احفظ معرف الصورة هذا.
نفترض حاليًا أنه سيتم استخدام KVM مع Docker من أجل توفير قدرات المحاكاة الافتراضية لمجتمعات المعالجة المركزية لصورة 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 العامة عن طريق حقن متغير adbkey_pub ، أي: -e adbkey_pub = "$ (cat ~/.android/adbkey.pub)"
لديك أيضًا خيار تثبيت قسم البيانات /البيانات الذي سيستخدمه المحاكي إذا كان متاحًا. يمكّنك ذلك من استخدام 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. من أجل الاستفادة من تسريع الأجهزة ، قد تضطر إلى تثبيت ملحقات Nvidia Docker من هنا إذا كنت تقوم بتشغيل إصدار أقدم من Docker (<19.03). يجب عليك التأكد من أن لديك عملية تثبيت 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
)سيؤدي تسريع الأجهزة إلى تحسين أداء التطبيقات التي تعتمد بشكل كبير على الرسومات. لاحظ أنه على الرغم من أننا نحتاج إلى خادم X11 لتسارع GPU ، فلن يتم عرض واجهة مستخدم.
يمكنك دفع الصور التي تم إنشاؤها إلى مستودع من خلال توفير معلمات - - -REPO و -TAG عند إنشاء صورة. المعلمة -TAG اختيارية وتستخدم للإشارة إلى إصدار الصورة التي تم إنشاؤها. سيؤدي ذلك إلى افتراضي إلى معرف بناء المحاكي ، حيث نادراً ما يتم تحديث صور النظام.
اعتمدنا مخطط التسمية التالي للصور:
{API}-{sort}-{abi}
أين:
على سبيل المثال: يشير 29-Playstore-X86: 30.1.2 إلى صورة نظام تمكين PlayStore مع تشغيل Q على 32 بت x86.
مثال على ذلك ، يمكن أن يكون الاحتجاج لنشر جميع صور 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
نقوم بإعادة توجيه المنفذ 5555 للوصول إلى ADB إلى المحاكي الذي يعمل داخل الحاوية. قد لا يكتشف ADB الجهاز تلقائيًا ، لذا قم بتشغيله:
adb connect localhost:5555
يجب أن يظهر جهازك الآن على النحو التالي:
$ adb devices
List of devices attached:
localhost:5555 device
يحتوي هذا المستودع أيضًا على مثال يوضح كيف يمكنك استخدام Docker لجعل المحاكي متاحًا عبر الويب. يتم ذلك عن طريق تكوين المجموعة التالية من حاويات Docker:
من أجل تشغيل هذه العينة وتكون قادرًا على التفاعل مع المحاكي ، يجب أن تضع ما يلي في الاعتبار:
ستحتاج إلى موككر.
يجب أن يكون لديك المنفذ 80 و 443 متاح. ستقوم حاويات Docker بإنشاء شبكة داخلية وتعرض منافذ HTTP و HTTPS.
ستحتاج إلى إنشاء صورة Docker المحاكي ، كما هو موضح في الوثائق أعلاه.
اعتمادًا على شبكتك ، قد تحتاج إلى دوران
نحن نستخدم حاليًا Firebase للتعامل مع المصادقة والترخيص. ستحتاج إلى توفير تكوين JSON للمشروع الذي ترغب في استخدامه. يمكنك استخدام العينة المتوفرة هنا ، لكنها ستعمل فقط على مضيف محلي. يمكنك الحصول على تكوين Firebase من وحدة التحكم وضع تكوين 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
أشر متصفحك إلى مضيف محلي. من المحتمل أن تحصل على تحذير بسبب استخدام شهادة موقعة الذات. بمجرد قبول الشهادة ، يجب أن تكون قادرًا على تسجيل الدخول والبدء في استخدام المحاكي.
ضع الأشياء التالية في الاعتبار عند جعل المحاكي متاحًا عبر ADB:
~/.android/adbkey
. هذا هو المفتاح الخاص المستخدم من قبل ADB. بدون هذا ، لن تتمكن من الوصول إلى الجهاز عبر ADB.adb connect ip-address-of-container:5555
قبل أن تتمكن من التفاعل مع الجهاز. على سبيل المثال: $ adb connect localhost:5555
$ adb shell getprop
يوجد نصي عينة من السحابة يوفر تفاصيل حول كيفية تكوين مثيل سيقوم تلقائيًا بتشغيل المحاكي وتكوينه تلقائيًا على الإنشاء. يمكن العثور على تفاصيل حول كيفية القيام بذلك هنا.
لدينا وثيقة منفصلة تتعلق بالتعامل مع القضايا.
يمكن العثور على تفاصيل حول التصميم وكيفية تعديل تطبيق React هنا