如何编写genymotion模拟器脚本来启动给定的avd,无头?

Sni*_*las 29 command-line android genymotion

是否有任何方法可以通过命令行启动并通过命令avd注册adb

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

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

k s*_*k s 39

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

/Applications/Genymotion.app/Contents/MacOS/player --vm-name "xxxx"
Run Code Online (Sandbox Code Playgroud)

获取vms列表:

$ VBoxManage list vms
"Galaxy Nexus - 4.2.2 - API 17 - 720x1280" {56d8e3aa-ecf8-483e-a450-86c8cdcedd35}
Run Code Online (Sandbox Code Playgroud)

其中xxxx可以是name或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"
Run Code Online (Sandbox Code Playgroud)

你可以用正常的进程kill杀死它:

ps | grep "Genymotion\.app/Contents/MacOS/player" | awk '{print $1}' | xargs kill
Run Code Online (Sandbox Code Playgroud)

  • 杀人是矫枉过正,"pkill球员"就足够了. (2认同)

Sni*_*las 15

这是一个更好的程序.这将需要第一次手动启动,但之后,你将获得一个快速的genymotion,几秒钟内.以下脚本已在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 
Run Code Online (Sandbox Code Playgroud)

然后你可以使用这个脚本检测它的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
Run Code Online (Sandbox Code Playgroud)

现在,您已经拥有从命令行启动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
Run Code Online (Sandbox Code Playgroud)

最后,您还可以使用脚本正确关闭模拟器:

#script genymotion-stop.sh 
IP=`./genymotion-detect-ip.sh`

adb root
adb connect $IP:5555
adb shell reboot -p &
Run Code Online (Sandbox Code Playgroud)

这仍然是很多脚本,但它工作正常,并以一种方便的方式控制genymotion模拟器.

让我们希望genymobile可以在以后的版本中使这个前夕更容易.