请注意这些:
如果您使用flutter build apk 构建您的 apk,它将同时包含 arm-32 和 arm-64 apk(构建 apk 时会在 conole 中显示抖动)。如果您正在构建应用程序包,这不是问题,而且它的大小要小得多。
为避免一个平面 apk 包含 arm-32 和 arm-64,您可以使用以下两个命令分别构建它们:
flutter build apk --target-platform=android-arm
上面会产生arm-32 bit apk。转到 project -> build -> app -> release 并将 apk 重命名为:app-armeabi-v7a-release.apk。
然后在 pubspec.yaml 中增加版本代码,下一个 flutter pub get 并执行以下操作:
flutter build apk --target-platform=android-arm64
上面会产生arm-64 bit apk。转到 project -> build -> app -> release 并将 apk 重命名为:app-arm64-v8a-release.apk。
那你就可以分别提交两个apk了(apk版本低的先)。
因为,你必须通过递增版本代码来运行两个命令,flutter 通过这个命令(我认为flutter > 1.5.4)变得更容易:flutter build apk --split-per-abi。该命令将增加第二个 apk 的 apk 版本代码,并为您提供两个重命名的 apk(请注意,此命令将生成更高版本的代码(例如:3222)。
来自文档:
从命令行:
Enter cd <app dir>
(Replace <app dir> with your application’s directory.)
Run `flutter build apk --split-per-abi`
(The flutter build command defaults to `--release`.)
此命令会生成两个 APK 文件:
<app dir>/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
<app dir>/build/app/outputs/apk/release/app-arm64-v8a-release.apk
<app dir>/build/app/outputs/apk/release/app-x86_64-release.apk
删除 --split-per-abi 标志会导致一个胖 APK 包含
为所有目标 ABI 编译的代码。此类 APK 在
大小比他们的拆分同行,导致用户下载
不适用于其设备架构的本机二进制文件
read more here.
另外,检查这些:
- 正如提到的其他答案,删除所有不必要的资产(图像、字体
和文件)。
如果你有太多字体会严重影响 apk 大小,flutter 也通过创建一个包让你从谷歌字体库中获取字体来解决这个问题(很棒的包,让你可以访问这么多字体和灵活性在任何地方使用)。获取the package here 和Read more here。