Делаем эмулятор Android через Terminal: пошаговое руководство

от автора

В Android разработке может наступить момент, когда для тестирования приложения на различных устройствах может потребоваться виртуальное устройство. Эмулятор Android легко можно создать с помощью GUI Android Studio, но также можно и с помощью командной строки на macOS. В этой статье я расскажу вам, как именно это сделать!

Шаг 1: Установите Java

Убедитесь, что в вашей системе установлена ​​Java. Если нет, то это можно сделать с помощью Homebrew, выполнив следующую команду:

 brew install openjdk@11

Шаг 2. Установите SDK

SDK можно установить с помощью Android Studio, выполнив следующие действия согласно инструкции.

Шаг 3. Установите инструменты для командной строки Android SDK

Их можно загрузить с сайта разработчика Android в разделе «Command line tools only».

Скачайте и распакуйте архив, перенесите  его содержимое в каталог $ANDROID_HOME. Если в каталоге cmdline-tools нет папки latest, создайте ее вручную и перенесите туда все содержимое, чтобы предотвратить возникновение ошибки Could not determine SDK root.

пример расположения фалов Command line tools

Пример расположения фалов Command line tools

Шаг 4. Добавьте ANDROID_HOME и cmdline-tools в PATH

Вам необходимо добавить переменные окружения ANDROID_HOME и cmdline-tools в PATH. Это можно сделать добавив следующий код в файл ~/.zshrc или любой другой используемый Вами файл конфигурации:

export ANDROID_HOME=~/Library/Android/sdk export PATH=$ANDROID_HOME/emulator/:$PATH export PATH=$ANDROID_HOME/platform-tools/:$PATH export PATH=$ANDROID_HOME/cmdline-tools/latest/bin/:$PATH

Шаг 5: Создайте шаблон свойств эмулятора

Чтобы создать виртуальное устройство с определенной конфигурацией (например, разрешением экрана, объемами RAM, виртуальной памяти и т. д.), необходимо указать эти параметры при создании эмулятора. Чтобы упростить этот процесс, давайте создадим шаблон с этими параметрами.

Для этого в Android Studio создайте виртуальное устройство с необходимыми параметрами и скопируйте его конфигурацию. Затем назовите созданный эмулятор, например, «Test Pixel 2».

Чтобы «распечатать» конфигурацию , введите следующую команду:

cat $HOME/.android/avd/Test_Pixel_2.avd/config.ini

После, сохраните параметры как шаблон, создав новый файл с именем «pixel_2_API_33_config», используя следующую команду:

touch ~/pixel_2_API_33_config cat $HOME/.android/avd/Test_Pixel_2.avd/config.ini >> ~/pixel_2_API_33_config

П.с. Также нужно обязательно изменить параметры AvdId, avd.ini.displayname, и SDCard.path согласно желаемым значениям.

Под спойлером оставлю пример конфигурации:

Пример конфигурации эумлятра Pixel 2 API 33
AvdId=Test_Pixel_2_API_33 PlayStore.enabled=true abi.type=arm64-v8a avd.ini.displayname=Test Pixel 2 API 33 avd.ini.encoding=UTF-8 disk.dataPartition.size=6G fastboot.chosenSnapshotFile= fastboot.forceChosenSnapshotBoot=no fastboot.forceColdBoot=yes fastboot.forceFastBoot=no hw.accelerometer=yes hw.arc=false hw.audioInput=yes hw.battery=yes hw.camera.back=virtualscene hw.camera.front=emulated hw.cpu.arch=arm64 hw.cpu.ncore=4 hw.dPad=no hw.device.hash2=MD5:55acbc835978f326788ed66a5cd4c9a7 hw.device.manufacturer=Google hw.device.name=pixel_2 hw.gps=yes hw.gpu.enabled=yes hw.gpu.mode=auto hw.initialOrientation=Portrait hw.keyboard=yes hw.lcd.density=420 hw.lcd.height=1920 hw.lcd.width=1080 hw.mainKeys=no hw.ramSize=1536 hw.sdCard=yes hw.sensors.orientation=yes hw.sensors.proximity=yes hw.trackBall=no image.sysdir.1=system-images/android-33-ext5/google_apis_playstore/arm64-v8a/ runtime.network.latency=none runtime.network.speed=full sdcard.path=$HOME/.android/avd/Test_Pixel_2_API_33.avd/sdcard.img sdcard.size=512 MB showDeviceFrame=no skin.dynamic=yes skin.name=1080x1920 skin.path=_no_skin skin.path.backup=_no_skin tag.display=Google Play tag.id=google_apis_playstore vm.heapSize=228

Шаг 6. Получите список доступных образов системы

Это можно сделать следующей командой:

cd $ANDROID_HOME/tools/bin sdkmanager --list

Выберите требуемый образ эмулятора из списка. В нашем случае берем system-images;android-33-ext5;google_apis_playstore;arm64-v8a.

Шаг 7: Установите выбранный образ

Это можно сделать следующей командой:

cd $ANDROID_HOME/tools/bin  yes | sdkmanager --install "system-images;android-33-ext5;google_apis_playstore;arm64-v8a"  yes | sdkmanager --licenses

Шаг 8: Создайте эмулятор

Создаем его следующим образом:

name=Test_Pixel_2_API_33 cd $ANDROID_HOME/tools/bin echo no | avdmanager create avd --force --name $name --abi arm64-v8a --package 'system-images;android-33-ext5;google_apis_playstore;arm64-v8a'

Шаг 9: Измените конфигурацию эмулятора

Изменить конфигурацию эмулятора можно, заменив параметры шаблона на файл конфигурации, как показано ниже:

cat ~/pixel_2_API_33_config >> $HOME/.android/avd/$name.avd/config.ini

Шаг 10: Проверьте созданный эмулятор

Чтобы убедиться, что эмулятор отображается в списке эмуляторов, выполните следующую команду:

cd $ANDROID_HOME/emulator  ./emulator -list-avds

Шаг 11: Запустите эмулятор

Чтобы запустить созданный эмулятор, используйте имя из вышеприведенных шагов (в моем случае это Test_Pixel_2_API_33). Запуск осуществляется с помощью следующей команды:

cd $ANDROID_HOME/emulator; nohup ./emulator -avd Test_Pixel_2_API_33 -no-snapshot -no-boot-anim -wipe-data &

Совет: чтобы запустить процесс в фоновом режиме, просто добавьте & в конец выполняемого кода.

Вы также можете запустить все созданные эмуляторы выполнив следующую команду:

cd $ANDROID_HOME/emulator; ./emulator -list-avds | cut -f1 | while read line  do    nohup ./emulator -avd $line -no-snapshot -no-boot-anim -wipe-data &    sleep 20  done

Пример использования

Чтобы проиллюстрировать, как можно использовать созданный эмулятор, я приведу пример кода, который использовал для создания девайса с нужной версией SDK и запуска на нем UI тестов. Код завершает работу всех существующих эмуляторов, создает новый экземпляр эмулятора, выполняет работу и в конце удаляет созданный эмулятор. Вот так:

Пример использования
# Kill all running emulators adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill; done  # Install the emulator system image if not cd $ANDROID_HOME/tools/bin sdk="system-images;android-33;google_apis_playstore;arm64-v8a" installedImage=$(sdkmanager --list_installed | grep -o $sdk) if [[ $installedImage = $sdk ]]; then  echo "The required SDK is already installed"; else  yes | sdkmanager --install $sdk  yes | sdkmanager --licenses  fi  name=Test_Pixel_2_API_33 cd $ANDROID_HOME/tools/bin echo no | avdmanager create avd --force --name $name --abi arm64-v8a --package $sdk  sysDir=$(cat $HOME/.android/avd/$name.avd/config.ini | grep "image.sysdir.1=")  # Edit the created emulator config tee $HOME/.android/avd/$name.avd/config.ini << END AvdId=$name PlayStore.enabled=true abi.type=arm64-v8a avd.ini.displayname=$name avd.ini.encoding=UTF-8 disk.dataPartition.size=6G fastboot.chosenSnapshotFile= fastboot.forceChosenSnapshotBoot=no fastboot.forceColdBoot=yes fastboot.forceFastBoot=no hw.accelerometer=yes hw.arc=false hw.audioInput=yes hw.battery=yes hw.camera.back=virtualscene hw.camera.front=emulated hw.cpu.arch=arm64 hw.cpu.ncore=4 hw.dPad=no hw.device.hash2=MD5:55acbc835978f326788ed66a5cd4c9a7 hw.device.manufacturer=Google hw.device.name=pixel_2 hw.gps=yes hw.gpu.enabled=yes hw.gpu.mode=auto hw.initialOrientation=Portrait hw.keyboard=yes hw.lcd.density=420 hw.lcd.height=1920 hw.lcd.width=1080 hw.mainKeys=no hw.ramSize=1536 hw.sdCard=yes hw.sensors.orientation=yes hw.sensors.proximity=yes hw.trackBall=no $sysDir runtime.network.latency=none runtime.network.speed=full sdcard.path=$HOME/.android/avd/$name.avd/sdcard.img sdcard.size=512 MB showDeviceFrame=no skin.dynamic=yes skin.name=1080x1920 skin.path=_no_skin skin.path.backup=_no_skin tag.display=Google Play tag.id=google_apis_playstore vm.heapSize=228 END  cd $ANDROID_HOME/emulator  ./emulator -list-avds  cd $ANDROID_HOME/emulator; nohup ./emulator -avd $name -no-snapshot -no-boot-anim -wipe-data & sleep 40  # Do # Some # Code   # Kill and delete the created emulator adb devices adb devices | grep emulator | cut -f1 | while read line; do adb -s $line emu kill && sleep 10; done  avdmanager delete avd -n $name

Заключение

Я написал эту статью, чтобы показать: создание нового Android эмулятора через терминал — вполне простая задача. Шагов много, но, поверьте, это дает больше гибкости и контроля, чем GUI Android Studio. Еще, это единственный известный мне способ создания эмулятора с кастомными параметрами на CI (поделитесь в комментариях, если знаете другие). Удачи!

Эта статья была написана автором статьи в Wrike. Хотите узнать, каково работать с нами и какие возможности карьерного роста мы предлагаем? Вам сюда!

Кроме того, вы можете посмотреть интервью с основателем компании Андреем Филевым и узнать о культуре, ценностях и методах работы Wrike, а также многом другом.


ссылка на оригинал статьи https://habr.com/ru/companies/wrike/articles/747154/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *