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

Posted

技术标签:

【中文标题】Flutter生成的3个APK有啥区别?【英文标题】:What is the difference between 3 APKs generated from flutter?Flutter生成的3个APK有什么区别? 【发布时间】:2020-04-07 17:32:16 【问题描述】:

我需要了解 android 设备架构,以及为什么我使用时会生成三种不同类型的 APK:

flutter build apk --split-per-abi.

当我使用

flutter build apk

我得到一个名为 fat APK 的大 APK 文件,其中包含该应用的 3 个版本。

【问题讨论】:

【参考方案1】:

flutter build apk --split-per-abi 命令通常会生成两个 APK 文件。

    arm64 或 x86_64 是具有 64 位处理器的设备的 apk 文件。 x86 是 32 位处理器的 apk 文件。

您可以将它们都上传到 PlayStore,并根据用户的设备架构安装相应的 apk。

您在使用flutter build apk 时获得的胖 apk 包含针对所有应用程序二进制接口或 ABI 的必要编译代码。一旦用户下载了这个fat apk,那么只有适用于设备的代码才会被使用。

【讨论】:

【参考方案2】:

flutter build apk 给你很大的 apk 因为,

flutter build apk 会生成一个胖 APK,其中包含为所有目标 ABI 编译的代码。此类 APK 的大小比拆分后的版本大,导致用户下载不适用于其设备架构的原生二进制文件。


--split-per-abi 生成两个 APK 文件:

(flutter build 命令默认为--release。)

<app dir>/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
<app dir>/build/app/outputs/apk/release/app-arm64-v8a-release.apk

armeabi-v7a 用于 32 位设备,arm64-v8a 用于 64 位设备。

阅读更多https://flutter.dev/docs/deployment/android#build-an-apkhttps://flutter.dev/docs/deployment/android#build-an-app-bundlehttps://developer.android.com/studio/build/configure-apk-splits#configure-split

【讨论】:

outputs>flutter-apk>app-release.apk 和 output>apk>release>app-release.apk 是同一个文件吗? @TheNoobDeveloper0299,是的。较新的 Flutter 版本使用“flutter-apk”路径。保留旧路径以保持兼容性【参考方案3】:

运行flutter build apk --split-per-abi

此命令会生成三个 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 的大小比拆分后的版本大,导致用户下载不适用于其设备架构的原生二进制文件。

ABI 表示:应用程序二进制接口APK 表示:Android 包app dir 是您的应用程序的目录

注意:如果您可以构建 app bundle 而不是 apk执行此操作。有了这个,application will be signed 更容易。 默认情况下,应用包包含您的 Dart 代码和为 armeabi-v7a (ARM 32-bit), arm64-v8a (ARM 64-bit), and x86-64 (x86 64-bit) 编译的 Flutter 运行时。

【讨论】:

【参考方案4】:

请记住,创建一个 App Bundle(一个 .aab 文件)优于为每个 abi 创建一个胖 APK 或多个 APK。要组装 App Bundle,请运行 flutter build appbundle。捆绑包将在 build/app/outputs/bundle/release/app.aab

创建

【讨论】:

以上是关于Flutter生成的3个APK有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Flutter 构建 apk 失败

“调试为”与导出的 APK 有啥区别

我从 X-Code 中删除了 App.framework 和 flutter.framework。有啥帮助让他们回来吗?

Flutter - 生成 Flutter 应用程序 apk 时出错