2013-08-23 7 views
28

Есть ли способ запустить по командной строке avd и зарегистрировать ее через adb?Как я могу запустить эмулятор genymotion для запуска данного avd, без головы?

Я также предпочел бы, чтобы эмулятор запустил безголовый.

Я ищу это для быстрого запуска тестов.

+0

Главный вопрос заключается в том, на какой платформе вы его используете, чтобы вы могли исполнить исполняемый файл Genymotion. –

ответ

38

Для других, которые ищут, не обезглавленный запуск командной строки:

/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} 

Где хххе может быть либо имя или идентификатор:

/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 
+0

Ницца, и как вы справляетесь с IP-адресом? Вам понадобится его, чтобы подключить adb к genymotion. – Snicolas

+1

В настройках genymotion убедитесь, что установлен «Путь к Android SDK», а затем убедитесь, что «Когда виртуальное устройство запускается, подключите его автоматически к ADB». Когда устройство запускается с помощью команды genymotion player, оно автоматически подключится к ADB –

+0

, как вы получили имя параметра для плеера? Разве нет ничего, чтобы запустить его без головы? – Snicolas

15

Вот более эффективная процедура. Это потребует первого запуска вручную, но после этого вы получите пылающую быструю головоломку в течение нескольких секунд. Следующие скрипты были протестированы на macos x. Им может понадобиться еще одна работа для Linux.

Во-первых, запуск эмулятора genymotion обычно через приложение genymotion. Тогда, получить его sha1 из виртуальной коробки:

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 

Теперь у вас есть все, что вам нужно, чтобы начать снимок виртуальной машины из командной литий ne и подключиться к нему через 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 может сделать этот канун проще.

+0

Эти скрипты отлично работают (спасибо) ... но захват экрана создает искаженные изображения (как захваты на основе VBoxManage controlvm, так и захват adb shell/system/bin/screencap создают одинаковые искаженные изображения). Любой способ получить пропорциональный и элементы на экране, чтобы правильно отображаться при запуске vm таким образом? –

+0

Это довольно хороший вопрос. Я думаю, что гений-мобильник до сих пор не учитывает этот случай использования. Возможно, лучшим решением для вас будет использование виртуальной коробки с дисплеем фреймбуфера. Я думаю, это может сработать лучше, поскольку это будет общий X11 impl. – Snicolas

+0

Я предполагаю, что genymotion управляет видеовыходом из виртуального окна, чтобы отобразить его - я не могу представить, как, но, похоже, не все равно запускаются экземпляры vm через командную строку (без головы или нет) и получают одинаковый дисплей вывода, который создается, когда genymotion запускает экземпляры. Прибегая к попыткам различных комбинаций версий между VirtualBox, GenyMotion и Android Devices, в случае, если я ударил в какой-то угловой случай, который никто другой не испытывает, но пока не повезло. –

-1

Команда для запуска 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 
+1

Это не безголовый. – Snicolas

2

Я бегу на Ubuntu и я изменил Snicolas's answer и загружены в Gist: https://gist.github.com/guneysus/410bb0e6b56d6f228555

Основные отличия:

  • метод Finding IP не работает на Ubuntu.Я пришел с другой работой, вокруг
  • Defined устройств в geny_devices.sh и на этот файл легко выбрать VM:

`` `

# 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 & 

` ``

0

В дистрибутивах GNU/Linux

Это легко

cd genymotion/ 

В этой папке нужно найти файл игрока

enter image description here

Теперь вам нужно имя устройства

enter image description here

В терминале, написать эту команду, заменив NameDevice для вашего устройства

./player --vm-name <NameDevice> 

enter image description here

enter image description here

И теперь ваш эмулятор начал

enter image description here

В GNU/Linux вы можете создать доступ в меню

enter image description here

enter image description here

УДАЧИ

1

Благодаря @ks ответ я был в состоянии запустить эмулятор движения Гены на 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 

Надеется, что это помогает кто то.

 Смежные вопросы

  • Нет связанных вопросов^_^