16

Dart SDK 正式支持 ARM64,截至目前,2.14.2是支持 ARM64 的最新(稳定)Dart SDK。虽然它与我的 Flutter 设置中捆绑的版本相同,但它似乎在 Intel 架构上运行(活动监视器显示在 Intel 上运行的 dart 进程)。

我手动尝试在我的颤振安装中替换 dart SDK,替换为从dart.dev archiveflutter-directory/bin/cache/dart-sdk/下载的为 ARM64 制作的 Dart SDK 的 zip 文件的内容。但是尝试在 Android 模拟器上运行应用程序(在 ARM64 上运行并且正在使用我的旧 Flutter 设置),会引发此错误:

Launching lib/main.dart on sdk gphone64 arm64 in debug mode...
lib/main.dart:1
Snapshot not compatible with the current VM configuration: the snapshot requires 'release no-code_comments
no-dwarf_stack_traces_mode lazy_async_stacks lazy_dispatchers 
use_bare_instructions no-dedup_instructions
no-"asserts" "use_field_guards" "use_osr" x64-sysv no-null-safety' but the VM has 'release no-code_comments no-
dwarf_stack_traces_mode lazy_async_stacks 
lazy_dispatchers use_bare_instructions no-dedup_instructions no-"asserts" "use_field_guards" "use_osr" arm64-sysv no-null-safety'
2
the Dart compiler exited unexpectedly.

有没有其他方法可以在 M1 设备上进行完全 ARM64 Flutter 设置?

颤振版本 2.5.1

飞镖版本 2.14.2

设备:MacBook Air(M1,2020)

4

3 回答 3

26

更新:如果您使用主通道,flutter 将为您下载 ARM SDK

在 M1 上,因为flutter-2.11-candidate.7Flutter 默认附带 ARM SDK。



老答案:

  1. 直接从 dart.dev 下载 dart sdk:https ://dart.dev/get-dart/archive - 解压后会看到一个dart-sdk文件夹
  2. 转到您的颤振安装根目录,然后输入以下路径:flutter-sdk-root/bin/cache
  3. dart-sdk用你下载的替换上一步

现在,这部分很老套,所以我不能保证它会一直有效。

如果您现在尝试运行该应用程序,dart 编译器将会崩溃。

使用flutter run -v(启用详细模式,以获得更多日志)并感谢一些谷歌查找,我能够找出问题是由frontend_server.dart.snapshot位于 sdk 中两个位置的名为的快照文件引起的:

  • flutter/bin/cache/dart-sdk/bin/snapshots- 针对 arm 的新快照,您刚刚将其粘贴到此处
  • flutter/bin/cache/artifacts/engine/darwin-x64- 旧快照仍然存在x64
  1. frontend_server.dart.snapshot将上面提到的第一个路径调用的文件复制到第二个路径,替换旧文件

我已经运行了一个非常随意的测试,让我感觉一下 hello world 应用程序的编译时间是否有任何改进。随意我的意思是我没有关闭任何后台程序。

测试过程如下:

  • 在 ios 模拟器上运行应用程序
  • 杀死应用程序并运行flutter clean
  • 再次运行应用程序并记下构建时间

初步结果非常有希望:

  • ~17s - 16" mbp i9
  • ~16s - 通过罗塞塔空气 m1
  • ~12s - 空气 m1 原生
  • ~11s - 14" mbp m1 max 本机
$ dart --version
Dart SDK version: 2.15.0-116.0.dev (dev) (Thu Sep 16 09:47:01 2021 -0700) on "macos_arm64"

$ flutter --version
Flutter 2.6.0-11.0.pre • channel dev • https://github.com/flutter/flutter.git
Framework • revision 4b330ddbed (5 weeks ago) • 2021-09-16 17:29:58 -0700
Engine • revision 5b81c6d615
Tools • Dart 2.15.0 (build 2.15.0-116.0.dev)

在此处输入图像描述

于 2021-10-09T13:03:15.790 回答
5

它似乎还不能与 Flutter 一起使用,如下所示:

Dart SDK 中的 Apple Silicon 支持

[...] 请注意,Flutter SDK 中捆绑的 Dart SDK 还没有这些改进。

https://medium.com/dartlang/announcing-dart-2-14-b48b9bb2fb67

[宣布 Dart 2.14][ScreenShot]:https ://i.stack.imgur.com/N8Qcc.png

和:

获取 Dart SDK

[...] 从 Flutter 1.21 开始,Flutter SDK 包含完整的 Dart SDK。所以如果你安装了 Flutter,你可能不需要显式下载 Dart SDK。如果满足以下任一条件,请考虑下载 Dart SDK:

  • 你不使用颤振。
  • 您使用的是 1.21 之前的 Flutter 版本。
  • 您想减少磁盘空间要求或下载时间,并且您的用例不需要 Flutter。例如,您可能有一个需要 Dart 但不需要 Flutter 的持续集成 (CI) 设置。

https://dart.dev/get-dart

[获取 Dart SDK][ScreenShot]:https ://i.stack.imgur.com/rawJV.png

于 2021-09-29T15:50:12.553 回答
4

使用此处的其他答案,我创建了flutter_m1_patcher

它获取 Flutter 捆绑的 Dart SDK 版本并将其替换为 arm64 版本。

于 2021-12-16T06:30:14.187 回答