【问题标题】: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 个版本。

【问题讨论】:

    标签: android flutter apk android-architecture-components


    【解决方案1】:

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

    1. arm64 或 x86_64 是具有 64 位处理器的设备的 apk 文件。
    2. 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-apk
      https://flutter.dev/docs/deployment/android#build-an-app-bundle
      https://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

        创建

        【讨论】:

          猜你喜欢
          • 2020-11-04
          • 1970-01-01
          • 2020-11-04
          • 2023-01-26
          • 2013-06-17
          • 2011-08-26
          • 2019-06-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多