4

我用 dart 制作了一个控制台应用程序,它计算 2 个数字并打印它们,大小约为 5 MB!

下载链接(仅限 Windows)https://drive.google.com/open?id=1sxlvlSZUdxewzFNiAv_bXwaUui2gs2yA

这是代码

import 'dart:io';

int inputf1;
int inputf2;
int inputf3;

void main() {
  stdout.writeln('Type The First Number');
  var input1 = stdin.readLineSync();
  stdout.writeln('You typed: $input1 as the first number');
  sleep( Duration(seconds: 1));
  stdout.writeln('\nType The Second Number');
  var input2 = stdin.readLineSync();
  stdout.writeln('You typed: $input2 as the second number');
  sleep( Duration(seconds: 1));
  inputf1 = int.parse(input1);
  inputf2 = int.parse(input2);

  inputf3 = inputf1 + inputf2;
  print('\nfinal answer is : $inputf3');
  sleep( Duration(seconds: 10));
}
4

2 回答 2

6

大可执行文件的原因是因为dart2native编译器并不是真正制作可执行文件,您可以从头开始直接在您的机器上运行。相反,它将dartaotruntime可执行文件与您的 AOT 编译的 Dart 程序一起打包。

包含所有 Dart 运行时库,dartaotruntime并且 dart2native 不会从中删除任何内容dartaotruntime(也很困难,因为它是二进制文件),因此即使您只添加两个数字,您也将获得整个运行时。

但这并没有那么糟糕,因为它是每个程序的一次性代价。所以如果你制作一个非常大的程序,dartaotruntime仍然只包含一次。

但是,如果您在一个包中部署许多小程序,我建议您添加-k aot参数,dart2native以便它而不是可执行文件生成一个.aot文件,然后您可以使用dartaotruntime <program.aot>.

这将使您的部署更加复杂,但您只需要提供dartaotruntime二进制文件和多个.aot文件。

我已经将您的程序编译到Windows 64 位的 Dart 上.exe.aot版本 2.8.2 所以你可以看到大小差异:

在此处输入图像描述

同样,-k aot如果您只打算部署一个可执行文件,则不会为您节省任何磁盘空间。但是如果您的项目包含许多程序,它可以节省很多。

还应注意,该.aot文件与该文件一样依赖于平台.exe。并且您应该使用dartaotruntime已用于编译文件的相同版本。

于 2020-05-30T20:06:20.583 回答
-2

这是因为原生 dart 应用程序是通过合并渲染引擎制作的......我知道这适用于所有基于 dart 的颤振应用程序。也看看这个https://medium.com/@rajesh.muthyala/app-size-in-flutter-5e56c464dea1

于 2020-05-30T18:05:34.707 回答