【发布时间】:2020-04-07 17:32:16
【问题描述】:
我需要了解 Android 设备架构,以及为什么我使用时会生成三种不同类型的 APK:
flutter build apk --split-per-abi.
当我使用
flutter build apk
我得到一个名为 fat APK 的大 APK 文件,其中包含该应用的 3 个版本。
【问题讨论】:
标签: android flutter apk android-architecture-components
我需要了解 Android 设备架构,以及为什么我使用时会生成三种不同类型的 APK:
flutter build apk --split-per-abi.
当我使用
flutter build apk
我得到一个名为 fat APK 的大 APK 文件,其中包含该应用的 3 个版本。
【问题讨论】:
标签: android flutter apk android-architecture-components
flutter build apk --split-per-abi 命令通常会生成两个 APK 文件。
arm64 或 x86_64 是具有 64 位处理器的设备的 apk 文件。x86 是 32 位处理器的 apk 文件。您可以将它们都上传到 PlayStore,并根据用户的设备架构安装相应的 apk。
您在使用flutter build apk 时获得的胖 apk 包含针对所有应用程序二进制接口或 ABI 的必要编译代码。一旦用户下载了这个fat apk,那么只有适用于设备的代码才会被使用。
【讨论】:
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-apk
https://flutter.dev/docs/deployment/android#build-an-app-bundle
https://developer.android.com/studio/build/configure-apk-splits#configure-split
【讨论】:
运行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 运行时。
【讨论】:
请记住,创建一个 App Bundle(一个 .aab 文件)优于为每个 abi 创建一个胖 APK 或多个 APK。要组装 App Bundle,请运行 flutter build appbundle。捆绑包将在 build/app/outputs/bundle/release/app.aab
【讨论】: