You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Google Project IDX中Flutter安卓模拟器运行报错求助

在Google Project IDX运行Flutter安卓应用时设备匹配错误的解决办法

问题详情

使用Google Project IDX部署Flutter应用到安卓模拟器时,持续报错:

No supported devices found with name or id matching 'localhost:5555'

已尝试执行adb kill-server重启连接、创建新项目/工作空间,问题仍未解决。当前使用的Nix配置如下:

{ pkgs, ... }: {
  # Which nixpkgs channel to use.
  channel = "stable-23.11"; # or "unstable"
  # Use https://search.nixos.org/packages to find packages
  packages = [
    pkgs.jdk17
    pkgs.unzip
  ];
  # Sets environment variables in the workspace
  env = {};
  idx = {
    # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
    extensions = [
      "Dart-Code.flutter"
      "Dart-Code.dart-code"
    ];
    workspace = {
      # Runs when a workspace is first created with this `dev.nix` file
      onCreate = {
        build-flutter = ''
          cd /home/user/myapp/android

          ./gradlew \
            --parallel \
            -Pverbose=true \
            -Ptarget-platform=android-x86 \
            -Ptarget=/home/user/myapp/lib/main.dart \
            -Pbase-application-name=android.app.Application \
            -Pdart-defines=RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC85NzU1MDkwN2I3MGY0ZjNiMzI4YjZjMTYwMGRmMjFmYWMxYTE4ODlhLw== \
            -Pdart-obfuscation=false \
            -Ptrack-widget-creation=true \
            -Ptree-shake-icons=false \
            -Pfilesystem-scheme=org-dartlang-root \
            assembleDebug

          # TODO: Execute web build in debug mode.
          # flutter run does this transparently either way
          # https://github.com/flutter/flutter/issues/96283#issuecomment-1144750411
          # flutter build web --profile --dart-define=Dart2jsOptimization=O0 

          adb -s localhost:5555 wait-for-device
        '';
      };
      
      # To run something each time the workspace is (re)started, use the `onStart` hook
    };
    # Enable previews and customize configuration
    previews = {
      enable = true;
      previews = {
        web = {
          command = ["flutter" "run" "--machine" "-d" "web-server" "--web-hostname" "0.0.0.0" "--web-port" "$PORT"];
          manager = "flutter";
        };
        android = {
          command = ["flutter" "run" "--machine" "-d" "android" "-d" "localhost:5555"];
          manager = "flutter";
        };
      };
    };
  };
}

问题原因

  1. 配置中硬编码了设备IDlocalhost:5555,但Project IDX的安卓模拟器实际设备标识可能不同,导致Flutter无法匹配到设备
  2. 缺失安卓SDK相关依赖,adb工具无法正常识别模拟器设备
  3. 重复指定设备参数(-d android-d localhost:5555)可能导致冲突

解决步骤

步骤一:修改Nix配置,移除硬编码设备ID

调整两处配置,让Flutter自动识别可用的安卓设备:

  1. onCreate中的adb -s localhost:5555 wait-for-device改为adb wait-for-device(等待任意已连接设备)
  2. previews.android的命令改为["flutter" "run" "--machine" "-d" "android"](仅指定设备类型,无需硬编码ID)
  3. packages中添加pkgs.android-sdk,确保adb和模拟器依赖完整

修改后的配置如下:

{ pkgs, ... }: {
  channel = "stable-23.11";
  packages = [
    pkgs.jdk17
    pkgs.unzip
    pkgs.android-sdk  # 添加安卓SDK依赖
  ];
  env = {};
  idx = {
    extensions = [
      "Dart-Code.flutter"
      "Dart-Code.dart-code"
    ];
    workspace = {
      onCreate = {
        build-flutter = ''
          cd /home/user/myapp/android

          ./gradlew \
            --parallel \
            -Pverbose=true \
            -Ptarget-platform=android-x86 \
            -Ptarget=/home/user/myapp/lib/main.dart \
            -Pbase-application-name=android.app.Application \
            -Pdart-defines=RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC85NzU1MDkwN2I3MGY0ZjNiMzI4YjZjMTYwMGRmMjFmYWMxYTE4ODlhLw== \
            -Pdart-obfuscation=false \
            -Ptrack-widget-creation=true \
            -Ptree-shake-icons=false \
            -Pfilesystem-scheme=org-dartlang-root \
            assembleDebug

          adb wait-for-device  # 移除硬编码设备ID
        '';
      };
    };
    previews = {
      enable = true;
      previews = {
        web = {
          command = ["flutter" "run" "--machine" "-d" "web-server" "--web-hostname" "0.0.0.0" "--web-port" "$PORT"];
          manager = "flutter";
        };
        android = {
          command = ["flutter" "run" "--machine" "-d" "android"];  # 移除重复的设备ID指定
          manager = "flutter";
        };
      };
    };
  };
}

步骤二:验证设备连接状态

修改配置后重启工作空间,在终端执行以下命令确认设备是否被识别:

  1. 执行adb devices,查看当前连接的设备列表
  2. 执行flutter devices,确认Flutter能检测到安卓模拟器

如果adb devices无设备输出,检查IDX是否已启动安卓模拟器,或者添加pkgs.emulatorpackages中确保模拟器组件完整。

步骤三:手动指定正确设备ID(可选)

如果adb devices输出了具体的设备ID(如emulator-5554),可以将配置中的localhost:5555替换为该ID,确保精准匹配。

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

火山引擎 最新活动