代码之家  ›  专栏  ›  技术社区  ›  Ruben P. Grady

每种架构都有单独的构建,但生成的APK文件是相同的吗?

  •  0
  • Ruben P. Grady  · 技术社区  · 6 月前

    我希望为每种架构单独构建,并分别分发它们。所以我做了一些研究,例如 Android - build separate APKs for different processor architectures 和链接文章 https://androidbycode.wordpress.com/2015/06/30/android-ndk-version-code-scheme-for-publishing-apks-per-architecture/ 据我所知,我似乎遵循了这些步骤。根据这些资源,我在我的 build.gradle :

    ...
    android {
        ...
        splits {
            abi {
                enable true
                reset()
                include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
                universalApk false
            }
        }
    }
    ...
    

    通过这些更改,我确实为每种架构获得了单独的APK。但是,生成的文件是相同的:

    $ md5sum *
    9673c9c50c3d2d8dbe02b073676b90d4  app-arm64-v8a-release-unsigned.apk
    9673c9c50c3d2d8dbe02b073676b90d4  app-armeabi-v7a-release-unsigned.apk
    9673c9c50c3d2d8dbe02b073676b90d4  app-x86_64-release-unsigned.apk
    9673c9c50c3d2d8dbe02b073676b90d4  app-x86-release-unsigned.apk
    

    这怎么可能?我做错了什么?不幸的是,我没有每种架构的设备来测试。但在我看来,构建应该为每种架构产生相同的校验和是错误的。

    如果相关的话,这是我的完整 build.gradle : https://pastebin.com/v6Ya3Kan

    1 回复  |  直到 6 月前
        1
  •  0
  •   Morrison Chang    6 月前

    APK文件只是zip文件。您可以解压缩它们进行检查。您还可以使用 APK Analyzer 看看它们包含什么。

    如果你的Android项目只包含Java/Kotlin代码,那么这些代码将被编译成 dex files 这不依赖于设备的CPU架构。

    如果你有C/C++代码(用于游戏、性能计算、跨平台库),将通过 Android Native Development Kit (NDK) 这些库需要包含在相应的APK文件中。