Flutter 的 main.dart 文件在 Android Studio 中执行时卡在“将文件同步到为 x86 64 构建的设备 Android SDK ...”

Posted

技术标签:

【中文标题】Flutter 的 main.dart 文件在 Android Studio 中执行时卡在“将文件同步到为 x86 64 构建的设备 Android SDK ...”【英文标题】:Flutter's main.dart file gets stuck at "Syncing files to device Android SDK built for x86 64..." at execution in Android Studio 【发布时间】:2020-05-14 06:40:27 【问题描述】:

我正在 android Studio 上尝试我的第一个颤振代码,并在模拟器上显示它。 我确实得到了输出,但编译永远不会结束,这意味着我不能热重启我的代码。我正在学习的教程没有遇到这个问题。

EDIT:出现了一些新错误。它开始挂在“Installing build\app\outputs\apk\app.apk”,我解决了这个问题,现在它显示了这个。 它是间歇性的,跳帧和线路互换,但或多或​​少问题仍然存在。请帮助我为解决它而发疯:)

出现如下代码:

Launching lib\main.dart on Android SDK built for x86 64 in debug mode...
Running Gradle task 'assembleDebug'...
√ Built build\app\outputs\apk\debug\app-debug.apk.
Syncing files to device Android SDK built for x86 64...
I/Choreographer( 5985): Skipped 61 frames!  The application may be doing too much work on its main thread.
D/EGL_emulation( 5985): eglMakeCurrent: 0x7e7ece03e300: ver 3 0 (tinfo 0x7e7ece1a85e0)
I/OpenGLRenderer( 5985): Davey! duration=1554ms; Flags=1, IntendedVsync=1503595359014, Vsync=1504612025640, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=1504619561700, AnimationStart=1504619633200, PerformTraversalsStart=1504619653300, DrawStart=1504626010200, SyncQueued=1504626824700, SyncStart=1504630541800, IssueDrawCommandsStart=1504630721200, SwapBuffers=1504690106800, FrameCompleted=1505153649500, DequeueBufferDuration=49170000, QueueBufferDuration=2336000, 
D/EGL_emulation( 5985): eglMakeCurrent: 0x7e7ecc6fa7e0: ver 3 0 (tinfo 0x7e7ecc62baa0)
Syncing files to device Android SDK built for x86 64...

【问题讨论】:

您知道任何解决方法吗? 我正在使用“调试”选项来运行我的代码。看起来很正常,StatelessWidget 类也让我的代码没有热重启。 这个解决方案对我有用....***.com/a/61151567/3888834 【参考方案1】:

嗯,在 Linux 上,这似乎是因为内核 5.5 中的一些变化。我测试了多次,我确信 - 在内核 5.4 上它可以工作,但在内核 5.5 上重构挂起并且调试也不起作用。

这很奇怪,我不知道与内核有什么关系(重构?wtf?),我怀疑 filsestem 处理中的一些变化可能会导致这种情况?需要向 InteliJ 或 Flutter 创建错误报告并告诉他们新内核导致问题。

同样奇怪的是,在使用 Android Studio 在 Java/Kotlin 中开发时,我没有任何问题,重构和调试都可以正常工作。所以这肯定和Flutter有关。

所以,在 Linux 上,现在需要将内核降级到 5.4(不知道 Mac 或 Win)。

【讨论】:

在 Windows 上工作。我一直设法在我的 AVD 上以调试模式运行它。虽然热重载暂时解决了我的问题,但我不知道为什么或如何。 你在哪个发行版上? Arch 上也有同样的问题。今天早上升级到内核 5.5 然后颤振卡在同步文件上。我在颤振稳定,也试过大师,问题仍然存在。将内核降级到 5.4 现在它又可以工作了.. Debian。但发行版并不重要,重要的是内核版本 调整了一些东西,如果你能解决这个问题,请告诉我,顺便说一句,在 Android Studio 上工作。 @user1209216 你无法解决这个问题,要么降级内核,要么在 Flutter 那边等待修复【参考方案2】:

当我没有连接到网络时遇到了这个问题。我是第一次运行该项目。所以检查你的互联网并重新启动应用程序几次它会运行得很快

【讨论】:

我的互联网连接正常,似乎无法解决。【参考方案3】:

我在 linux5.5 内核上遇到了完全相同的问题。

inxi

CPU: Quad Core AMD Ryzen 3 PRO 3300U w/ Radeon Vega Mobile Gfx (-MCP-) 
speed/max: 1397/1400 MHz Kernel: 5.5.2-1-MANJARO x86_64 Up: 1d 4h 05m 
Mem: 12541.8/22014.1 MiB (57.0%) Storage: 476.94 GiB (15.3% used) Procs: 332 
Shell: fish 3.0.2 inxi: 3.0.37

颤抖的医生

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.12.13+hotfix.8, on Linux, locale en_US.UTF-8)

[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] Android Studio (version 3.5)
[✓] Connected device (1 available)

• No issues found!

【讨论】:

【参考方案4】:

只同意user1209216。

使用 Visual Studio,在使用 kernel-5.5.8-200.fc31 时,执行卡在“将文件同步到设备”上。

我已降级到 kernel-5.3.7-301.fc31,并且能够在模拟器和物理设备上启动 Flutter 应用。

另见:https://github.com/flutter/flutter/issues/

您可以降级到以前的内核,直到新版本的 Flutter 在稳定通道上发布,或者运行 flutter channel master

有关 Flutter 如何构建其发布渠道的更多信息:https://github.com/flutter/flutter/wiki/Flutter-build-release-channels

【讨论】:

【参考方案5】:

将此语句放在 main 函数的开头。

WidgetsFlutterBinding.ensureInitialized();

然后重新启动应用程序。

【讨论】:

【参考方案6】:

我今天也遇到了同样的情况,花了几个小时才找到解决办法,很简单。

我基本上是开始构建一个循环,然后因为其他事情而分心,然后忘记删除它。

那么是什么导致我的“将文件同步到设备”没有完成,并且我的初始页面冻结了,就是这个。我的 Home initState 中有一个无限循环。

【讨论】:

【参考方案7】:

我在 Linux 内核 (5.11) 上运行的 Fedora 中遇到了同样的错误。我尝试了几件事,但没有任何效果。需要 2-3 次强制重启才能完成构建。

我将模拟器 API 从 API 级别 30 (x86) 降级到 API 级别 28 (x86_64) 现在它可以在我的机器上无缝运行。构建一个小应用程序只需要 1 分钟左右。因此,如果没有任何效果,您可以尝试降级模拟器的 API 级别。

【讨论】:

以上是关于Flutter 的 main.dart 文件在 Android Studio 中执行时卡在“将文件同步到为 x86 64 构建的设备 Android SDK ...”的主要内容,如果未能解决你的问题,请参考以下文章

自动完成/智能感知不适用于 VSCode 中的 dart/flutter

如何从除 main.dart 之外的其他文件中获取参考

[Flutter] lib/main.dart:1: Warning: Interpreting this as package URI, 'package:flutter_app/main.

flutter-搜索条

Flutter:是不是可以在 main.dart 中实现一次快餐栏,例如,当连接状态发生变化时,用于所有屏幕

只导入一次flutter库或dart库