31

有没有办法通过命令行启动给定的avd并通过它注册adb

我也希望让模拟器无头启动。

我正在寻找这个来快速运行测试。

4

7 回答 7

41

对于其他寻找非无头命令行启动的人:

/Applications/Genymotion.app/Contents/MacOS/player --vm-name "xxxx"

获取虚拟机列表:

$ VBoxManage list vms
"Galaxy Nexus - 4.2.2 - API 17 - 720x1280" {56d8e3aa-ecf8-483e-a450-86c8cdcedd35}

其中 xxxx 可以是名称或 id:

/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
于 2013-09-18T16:51:33.940 回答
15

这是一个更好的程序。它需要第一次手动启动,但之后,您将在几秒钟内获得极快的 genymotion。以下脚本已在 macos x 上进行了测试。他们可能需要为 linux 做更多的工作。

首先,通过 genymotion 应用程序正常启动 genymotion 模拟器。然后,从 Virtual box 获取它的 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

现在,您拥有从命令行启动 vm 快照并通过 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 可以在未来的版本中让这个前夜变得更容易。

于 2013-08-25T11:13:02.577 回答
2

我在 Ubuntu 上运行,我修改了 Snicolas 的答案并上传为 Gist: https ://gist.github.com/guneysus/410bb0e6b56d6f228555

主要区别在于:

  • 查找 IP 方法不适用于 Ubuntu。我带来了另一个解决方法
  • 在此文件中定义设备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 &

```

于 2014-12-14T11:03:05.360 回答
2

在发行版 GNU/Linux

这简单

 cd genymotion/

在这个文件夹中,你需要找到文件播放器

在此处输入图像描述

现在您需要设备名称

在此处输入图像描述

在您的终端中,编写此命令,将NameDevice替换为您的设备名称

 ./player --vm-name <NameDevice>

在此处输入图像描述

在此处输入图像描述

现在你的模拟器开始了

在此处输入图像描述

在 GNU/Linux 中,您可以在菜单中创建访问权限

在此处输入图像描述

在此处输入图像描述

祝你好运

于 2015-11-29T17:30:40.120 回答
1

感谢@ks 的回答,我能够在 Mac 上启动 Geny 运动模拟器,但我必须对 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

希望它可以帮助某人。

于 2017-09-27T05:46:10.607 回答
1

万一有人不知道environment variables,寻找非无头并使用 Windows,您可以通过在安装 VirtualBox 的位置运行以下命令来检查命令:

C:\Program Files\Oracle\VirtualBox list vms

然后,您可以使用以下内容运行所需的设备:

C:\Program Files\Genymobile\Genymotion\tools player --vm-name "Google Nexus 4"

当然,将路径放在您的环境变量上会是更好的方法。

于 2019-02-15T03:28:52.310 回答
-1

从命令行启动 genymotion 的命令 -

player --vm-name Nexus_4

如果玩家尚未添加到路径,请使用 ~/.bash_profile 中的以下命令将其添加到路径

export PATH=/Applications/Genymotion.app/Contents/MacOS/:$PATH

当连接多个设备时,使用“adb -s”将命令重定向到特定设备一旦模拟器运行,它们将列在 adb devices 下

例子:

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 
于 2014-04-05T06:33:59.380 回答