Pull to refresh
0
Wrike
Мы делаем совместную работу проще

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

Level of difficultyEasy
Reading time6 min
Views7.4K

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

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

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

 brew install openjdk@17

Шаг 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. Получите список доступных образов системы

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

cd $ANDROID_HOME/tools/bin
sdkmanager --list

Чтобы вывести список SDK с необходимыми параметрами, можно использовать команду grep с нужными ключевыми словами. Например, код ниже позволит получить спикок из SDK 32 версии, для процессоров arm и с доступом к PlayStore.

sdkmanager --list | grep "android-32" | grep "arm" | grep "playstore" | cut -d '|' -f1

Давайте создадим переменную sdk, в котрую поместим имя выбранного образа системы. Но нужно учесть, что под критерии поиска могут попасть несколько вариантов SDK.

Пример списка из нескольких SDK, подпадающих под выбранные критерии
Пример списка из нескольких SDK, подпадающих под выбранные критерии

В таком случае либо сужайте поиск, либо выбирайте любой из найденных вариантов.

Код ниже присвоит переменной sdk первое найденное значение (в данном случе - system-images;android-33-ext5;google_apis_playstore;arm64-v8a)

sdk=$(sdkmanager --list | grep "android-33" | grep "arm" | grep "playstore" | cut -d '|' -f1  | head -n 1)

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

Чтобы создать виртуальное устройство с определенной конфигурацией (например, разрешением экрана, объемами 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

П.C. Также необходимо изменить параметры AvdId, avd.ini.displayname, и SDCard.path согласно желаемым значениям. Аналогично параметр image.sysdir.1 должен указывать на выбранную версию SDK ( нейминг такой же, как и у значения, полученного в шаге 5, но ; заменяется на /)

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

Пример конфигурации эумлятра 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

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

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

cd $ANDROID_HOME/tools/bin
 yes | sdkmanager --install $sdk
 yes | sdkmanager --licenses

П.С. Значение переменной sdk было присвоено на шаге 5

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

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

name=Test_Pixel_2_API_33
cd $ANDROID_HOME/tools/bin
echo no | avdmanager create avd --force --name $name --abi arm64-v8a --package $sdk

Шаг 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 $name -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=$(sdkmanager --list | grep "android-33" | grep "arm" | grep "playstore" | cut -d '|' -f1  | head -n 1)
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, а также многом другом.

Tags:
Hubs:
Total votes 8: ↑7 and ↓1+7
Comments6

Articles

Information

Website
www.wrike.com
Registered
Founded
2006
Employees
1,001–5,000 employees
Location
США
Representative
Wriketeam