当前位置: 首页 > 知识库问答 >
问题:

为什么flutter apk文件大小有点大

葛骏
2023-03-14

有一个Android应用程序是实现与ionic4和我在其他应用程序中实现相同的功能写在flutter但ionicapk文件大小只有13MB。具有类似功能的flutterapk(实现仍然不完整)文件大小为21MB

我有以下问题:

>

  • 我想知道是什么让我的apk变得更大?

    这可能与代码实现或其他方面有关吗?

    有人帮我减少应用程序flutter大小吗?

  • 共有2个答案

    羊舌洛华
    2023-03-14

    请注意以下几点:

    如果使用flatter build apk构建apk,它将同时包含arm-32和arm-64 apk(构建apk时,哪个flatter将在conole中显示)。如果你正在构建应用程序包,这不是一个问题,它的大小要小得多。

    为了避免一个包含arm-32和arm-64的平面apk,您可以使用以下两个命令分别构建它们:

    flutter build apk --target-platform=android-arm
    

    以上将产生arm-32位apk。转到项目-

    然后在pubspec.yaml中增加版本代码,下一个flutter pub get并执行以下操作:

    flutter build apk --target-platform=android-arm64
    

    上面会产生arm-64位apk。转到project-

    然后您可以分别提交两个apk(先提交较低的apk版本)。

    由于必须通过增加版本代码来运行两个命令,所以flatter通过这个命令(flatter)使它变得更容易

    来自doc:

    从命令行:

    Enter cd <app dir>
    (Replace <app dir> with your application’s directory.)
    Run `flutter build apk --split-per-abi`
    (The flutter build command defaults to `--release`.)
    

    此命令将生成两个APK文件:

    <app dir>/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
    <app dir>/build/app/outputs/apk/release/app-arm64-v8a-release.apk
    <app dir>/build/app/outputs/apk/release/app-x86_64-release.apk
    

    删除--split per abi标志将生成一个fat APK,其中包含为所有目标abi编译的代码。这样的APK比拆分后的APK更大,导致用户下载不适用于其设备架构的本机二进制文件

    在这里阅读更多。

    此外,请检查以下内容:

    • 正如其他答案提到的那样,删除所有不必要的资产(图像、字体和文件)。

    如果你有太多的字体,这将严重影响apk大小和flutter也做了一个解决方案,通过创建一个包,让你从谷歌字体库(真棒包,让你访问这么多的字体和灵活性,在任何地方使用)。在这里获取包裹并在这里阅读更多。

    • 删除不使用的不必要的包/插件(虽然没有太大影响)。

    陈嘉荣
    2023-03-14

    你是否构建了Flutter apk作为调试或发布?这对apk文件大小有很大影响。此外,Flutter和Ionic是不同的框架,所以拥有不同的apk大小并不罕见(有关为什么Ionic的文件大小较小的更多细节,您可以检查一下,不仅比较大小,还比较性能、易用性等)。

    关于你的第二个问题:你能做些什么来减少Flutter apk的大小?

    1. 删除未使用的包、库或插件
     类似资料:
    • 我有大约500MB的H2数据库。 H2的版本是1.2.147。 数据库的存储引擎是PageStore。 JDBC URL如下所示。 jdbc:h2:file://C:/h2/client;如果存在=真;MVCC=真;数据库\u事件\u侦听器。H2DBMonitor';AUTO_SERVER=TRUE;对数=2 我做了一个版本的H2 1.4.192没有改变数据库的存储引擎。 当我的客户使用数据库时,

    • 我正在学习Java I/O。因此,使用缓冲流可以减少读取或写入所需的时间,因为如果使用普通的FileInputStream,每次调用读取时都会获取一个字节,但如果使用缓冲区,则会获取指定大小的数据并将其存储在内存中。所以我试着在实践中看到这一点。 我已将BufferedInputStream的缓冲区大小设置为512,8192,65536。每次需要87秒才能完成执行。所以我尝试使用FileInput

    • 我有一个h2数据库文件,文件大小已经增长到5GB。我删除了一些数据以缩小文件的大小。但即使从数据库中删除了一半记录,文件大小仍然保持不变。 我已经尝试了以下所有选项来减少数据库大小,但没有一个对我有用。 我的连接字符串如下所示: 注: 我们正在结清我们已经开始的交易 文件中没有5GB的数据 有人能给我建议一些解决方法或修复方法来减少我的数据库大小吗

    • 问题内容: 限制Java JVM上Permgen空间大小的目的是什么?为什么不总是将其设置为等于最大堆大小?Java为什么默认为这么少的64MB?他们是否正在试图通过这种方式迫使人们注意代码中的Permgen问题? 如果我的应用使用85MB的permgen,那么将其设置为96MB可能是安全的,但是如果它只是主堆的一部分,为什么还要设置得如此之小呢?允许JVM使用堆允许的PermGen效率不高吗?

    • 在堆上分配内存时,唯一的限制是可用RAM(或虚拟内存)。它产生Gb的内存。 那么,为什么堆栈大小如此有限(大约1 Mb)?什么技术原因阻止您在堆栈上创建真正大的对象? 更新:我的意图可能不清楚,我不想在堆栈上分配巨大的对象,也不需要更大的堆栈。这个问题只是纯粹的好奇心!

    • 我使用spring Boot创建了压缩响应的配置。下面是我的配置。 问题是所有的响应都有header[Content-Encoding gzip],即使响应大小小于min响应大小,默认为2048字节。