Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何编写genymotion emulator脚本以启动给定的无头avd?_Android_Command Line_Genymotion - Fatal编程技术网

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上不起作用。我是带着另一份工作来的
  • geny_devices.sh
    中定义了设备,并将此文件来源化以轻松选择VM:
```

```

在发行版GNU/Linux中

这很容易

 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