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

MacOS下Flutter集成测试调用dart:io执行adb命令报Permission denied错误

原因分析
  • Mac系统下,Android Studio启动测试进程时加载的环境变量和终端用户自定义的环境变量不一致,默认没有包含Android SDK platform-tools的目录到PATH中,导致测试进程调用adb命令时找不到可执行文件,抛出权限错误。
  • 直接在终端执行adb命令时读取的是当前用户的完整环境变量,已经配置了adb路径,所以可以正常执行。
解决方案

方案1:指定adb绝对路径(最稳妥)

  1. 先在终端执行命令获取adb的完整路径:
    which adb
    返回结果示例:/Users/your_username/Library/Android/sdk/platform-tools/adb
  2. 将完整路径替换掉代码中的adb参数即可,修改后的代码示例:
void main() {
  group('Testing full app flow', () {
    IntegrationTestWidgetsFlutterBinding.ensureInitialized();

    setUpAll(() async {
      // 替换为你本地which adb返回的完整路径
      await Process.run('/Users/your_username/Library/Android/sdk/platform-tools/adb' , ['shell' ,'pm', 'grant', 'com.MYSERVICE', 'android.permission.ACCESS_FINE_LOCATION']); 
    });

    testWidgets('test the password input on real device/emulator', (tester) async {
     //TESTS
    });
  });
}

方案2:动态传入环境变量

如果不想写死路径,可以在调用Process.run时手动把adb所在目录加入运行环境的PATH中:

import 'dart:io';

// 省略其他代码
setUpAll(() async {
  await Process.run(
    'adb',
    ['shell' ,'pm', 'grant', 'com.MYSERVICE', 'android.permission.ACCESS_FINE_LOCATION'],
    environment: {
      // 追加adb所在目录到PATH,替换为你本地的platform-tools路径
      'PATH': '${Platform.environment['PATH']}:/Users/your_username/Library/Android/sdk/platform-tools',
    },
  );
});

其他排查方案

如果以上操作后仍报错,给adb文件添加执行权限即可:
chmod +x /Users/your_username/Library/Android/sdk/platform-tools/adb

内容的提问来源于stack exchange,提问作者lou habert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:54:03