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 版本标识/版本号不一致无法上传审核的解决方案