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 从 apk/release/ 文件夹安装
我从 X-Code 中删除了 App.framework 和 flutter.framework。有啥帮助让他们回来吗?