【问题标题】:Ambitious attempt at running android app on multiple emulators - can't stop emulators雄心勃勃地尝试在多个模拟器上运行 android 应用程序 - 无法停止模拟器
【发布时间】:2017-03-12 14:52:57
【问题描述】:

所以我想在我的笔记本电脑上使用一个 avd 测试我的 android 应用程序,但使用多个 config.ini 文件来更改 avd 本身的构成。

我创建了多个 avd,并将 config.ini 文件复制到一个单独的文件夹中。

我还写了一个 bash 脚本来

  • 循环浏览我的 config.ini 文件
  • 将它们一次复制到 avd 文件夹(覆盖最后一个)
  • 尝试停止任何当前正在运行的仿真器 (这是我的大问题)
  • 启动模拟器
  • 在上面运行我的测试(截屏)
  • adb 将屏幕截图拉到一个文件夹中
  • 从下一个ini文件重新开始

所以我的大部分工作都在工作,但我无法终生停止/启动/重新启动 avd。

我从各种 SO 问题中尝试了多种方法,包括但不限于

  • adb 鸸鹋杀
  • telnet 杀死
  • adb shell 停止
  • pgrep emulator -f(查找 pid)然后 kill -9 停止它

似乎没有什么能正常工作,没有锁定我的脚本,也没有留下一些剩余文件,这意味着我无法再次启动模拟器。

这似乎是在多个设备模拟器上运行我的应用程序而无需同时运行它们的好方法,这是我的笔记本电脑永远无法处理的事情(它可能在 3 个一次)

【问题讨论】:

  • 如果你先any_shell_command & 然后echo $! 你将获得最近放置在后台的作业的进程ID,无论是作为异步命令执行还是使用bg内置,所以如果你使用& 启动您的模拟器,然后您可以将它的 pid 保存在某处,然后再将其杀死
  • @pskink - 每当我杀死时,它通常会引导我在 avd 文件夹中使用 .lock 文件,这意味着我无法再次重新启动该模拟器
  • 试过不同的信号? (杀死 -l)
  • 但老实说,telnet 会话中的adb emu killkill 在这种情况下要好得多......他们还会留下 .lock 文件吗?
  • 他们没有,但是当我运行 adb devices 模拟器仍然列出时,它实际上并没有被删除,而且我认为实际的模拟器并没有在屏幕上关闭,它似乎只是崩溃,并且仍然可见,但工具栏的东西已经消失了。如果我查看 ps aux 似乎有某种模拟器崩溃解决程序正在运行,但它只是被锁定

标签: android bash android-emulator avd


【解决方案1】:

在 (linux) shell 上执行此操作:

adb shell su -c 'svc power shutdown' && echo "target has shut down"

或者您可能必须“扎根”地进行操作,如下所示: adb root && adb shell 'svc power shutdown' && echo "target has shut down"

它将关闭目标(在仿真中正确显示“系统关机”窗口),然后关闭仿真器窗口。没有留下陈旧的锁文件。

当然,在启动您的目标后,您必须等待直到目标正确启动并接受此类 adb shell 命令。

刚刚在模拟目标 android API 19 (kitkat) 上对其进行了测试 - 效果很好。

我希望它可以解决您为多个目标设置远程编写脚本的想法。

【讨论】:

  • 谢谢,我还没有机会测试,但会尽快尝试
  • 刚试过这个。它不能完全正常工作,由于某种原因,我无法让 su -c 工作。但是,如果我运行adb root && adb shell 'svc power shutdown' && echo "target has shut down",那么它可以完美运行。谢谢
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多