首页 > 解决方案 > Flutter 大 apk 大小并针对不同 ABI 发布

问题描述

我正在尝试在 Flutter 中构建一个文件大小较小的发布应用程序。昨天发布的 apk 大小约为 16mb,但在我更新颤振后,大小变为 23mb。

经过一番研究,我发现 Flutter 会生成包含所有 ABI 的应用程序包,并且在更新后,新的 API 已添加到 apk 中。

将应用程序添加到 android studio apk 分析器后,我可以在其中看到不同的 ABI,如下所示:

x86_64          7.1mb
arm64-v8a       7mb
armeabi-v7a     6.8mb

我可以用来flutter build apk --split-per-abi为不同的 ABI 生成 apk。现在的问题是,arm64-v8a系统可以运行x86_64apk吗?(或其他)。或者这些 ABI apk 版本中的任何一个都可以在所有设备上运行吗?

我不会在应用商店发布我的应用,我只是将它放在我的客户网站上,他们的客户会从那里下载它(或者它会通过电子邮件发送给他们,...)。所以我需要一个适用于所有 android 设备的版本,而完整的捆绑版本太大(23mb)。

编辑: 我刚刚x86_64在设备上测试了构建arm64-v8a,但没有安装。但该armeabi-v7a版本确实安装了。

标签: androidflutterarmapkabi

解决方案


我做了一些研究并在不同设备上尝试了发布版本,结果如​​下:命令是:flutter build apk --split-per-abi

  • x86_64 apk 版本不适用于任何其他设备。我找不到 x86_64 设备,但我认为它可以在 x86_64 设备上运行!
  • arm64-v8a apk 版本安装在 arm64-v8a 上,但不会安装在 armeabi-v7a 设备上。(armeabi-v7a 早于 arm64-v8a)。
  • armeabi-v7a apk 版本适用于 armeabi-v7a 和 arm64-v8a 设备。我没有找到 x86_64 设备,但我认为它也可以在此设备上运行。

摘要:较新版本的 ABI 可以运行较旧的 apk 版本。顺序是:armeabi-v7a 然后 arm64-v8a 然后 x86_64。

例如,armeabi-v7a 将在所有设备上安装和工作,如果您构建和 arm64-v8a apk,它将不会安装在 armeabi-v7a 设备上。

还有其他不再使用的架构(mips、mips64、armeabi),默认情况下,Flutter 不会在构建中包含它们。

X86 和 X86_64 架构适用于数量非常有限的设备,但可能对在模拟器中进行调试很有用。

这是我研究和测试的结果。我决定只使用 armeabi-v7a,所以 apk 大小将是 8mb 而不是 23mb。

如果其他人有这个问题/麻烦,我希望这会有所帮助:)。


推荐阅读