【问题标题】:How to execute ADB commands programmatically in Java on Mac OS for Android device如何在适用于 Android 设备的 Mac OS 上以 Java 编程方式执行 ADB 命令
【发布时间】:2018-05-31 09:00:48
【问题描述】:

大家! 我正在尝试使用 Appium、java、TestNG for Android 应用程序在真实设备上为我的测试框架编写监听器。 我想通过我的测试使用一些 ADB 命令,例如截屏、录制视频、获取 logcat 文件等。

所以我有: 苹果系统 Android 设备小米,Android 版本 7.0 亚行 安卓SDK 爪哇

如果我在终端中使用命令: adb exec-out screencap -p > /Users/dmytro/Documents/other/1.png - 屏幕截图成功保存在适当的文件夹中。在终端和我的 IntelijIDEA 的终端中手动键入的其他命令也可以正常工作。

如果我通过运行时类以编程方式使用相同的命令:

Runtime.getRuntime().exec(adb exec-out screencap -p > /Users/dmytro/Documents/other/1.png"); // Save screenshot to Mac machine

Runtime.getRuntime().exec("adb logcat > /Users/dmytromynziak/Documents/other/log.txt"); //Save logical file

Runtime.getRuntime().exec("db exec-out screencap -p > /sdcard/1.png"); // Save screenshot to scared of android device

它不起作用,屏幕截图没有保存到Mac机器上,甚至在android设备上也找不到。

我没有收到任何错误,看起来一切正常。查看调试模式的屏幕截图。

实际上,一些 adb 命令在 WIndows 操作系统上运行良好,但在 Mac 上却不行。

请帮我在java代码中执行ADB命令。

【问题讨论】:

  • 我尝试在脚本中使用 shell 执行另一个命令:Runtime.getRuntime().exec("adb shell screencap -p sdcard/sc1.png")。它有效!但屏幕保存到 android 设备中,所以我需要拉它。所以我认为问题是我尝试在终端中使用命令,但以编程方式我留在 android 设备中,所以需要使用 shell 脚本
  • 如果您从 Java 代码中执行 adb devices,您会得到任何输出吗?
  • @Domestus 是的,它显示了设备列表,所以我认为执行命令有问题

标签: java android adb appium appium-android


【解决方案1】:

adb 命令成功,但未按预期重定向到文件。使用 Java Runtime.getRuntime().exec(),用于重定向的 > 将不起作用。可以从这个 StackOverflow 问题中找到对此的解释:Runtime's exec() method is not redirecting the output

adb logcat 本身也有 -f 标志,它告诉进程写入文件,如本讨论所述:Catch LogCat programmatically or export it to file?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-24
    • 2013-08-14
    • 2012-08-13
    • 1970-01-01
    • 2021-09-09
    • 2013-01-26
    • 2013-12-29
    • 1970-01-01
    相关资源
    最近更新 更多