Android 如何编写genymotion emulator脚本以启动给定的无头avd?
有没有办法通过命令行启动给定的Android 如何编写genymotion emulator脚本以启动给定的无头avd?,android,command-line,genymotion,Android,Command Line,Genymotion,有没有办法通过命令行启动给定的avd,并通过adb进行注册 我也更愿意让模拟器无头启动 我正在寻找这个快速运行测试 这里有一个更好的程序。这将需要第一次手动启动,但之后,你会得到一个极快的genymotion,在几秒钟内启动。以下脚本已经在macos x上进行了测试。他们可能需要为linux做更多的工作 首先,通过genymotion应用程序正常启动genymotion emulator。 然后,从虚拟盒中获取其sha1: VBoxManage列表虚拟机 然后,从命令行对其进行快照: #scri
avd
,并通过adb
进行注册
我也更愿意让模拟器无头启动
我正在寻找这个快速运行测试 这里有一个更好的程序。这将需要第一次手动启动,但之后,你会得到一个极快的genymotion,在几秒钟内启动。以下脚本已经在macos x上进行了测试。他们可能需要为linux做更多的工作 首先,通过genymotion应用程序正常启动genymotion emulator。 然后,从虚拟盒中获取其sha1:
VBoxManage列表虚拟机
然后,从命令行对其进行快照:
#script genymotion-save.sh
VM=6a5d9245-b751-47aa-b38d-989c5f1a9cfb
echo "VM is \"$VM\""
VBoxManage snapshot $VM take snap1
然后,您可以使用此脚本检测其ip(其大部分复杂性来自mac地址转换):
现在,您可以从命令行启动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 &
这仍然需要编写大量脚本,但它工作良好,可以方便地控制GenyMoon仿真器
希望genymobile能在将来的版本中让这个eve变得更容易。对于其他寻求无头命令行启动的用户:
/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
从命令行启动genymotion的命令-
player --vm-name Nexus_4
如果尚未将播放器添加到路径,请在~/.bash_配置文件中使用下面的命令将其添加到路径
export PATH=/Applications/Genymotion.app/Contents/MacOS/:$PATH
当连接多个设备时,使用“adb-s”将命令重定向到特定设备
一旦emulator运行,它们将列在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
我在Ubuntu上运行,我修改并上传了Gist: 主要区别是:
- 查找IP方法在Ubuntu上不起作用。我是带着另一份工作来的
- 在
中定义了设备,并将此文件来源化以轻松选择VM:geny_devices.sh
cd genymotion/
在此文件夹中,您需要查找文件player
现在您需要设备名称
./player --vm-name <NameDevice>
在终端中,编写此命令,将设备名称替换为NameDevice
./player --vm-name <NameDevice>
/player——虚拟机名称
现在你的模拟器启动了
在GNU/Linux中,您可以在菜单中创建访问权限
祝你好运多亏了@k的回答,我才能够在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
希望它能对其他人有所帮助。如果有人不知道环境变量,请使用Windows查找无头和,您可以在安装VirtualBox的位置运行以下命令来检查这些命令:
C:\Program Files\Oracle\VirtualBox列表虚拟机
然后,您可以使用以下内容运行所需的设备:
C:\ProgramFiles\Genymobile\Genymotion\tools player--vm名称“Google Nexus 4”
当然,将路径放在环境变量上是更好的方法。这些脚本工作得很好(谢谢)。。。但是屏幕捕获会产生失真的图像(基于VBoxManage controlvm的捕获和基于adb shell/system/bin/screencap的捕获都会产生相同的失真图像)。这样启动虚拟机时,有没有办法让屏幕上的比例和元素正确显示?这是一个很好的问题。我猜geny mobile直到现在还没有真正考虑到这个用例。也许更好的解决方案是使用带有帧缓冲区显示的虚拟盒。我猜它可以更好地工作,因为它将是一个通用的X11 impl。我猜genymotion正在操纵来自virtual box的视频输出来显示它-我无法想象如何,但似乎没有通过命令行启动vm实例(无头或无头)以及获得与genymotion启动实例时生成的相同的显示输出。在VirtualBox、GenyMotion和Android设备之间尝试各种版本的组合,以防我遇到其他人都没有遇到但还没有运气的紧急情况。而不是检测ip脚本,您可以使用这个
VBoxManage guestproperty get'6a5d9245-b751-47aa-b38d-989c5f1a9cfb'androvm_ip_management
这将返回一个很好的ip,并且虚拟机名称周围的单引号将为您提供正确的值,即使您的虚拟机名称有空格。您可以选择将uuid留在那里。@Sojurn,您是否可以编写自己的answser并提供可重用的脚本?很好,您如何处理IP地址?您需要它才能将adb连接到genymotion。在genymotion设置中,确保设置了“Android SDK路径”,然后确保选中了“当虚拟设备启动时,自动将其连接到adb”。当使用genymotion player命令启动设备时,它将自动将其连接到adbh。您是如何获得player的参数名称的?没有什么可以让它无头运行的吗?我想他是从我的帖子上得到的;-)kill是一种过度的杀戮,“pkill播放器”就足够了。主要的问题是你在什么平台上运行它,这样你就可以找到Genymotion播放器的可执行性。它一点也不无头。
ps | grep "/Applications/Genymotion\.app/Contents/MacOS/player\.app/Contents/MacOS/player" | awk '{print$1}' | xargs kill