Есть ли способ запустить из командной строки данный avd
и зарегистрировать его через adb
?
Я также предпочел бы запустить эмулятор без головы.
Я ищу это, чтобы быстро запустить тесты.
Есть ли способ запустить из командной строки данный avd
и зарегистрировать его через adb
?
Я также предпочел бы запустить эмулятор без головы.
Я ищу это, чтобы быстро запустить тесты.
Для других, которые ищут запуск командной строки без головы:
/Applications/Genymotion.app/Contents/MacOS/player --vm-name "xxxx"
Получить список vms:
$ VBoxManage list vms
"Galaxy Nexus - 4.2.2 - API 17 - 720x1280" {56d8e3aa-ecf8-483e-a450-86c8cdcedd35}
Где xxxx может быть либо именем, либо идентификатором:
/Applications/Genymotion.app/Contents/MacOS/player --vm-name 56d8e3aa-ecf8-483e-a450-86c8cdcedd35
/Applications/Genymotion.app/Contents/MacOS/player --vm-name "Galaxy Nexus - 4.2.2 - API 17 - 720x1280"
Вы можете убить его обычным уничтожением процесса:
ps | grep "Genymotion\.app/Contents/MacOS/player" | awk '{print $1}' | xargs kill
Вот лучше процедура. Это потребует первого ручного запуска, но после этого вы получите невероятно быстрое genymotion, работающее в течение нескольких секунд. Следующие скрипты были протестированы на macos x. Им может понадобиться дополнительная работа для Linux.
Сначала запустите эмулятор genymotion в обычном режиме через приложение genymotion. Затем получите его sha1 из Virtual box:
VBoxManage list vms
Затем сделайте снимок из командной строки:
#script genymotion-save.sh
VM=6a5d9245-b751-47aa-b38d-989c5f1a9cfb
echo "VM is \"$VM\""
VBoxManage snapshot $VM take snap1
Затем вы можете определить его ip, используя этот скрипт (большая часть его сложности связана с преобразованием mac-адреса):
#script genymotion-detect-ip.sh
VM=6a5d9245-b751-47aa-b38d-989c5f1a9cfb
#find mac of vm
#http://stackoverflow.com/questions/10991771/sed-to-insert-colon-in-a-mac-address
# Update arp table
for i in {1..254}; do ping -c 1 192.168.56.$i 2&>1; done
MAC=`VBoxManage showvminfo "$VM" | grep MAC | grep Host | awk -F ":" '{print $3}' | cut -c 2-13`
#echo "MAC is $MAC"
MAC=`echo $MAC | sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\1/' | tr '[:upper:]' '[:lower:]'`
#echo "MAC is $MAC"
# Find IP: substitute vname-mac-addr with your vm's mac address in ':' notation
IP=`arp -a | sed "s/ \(.\):/ 0\1:/" | sed "s/:\(.\):/:0\1:/g"|sed "s/:\(.\):/:0\1:/g"|sed "s/:\(.\)$/:0\1/"|grep $MAC`
#echo "IP is $IP"
IP=`echo $IP | cut -d "(" -f2 | cut -d ")" -f1`
echo $IP
Теперь у вас есть все, что вам нужно, чтобы запустить снимок виртуальной машины из командной строки и подключиться к ней через adb (используя root). Вы можете сделать это с помощью этого скрипта:
# script genymotion-start.sh
VM=6a5d9245-b751-47aa-b38d-989c5f1a9cfb
echo "VM is \"$VM\""
VBoxManage snapshot $VM restore snap1 &
VBoxHeadless -s $VM &
IP=`./genymotion-detect-ip.sh`
echo $IP
#adb tcpip 5555
adb connect $IP:5555
#restart adb as root to allow powering it off
#root mode is generally what we want from a headless emulator (to download emma files for instance)
adb root
adb connect $IP:5555
И, наконец, вы также можете использовать скрипт для правильного завершения работы эмулятора:
#script genymotion-stop.sh
IP=`./genymotion-detect-ip.sh`
adb root
adb connect $IP:5555
adb shell reboot -p &
Это по-прежнему много сценариев, но он отлично работает и удобно управляет эмулятором genymotion.
Будем надеяться, что в будущих версиях genymobile сможет упростить эту задачу.
VBoxManage guestproperty get '6a5d9245-b751-47aa-b38d-989c5f1a9cfb' androvm_ip_management
Это вернет хороший ip, а одинарные кавычки вокруг имени виртуальной машины дадут вам правильные значения, даже если ваше имя виртуальной машины содержит пробелы. Вместо этого вы можете оставить uuid.
- person Sojurn; 07.12.2013
VBoxHeadless: error: The machine '.....' is already locked for a session (or being unlocked)
- person Luis A. Florit; 09.03.2014
&
после команды восстановления. Думаю не стоит добавлять.
- person Luis A. Florit; 09.03.2014
Я работаю в Ubuntu и изменил ответ Сниколаса и загрузил как Gist: https://gist.github.com/guneysus/410bb0e6b56d6f228555
Основные отличия:
geny_devices.sh
и источник этого файла, чтобы легко выбрать ВМ:```
# script geny_devices.sh
s3_43="e63063e8-a922-4832-8bcf-05362c3a1c9a"
nexus_44="45287ed9-2d5e-49a5-a0f9-82c29e7cc4b3"
# Samsung Galaxy S3 - 4.3 - API 18 - 720x1280" {e63063e8-a922-4832-8bcf-05362c3a1c9a}
# "Google Nexus 7 - 4.4.4 - API 19 - 800x1280" {45287ed9-2d5e-49a5-a0f9-82c29e7cc4b3}
#script geny_snap.sh
source geny_devices.sh
VM=${s3_43}
# Hopefully performance improvement ;) Not really necessary
# for in in {1..254};
# do ping -c 192.168.56.$1 2&>1;
# done
MAC=`VBoxManage showvminfo ${VM} | grep MAC | awk -F ":" '{print $3}' | cut -c 2-13`
# echo "MAC is ${MAC}"
# On linux data returned from arp -a is like
# ? (192.168.56.101) at 08:00:27:b0:7f:38 [ether] on vboxnet0
# ? (192.168.0.1) at 9e:a9:e4:d5:43:5b [ether] on eth2
# Find IP with
IP=`arp -a | egrep vboxnet|grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"`
# echo "IP is $IP"
IP=`echo $IP | cut -d "(" -f2 | cut -d ")" -f1`
# echo $IP|xclip
# echo -e "[OK] IP \t:\t ${IP}
# IP exported as global variable and to the clipboard."
echo $IP
# script geny_save.sh
source geny_devices.sh
VM=${s3_43}
echo "VM is \"$VM\""
VBoxManage snapshot $VM restore snap1 &
# script geny_start.sh
source geny_devices.sh
VM=${s3_43}
echo "VM is \"$VM\""
VBoxManage snapshot $VM restore snap1 &
VBoxHeadless -s $VM &
IP=`./geny_ip.sh`
echo ">>>>>>" $IP
adb tcpip 5555
adb connect $IP:5555
#restart adb as root to allow powering it off
#root mode is generally what we want from a headless emulator (to download emma files for instance)
adb root
adb connect $IP #:5555
#script geny_stop.sh
IP=`./geny_ip.sh`
adb root
adb connect $IP:5555
adb shell reboot -p &
```
В дистрибутивах GNU/Linux
Это просто
cd genymotion/
В этой папке вам нужно найти файл player
Теперь вам нужно имя устройства
В своем терминале напишите эту команду, заменив NameDevice на имя вашего устройства.
./player --vm-name <NameDevice>
И вот ваш эмулятор запустился
В GNU/Linux вы можете создать доступ в меню
Удачи
Благодаря ответу @k я смог запустить эмулятор движения Geny на Mac, но мне пришлось внести несколько изменений для Mac OS Sierra 10.12.6 и GenyMotion 2.10.0.
/Applications/Genymotion.app/Contents/MacOS/player.app/Contents/MacOS/player --vm-name "xxxx"
и убить его
ps | grep "/Applications/Genymotion\.app/Contents/MacOS/player\.app/Contents/MacOS/player" | awk '{print$1}' | xargs kill
Надеюсь, это поможет кому-то.
На всякий случай, если кто-то не знает о переменных среды, ищет безголовый и использующий Windows, вы можете проверить команды, выполнив следующую команду, где она установлена Виртуальная коробка:
C:\Program Files\Oracle\VirtualBox list vms
Затем вы можете запустить желаемое устройство примерно так:
C:\Program Files\Genymobile\Genymotion\tools player --vm-name "Google Nexus 4"
Конечно, лучшим подходом будет размещение этих путей в вашей переменной окружения.
Команда для запуска genymotion из командной строки —
player --vm-name Nexus_4
если игрок еще не добавлен в путь, добавьте его в путь, используя команду ниже в вашем ~/.bash_profile
export PATH=/Applications/Genymotion.app/Contents/MacOS/:$PATH
Когда подключено более одного устройства, используйте «adb -s» для перенаправления команд на конкретное устройство. После запуска эмулятора они будут перечислены в разделе устройств adb.
Пример:
adb devices
List of devices attached
192.168.56.101:5555 device
Отправить команду, чтобы нажать клавишу меню на устройстве Android, когда подключено несколько устройств:
adb -s 192.168.56.101:5555 shell input keyevent KEYCODE_MENU