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

Posted

技术标签:

【中文标题】Flutter 大 apk 大小并针对不同 ABI 发布【英文标题】:Flutter large apk size and releasing for different ABIs 【发布时间】:2020-04-24 20:22:06 【问题描述】:

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

经过一番研究,我发现 Flutter 会生成包含所有 ABI 的 app bundle,并且在更新后,新的 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_64 apk 吗? (或其他)。 或者这些 ABI apk 版本中的任何一个都可以在所有设备上运行吗?

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

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

【问题讨论】:

【参考方案1】:

我做了一些研究并尝试了不同设备上的发布版本,结果如​​下: 命令是: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。

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

【讨论】:

我也面临类似的问题。您还可以分享您最后用于制作发布apk的命令,该命令使您的apk文件大小为8mb。 flutter build apk --split-per-abi 这将为您提供 3 个 apk。 armeabi-v7a 适用于所有设备。 您所有的发布应用程序 apk 都有这么大吗?以及您使用的是什么颤振版本?当我使用 1.17 时,事情进展顺利,发布的 apk 大小也很小,但是在将 Flutter 版本升级到 1.20 后,就会出现这个问题。 @Umair 是的,但我使用的是颤振 1.12.13+5。颤振 1.20 的 apk 的大小是多少? (使用--split-per-abi 命令)【参考方案2】:

在您的 vscode 或 android studio 的 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

【讨论】:

以上是关于Flutter 大 apk 大小并针对不同 ABI 发布的主要内容,如果未能解决你的问题,请参考以下文章

Flutter小记10apk 提交各大应用市场,出现armeabi与arm64 版本标识/版本号不一致无法上传审核的解决方案

Flutter生成的3个APK有啥区别?

如何在 Flutter 中缩小 APK 以使其尽可能小?

为啥颤振 apk 文件大小要大一些

使用哪个 Flutter APK 从 apk/release/ 文件夹安装

Flutter - 在 ABI 的 NDK 工具链文件夹中找不到工具链