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

Ara*_*adi 2 android arm abi apk flutter

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

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

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

x86_64          7.1mb
arm64-v8a       7mb
armeabi-v7a     6.8mb
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ara*_*adi 5

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

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