You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac端uiautomatorviewer截图失败:抛出java.lang.reflect.InvocationTargetException异常求助

解决Mac上uiautomatorviewer截图抛出java.lang.reflect.InvocationTargetException的问题

我之前在Mac上用uiautomatorviewer也碰到过一模一样的截图报错,折腾了好一阵才找到几个有效的解决办法,你可以按下面的步骤逐一排查:

  • 检查Android SDK环境变量与adb状态
    首先确保你的ANDROID_HOME和PATH配置正确,打开终端编辑你的shell配置文件(比如/.zshrc或/.bash_profile),添加或修改以下内容:

    export ANDROID_HOME=/Users/你的用户名/Library/Android/sdk
    export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$PATH
    

    执行source ~/.zshrc(对应你的shell文件)生效后,运行adb devices确认设备处于device状态,没有未授权提示。如果设备显示unauthorized,记得在手机上弹出的调试授权窗口点击允许。

  • 修改uiautomatorviewer启动脚本(关键修复)
    Mac上的uiautomatorviewer启动脚本存在AWT组件兼容性问题,这是导致InvocationTargetException的常见原因。找到脚本路径$ANDROID_HOME/tools/bin/uiautomatorviewer,用文本编辑器打开,找到JAVA_OPTS的配置行,修改为:

    JAVA_OPTS="-Xmx1600M -Djava.awt.headless=false -Dapple.awt.UIElement=false"
    

    保存后重启uiautomatorviewer,再尝试截图,这一步我亲测解决了大部分Mac上的截图异常。

  • 验证Java版本兼容性
    uiautomatorviewer对Java版本比较挑剔,高版本Java(11+)容易出现兼容性问题,建议切换到Java 8。运行java -version查看当前版本,如果是高版本,可以临时切换:

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
    

    要是经常需要切换Java版本,推荐用jenv工具来管理多版本,方便快捷。

  • 用adb手动截图排查设备端问题
    如果上面的步骤都没解决,先验证设备本身的截图功能是否正常:

    adb shell screencap -p /sdcard/screenshot.png
    adb pull /sdcard/screenshot.png ~/Desktop/
    

    要是这两步能成功生成截图,说明问题完全在uiautomatorviewer端,再回头检查脚本修改和Java版本;如果adb截图都失败,那得排查设备的开发者选项配置,比如是否开启了“USB调试(安全设置)”(Android 10+需要),或者重启设备重新授权调试。

内容的提问来源于stack exchange,提问作者John C.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:23:01