Flutter: 通过启动 Android 模拟器更好地处理 x86 / x86_64 问题

创建于 2018-03-02  ·  24评论  ·  资料来源: flutter/flutter

重现步骤

  • 在 IntelliJ 中启动项目
  • 在“设备选择器”中选择模拟器
  • 出现错误信息(右下)

替代方法

  • 打开安卓设备管理器
  • 启动模拟器
  • Android Monitor 识别模拟器并附加自身
  • “设备选择器”似乎没有更新上一个事件
  • 运行应用
  • 错误消息“未找到连接的设备”(尽管已附加 Android Monitor)

截图

flutter_error

flutter_2

注释

  • 如您所见,“颤振医生”没有问题
  • 已附加 Android 监视器
  • AVD 管理器可以启动模拟器,但“设备选择器”不能(恐慌消息)
  • 每次我为 IntelliJ 更新 Android 插件时都会发生这种情况

日志

使用flutter run运行您的应用程序并附加所有日志输出。

运行flutter analyze并附加该命令的任何输出。

λ flutter analyze
Running "flutter packages get" in fludder...
Analyzing D:\WORKSPACE\DART\fludder...
  error - The constructor returns type 'dynamic' that isn't of expected type 'Widget' at test\widget_test.dart:15:29 - strong_mode_invalid_cast_new_expr
  error - Undefined class 'MyApp' at test\widget_test.dart:15:33 - undefined_class
  hint - Unused import at test\widget_test.dart:10:8 - unused_import
3 issues found.
(Ran in 8.0s)

颤振医生

D:\
λ flutter doctor -v
[  +18 ms] [D:\flutter\] git rev-parse --abbrev-ref --symbolic @{u}
[ +131 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] origin/alpha
[        ] [D:\flutter\] git rev-parse --abbrev-ref HEAD
[  +87 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] alpha
[        ] [D:\flutter\] git ls-remote --get-url origin
[  +88 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[        ] [D:\flutter\] git log -n 1 --pretty=format:%H
[  +88 ms] Exit code 0 from: git log -n 1 --pretty=format:%H
[        ] 553fc4264e5c3bd85531e73fb7d89bdfab0fa3ec
[        ] [D:\flutter\] git log -n 1 --pretty=format:%ar
[  +74 ms] Exit code 0 from: git log -n 1 --pretty=format:%ar
[        ] 15 hours ago
[   +1 ms] [D:\flutter\] git describe --match v*.*.* --first-parent --long --tags
[ +173 ms] Exit code 0 from: git describe --match v*.*.* --first-parent --long --tags
[        ] v0.0.21-1-g553fc4264
[ +783 ms] [√] Flutter (on Microsoft Windows [Version 10.0.16299.248], locale de-CH, channel alpha)
[        ]     • Flutter version 0.0.22-pre.1 at D:\flutter
[        ]     • Framework revision 553fc4264e (15 hours ago), 2018-03-01 09:30:25 -0800
[        ]     • Engine revision 6921873c71
[        ]     • Tools Dart version 2.0.0-dev.16.0
[        ]     • Engine Dart version 2.0.0-edge.da1f52592ef73fe3afa485385cb995b9aec0181a
[ +123 ms] java -version
[  +95 ms] [√] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[        ]     • Android SDK at C:\Users\ecoissy\AppData\Local\Android\sdk
[        ]     • Android NDK location not configured (optional; useful for native profiling support)
[        ]     • Platform android-27, build-tools 27.0.3
[        ]     • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
[        ]     • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)
[   +1 ms] [√] Android Studio (version 3.0)
[        ]     • Android Studio at C:\Program Files\Android\Android Studio
[        ]     • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)
[ +103 ms] [√] IntelliJ IDEA Ultimate Edition (version 2017.3)
[        ]     • Flutter plugin version 22.2.2
[        ]     • Dart plugin version 173.4548.30
[   +7 ms] C:\Users\ecoissy\AppData\Local\Android\sdk\platform-tools\adb devices -l
[+4181 ms] Exit code 0 from: C:\Users\ecoissy\AppData\Local\Android\sdk\platform-tools\adb devices -l
[        ] List of devices attached
[  +21 ms] C:\Users\ecoissy\AppData\Local\Android\sdk\platform-tools\adb devices -l
[ +118 ms] List of devices attached
[        ] [-] Connected devices
[        ]     • None
[  +16 ms] "flutter doctor" took 5’291ms.
[ +258 ms] ensureAnalyticsSent: 254ms
[   +5 ms] exiting with code 0

有关诊断和报告 Flutter 错误的更多信息,请参阅https://flutter.io/bug-reports/

platform-android

最有用的评论

这就是我在 Windows 10 上解决此问题的方法,在那里我遇到了相同的错误。
安装的组件:
颤振 1.5(测试版)
Android Studio 3.0.1(64 位)
IntelliJ Ultimate 2017.3.4
Java JDK 1.8.0_61(仅限 64 位)
环境:
%ANDROID_HOME%
C:用户\\AppData\Local\Android\Sdk

%ANDROID_SDK_ROOT%
C:用户\\AppData\Local\Android\Sdk

%path% 按以下顺序包含这些:
C:用户\\AppData\Local\Android\Sdk\emulator
C:用户\\AppData\Local\Android\Sdk\emulator\bin
C:用户\\AppData\Local\Android\Sdk\platform-tools
C:用户\\AppData\Local\Android\Sdk\tools
C:用户\\AppData\Local\Android\Sdk\tools\bin
C:用户\\AppData\Local\flutter\bin
C:用户\\AppData\Local\dart-sdk

我猜想,因为我所有组件都是 x64,所以 IntelliJ 可能会遇到问题,因为 Android Studio 中的开箱即用配置的虚拟设备是 x86 而不是 x86_64。

我的解决方案是:

  • 打开安卓工作室
  • 打开 AVD 管理器表单工具 > Android
  • 编辑现有基于 x86 的设备的配置,以代替我们 x86_64 类型的 API。
  • 保存并退出。
  • 打开 IntelliJ,现在这些设备设置 x86_64 类型工作。

AVD 1
AVD 2
AVD 3
AVD 4
AVD 5

所有24条评论

看起来您使用的是旧的 Flutter 版本。
此版本经常导致flutter upgrade未更新的问题。
最新版本是Flutter 0.1.7

@zoechi
哦,这是否意味着我必须手动安装flutter? 在遇到这个问题之前,我做了flutter upgrade

我总是建议只清除颤振安装并重新安装。
git reset --hard和可能还有其他命令还有其他方法,但我从未涉足该路径。 只需指向安装说明网页,就可以更简单地解释重新安装;-)

我已经删除了我的本地仓库并重新结帐。

它现在有效......但只能使用以下方法:

  • 使用 AVD Manager 启动设备
  • 运行flutter doctor以验证 flutter 是否启动了模拟器
  • 运行flutter run

IntelliJ 中的设备选择器仍然会带来 PANIC 错误消息。 从 IntelliJ 运行项目仍然会产生“未找到连接的设备”,尽管我有一个模拟器正在运行。

λ flutter --version Flutter 0.1.5 • channel beta • https://github.com/flutter/flutter.git Framework • revision 3ea4d06340 (8 days ago) • 2018-02-22 11:12:39 -0800 Engine • revision ead227f118 Tools • Dart 2.0.0-dev.28.0.flutter-0b4f01f759

我现在有Flutter 0.1.5

您是否尝试过重新启动 IntelliJ(只是为了确定)?

是的,我在重新结帐后做了很多事情

  • 使缓存无效并重新启动
  • 删除旧模拟器
  • 在 AVD 管理器中添加了新的
  • 重新分配Android SDK

所有这些都无助于避免 PANIC 错误消息。

我没有想法了。 您能否添加确切的错误消息。 上面没找到啊

D:\不是网络驱动器吗?

D:\是本地驱动器。
确切的错误消息在第一个屏幕截图(右下角)中。

抄送@devoncarew

@geekrumper ,看起来来自 Android 插件的 Android Monitor 工具在执行您的模拟器映像时遇到了问题。 我会尝试创建一个新的(您可能也想删除旧的)。 我不认为这是 flutter intellij 工具本身的问题,而是更多的本地配置问题,所以我关闭了。 感谢报告!

我在 Android Studio 中看到了同样的错误。 我可以从 AVD 管理器手动启动 AVD,但是当我在工具栏(“Flutter 设备选择”)中选择它时,我看到了上述错误。 我已经删除了设备并重新创建了它。

我收到同样的错误。
我在 Windows 10 上全新安装了 flutter。
新安装的 Android Studio。
我可以在 Android 中打开设备模拟​​器,但不能在 Flutter 中打开,出现错误
“打开模拟器时出错:恐慌:缺少‘x86’CPU 的模拟器引擎程序。”

这就是我在 Windows 10 上解决此问题的方法,在那里我遇到了相同的错误。
安装的组件:
颤振 1.5(测试版)
Android Studio 3.0.1(64 位)
IntelliJ Ultimate 2017.3.4
Java JDK 1.8.0_61(仅限 64 位)
环境:
%ANDROID_HOME%
C:用户\\AppData\Local\Android\Sdk

%ANDROID_SDK_ROOT%
C:用户\\AppData\Local\Android\Sdk

%path% 按以下顺序包含这些:
C:用户\\AppData\Local\Android\Sdk\emulator
C:用户\\AppData\Local\Android\Sdk\emulator\bin
C:用户\\AppData\Local\Android\Sdk\platform-tools
C:用户\\AppData\Local\Android\Sdk\tools
C:用户\\AppData\Local\Android\Sdk\tools\bin
C:用户\\AppData\Local\flutter\bin
C:用户\\AppData\Local\dart-sdk

我猜想,因为我所有组件都是 x64,所以 IntelliJ 可能会遇到问题,因为 Android Studio 中的开箱即用配置的虚拟设备是 x86 而不是 x86_64。

我的解决方案是:

  • 打开安卓工作室
  • 打开 AVD 管理器表单工具 > Android
  • 编辑现有基于 x86 的设备的配置,以代替我们 x86_64 类型的 API。
  • 保存并退出。
  • 打开 IntelliJ,现在这些设备设置 x86_64 类型工作。

AVD 1
AVD 2
AVD 3
AVD 4
AVD 5

@devoncarew请参考我之前的评论之一:

是的,我在重新结帐后做了很多事情

  • 使缓存无效并重新启动
  • 删除旧模拟器
  • 在 AVD 管理器中添加了新的
  • 重新分配Android SDK
    所有这些都无助于避免 PANIC 错误消息。

删除并创建新的模拟器并不能解决问题。 因此,这个问题应该重新打开。

事实上,我什至在新安装的机器(OS、IDEA、Android Studio、Sdk、flutter)上收到了这条消息......

@cyanfr
那里有很大的投入。 我能够通过“设备选择器”启动模拟器(x86_64)而没有任何问题。 尽管如此,IntelliJ 似乎并没有接受它,这意味着我无法使用 IntelliJ 的运行命令 (Shift-F10)。

这导致了替代的工作流程

  • 通过在终端中运行颤振
  • 在编辑器中更改源代码
  • 聚焦回终端并点击“r”进行热重载

@devoncarew
如果 AVD 管理器可以毫无问题地启动图像,为什么这应该是图像问题?

flutter_panic

尝试使用 Nexus 5x API 27 X86 配置运行它时,我看到了同样的问题。 我从 Intellij 创建了一个新的虚拟设备,工具 > Android > AVD 管理器。 Pixel XL API 27,我在新虚拟设备上不再出现此错误。

screenshot from 2018-03-17 10-46-49

peek 2018-03-17 11-00

更新:
事实证明,在我在 Android/SDK/tools 中运行ln -s emulator64-x86 emulator-x86_64之后。 所有新的虚拟设备都可以工作。 我只需要删除上面提到的虚拟设备,因为它是在运行此命令之前创建的。

我在 Ubuntu 17.10

大家好,
我感谢社区的努力,并能够收集到一些有用的信息:

  • 确保删除(删除)预定义的模拟器,这主要会导致错误
  • 为模拟器使用适当的系统类型,例如“x86_64”,如果您使用带有 IntelliJ 的 64 位操作系统
  • 给你的新模拟器一个简单的名字,因为你将从终端启动它(例如“nexus”)
  • 使用 Android 工具中的“模拟器”命令在终端中启动模拟器
    %ANDROID_HOME%\tools\emulator -avd %EMULATOR_NAME%
  • 启动模拟器后,确保“设备选择器”已选择正在运行的模拟器
  • Shift-F10运行或Shift-F9调试
  • 玩得开心!!!

flutter_workflow

@geekrumper (以及@abarrafo和@cyanfr),非常感谢您的分析和总结! 非常有用,可能是很多人都遇到的问题。

我在我的 android sdk 工具目录中只看到emulator一份副本(我在 mac 上)。 从上面的注释看来,至少 windows 有 linux 有两个变体(emulator64-x86、emulator-x86_64),也许还有 windows。

@devoncarew我发现还有一些似乎有帮助的东西。 详细信息,以防其他人偶然发现此线程,他们可能会有所帮助。

  1. 修改了我上面的内容并添加了以下全局环境变量...

添加到路径:
C:Users\my_user\AppData\Local\flutter\bin
C:Users\my_user\AppData\Local\Android\Sdk\platform-tools
C:Users\my_user\AppData\Local\Android\Sdk\tools
C:Users\my_user\AppData\Local\Android\Sdk\tools\bin

新环境变量:
ANDROID_AVD_HOME:C:Users\my_user.android\avd
ANDROID_EMULATOR_HOME:C:Users\my_user.android
ANDROID_SDK_ROOT: C:Users\my_user\AppData\Local\Android\Sdk

  1. 下一点似乎有更大的不同
    .
    我注意到 IntelliJ 似乎没有接收到全局变量。
    因此,在 IntelliJ 的通用设置中,我添加了以下三个与系统环境中相同的变量。
    generic settings 1
    generic settings 2

然后在特定的项目结构设置中,我设置了 JDK SDK loc 和 Android SDK loc,因为这些似乎没有以任何其他方式获取。 像这样...
project specific settings 1
project specific settings 2

在此之后,至少在我只有 64 位应用程序的 Windows 10 机器上,AVD 图像开始工作。
这是@geekrumper所说的新鲜的,而不是默认的。

尽管我确实从 Android Studio 中获得了新像素 2 xl 图像的设置。

有趣的是,在进行这些更改后,我可以同时打开 x86_64 和 x86 位 AVD 图像。
现在这永远不是来自那个小下拉菜单。 这是通过启动 AVD 管理器并从那里启动图像。

所以不是从这里(它总是产生错误):
image start 1

但是从这里开始,我会选择一个图像并开始它:
image start 1

然后一旦图像启动,它就可以与 IntelliJ 很好地交互。

然后在项目结构的特定设置中,我检查并添加了以下内容。
JDK 路径和 Android SDK 路径。 首先是JDK,然后是Android SDK。

就其价值而言,我在 Ubuntu 18.04 中遇到了同样的问题,并且通过执行@cyanfr提到的操作解决了这个

如果需要,可以提供更多信息。

仅供参考@DanTup最近添加了flutter emulators命令并且可能对此感兴趣。

我认为这可能是对https://github.com/flutter/flutter-intellij/issues/2351的欺骗?

SDK 中有两个模拟器二进制文件,IntelliJ 曾经使用旧的二进制文件(但最近在 https://github.com/flutter/flutter-intellij/pull/2383 中进行了更改),这会给出此 PANIC 消息。 对于flutter emulators --launch如果存在,我们使用新的,否则返回旧的。

所以,我很想知道是否有人遇到这个问题仍然在命令行中使用flutter emulators --launch看到它。 如果没有,那么我认为这个案例可以作为上述内容的欺骗而结束。 如果有人可以,那么我们需要做更多的挖掘。

作为颤振/颤振智能的 dup 关闭#2351
如果您仍然看到此问题,请告诉我们。

此页面是否有帮助?
0 / 5 - 0 等级