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.

