Flutter 大 apk 大小并针对不同的 ABI 发布

Flutter large apk size and releasing for different ABIs

我正在尝试在 Flutter 中构建一个文件大小较小的发布应用程序。昨天发布的 apk 大小约为 16mb,但在我更新 flutter 后,大小变为 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)。

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

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

  • The x86_64 apk version does not work on any other devices. I could not find an x86_64 device but I assume it will work on x86_64 devices!
  • The arm64-v8a apk version gets installed on arm64-v8a but it will not install on armeabi-v7a devices. (armeabi-v7a is older than arm64-v8a).
  • armeabi-v7a apk version works on armeabi-v7a and arm64-v8a devices. I did not find an x86_64 device but I think it will work on this device too.

总结:较新版本的 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。

如果其他人遇到此问题 question/trouble,我希望这对您有所帮助 :)。

在你的 vscode 或 android 工作室的 cli 上写这个命令来构建你的 flutter android 项目的 3 版本:

flutter build apk --target-platform android-arm,android-arm64,android-x64

https://flutter.dev/docs/deployment/android

https://cloud.tencent.com/developer/article/1661684