繁体   English   中英

flutter build apk --split-per-abi: app-armeabi-v7a-release.apk 和 app.apk 有什么区别

[英]flutter build apk --split-per-abi: what is the difference between app-armeabi-v7a-release.apk and app.apk

当我运行flutter build apk --split-per-abi ,我在目录flutter-apk中得到 4 个文件:

  1. 应用程序-arm64-v8a-release.apk,
  2. 应用程序-armeabi-v7a-release.apk,
  3. 应用程序-x86_64.apk,
  4. 应用程序.apk。

我已经知道前三个 apk 是由于不同的 cpu 架构/指令集。 在我的安卓手机上,我可以安装 app-armeabi-v7a-release.apkapp.apk 那么它们是一样的吗? 区别在哪里?

我想你首先运行flutter build apk生成 apk app.apk ,这个 apk 将运行几乎所有架构(由它自己决定)。 然后您再次运行命令flutter build apk --split-per-abi 这意味着您同时获得了两个命令结果。 只需尝试删除所有 apk output 文件并重新运行命令flutter build apk --split-per-abi ,我希望你只会得到三个文件。

我对与您相同问题的答案的搜索没有得到令人满意的结果。

然后我想到了使用 SHA-256 校验和进行文件相等性验证的想法。

如果您知道原始文件的校验和,则可以对其运行校验和或哈希实用程序。 如果生成的校验和匹配,您就知道您拥有的文件是相同的。 [从这里]

我们可以从哈希结果中看出,基于所有 apk 的哈希,文件app.apk等于文件app-armeabi-v7a-staging-release.apk

  13:10:25  qrcode_keeper  master  +1 ~1  ﮫ 39ms                             Path
➜ Get-FileHash build\app\outputs\flutter-apk\app.apk                                   ----
                                                                                       C:...
Algorithm       Hash
---------       ----
SHA256          4349EF321BDE25DB32FED4D3C8E0BB265BF5BF6595767F20C2D43B8BBD5BDF13      


  13:10:26  qrcode_keeper  master  +1 ~1  ﮫ 80ms                             Path
➜ Get-FileHash build\app\outputs\flutter-apk\app-armeabi-v7a-staging-release.apk       ----
                                                                                       C:...
Algorithm       Hash
---------       ----
SHA256          4349EF321BDE25DB32FED4D3C8E0BB265BF5BF6595767F20C2D43B8BBD5BDF13      


  13:10:31  qrcode_keeper  master  +1 ~1  ﮫ 72ms                             Path
➜ Get-FileHash build\app\outputs\flutter-apk\app-arm64-v8a-staging-release.apk         ----
                                                                                       C:...
Algorithm       Hash
---------       ----
SHA256          AE4DDBBCFDD5A0AF273DDBE2A1CF4C56513D63C1D5A2F151EF973855FA190E0B      


  13:10:38  qrcode_keeper  master  +1 ~1  ﮫ 82ms 
➜ Get-FileHash build\app\outputs\flutter-apk\app-x86_64-staging-release.apk           

Algorithm       Hash
---------       ----
SHA256          1D6EBAAA82DF6984C352E4B06D0300386A26EF19A7DE4CB476105060FC74938B  

取自flutter GitHub 存储库

在调试模式下运行 flutter 应用程序时,dart 代码会即时编译 (JIT),从而可以使用热重载/重启等功能。 在发布模式下,代码提前 (AOT) 编译为本机代码。 这种模式更适合在较小的应用程序中进行性能和结果; 它还删除了仅在开发模式下使用的内容。 app-debug.apk 文件只是您在调试模式下运行/编译应用程序时获得的构建。

应用程序.apk -> AOT

app-debug.apk -> JIT

当您使用 --split-per-abi 参数构建您的应用程序时,它会生成 3 个单独的文件,如文档中所述,位于 PROJECT_SRC/build/app/outputs/apk/prod/release/。 这些文件是每个 android 架构的优化构建


正如答案中提到的,您可以看到不同之处在于使用的编译概念(如果您想阅读更多相关信息,我认为是一个好的开始)。

我假设app.apkapp-debug.apk然后用于针对其特定目标平台进一步优化,因此保留为必要的副产品。 我不认为有任何特别的理由保留这些。

应用程序.apk

不重要,并且是其中之一,但名称不同:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM