MacOS下Flutter集成测试中Process.run无法找到adb的问题求助
Flutter集成测试setUp中调用adb报错的解决建议
以下是针对你遇到的ProcessException: No such file or directory错误的具体解决步骤:
确认运行环境的PATH变量
Flutter驱动进程的环境变量可能和你手动操作的终端不一致,先在setUp中打印当前环境的PATH和adb的定位结果,排查路径问题:setUp(() async { // 打印当前PATH final pathResult = await Process.run('echo', ['\$PATH'], runInShell: true); print('Current runtime PATH: ${pathResult.stdout}'); // 定位adb的实际路径 final whichResult = await Process.run('which', ['adb'], runInShell: true); print('adb path from which: ${whichResult.stdout.trim()}'); });如果
which adb返回空,说明当前环境没包含adb路径,可通过homebrew获取正确的安装路径:final brewPrefix = await Process.run('brew', ['--prefix', 'android-platform-tools']); final adbPath = '${brewPrefix.stdout.trim()}/bin/adb'; // 使用该路径执行adb命令 final permissionResult = await Process.run(adbPath, ['shell', 'pm grant com.your.package android.permission.YOUR_PERMISSION']);启用shell运行模式
直接调用adb时可能缺少shell环境的支持,尝试开启runInShell参数:await Process.run('adb', ['shell', 'pm grant com.your.package android.permission.YOUR_PERMISSION'], runInShell: true);或者指定shell执行完整命令(以zsh为例):
await Process.run('/bin/zsh', ['-c', 'adb shell pm grant com.your.package android.permission.YOUR_PERMISSION']);验证adb路径的有效性
手动确认homebrew安装的adb路径是否正确,在终端执行:brew list android-platform-tools查看输出中是否包含
/opt/homebrew/bin/adb,若路径不符,直接使用终端输出的正确路径调用。检查IDE运行环境的差异
如果你在IDE(如Android Studio/VS Code)中运行测试,IDE的终端环境可能和系统终端的PATH不同。先在IDE的终端中执行which adb获取路径,再在测试代码中使用该路径;或者在IDE的环境变量设置中,将adb所在目录(如/opt/homebrew/bin)添加到PATH。确认adb的执行权限
虽然homebrew安装的adb默认有执行权限,但可手动确认并修复:chmod +x /opt/homebrew/bin/adb
内容的提问来源于stack exchange,提问作者CODERjack
相关产品推荐
相关产品推荐

