APK 或 App Bundle 可用于 64 位设备,但它们只有 32 位本机代码

APKs or App Bundles are available to 64-bit devices but they only have 32-bit native code

我导出了一个 Android App Bundle 文件以上传到 Play 商店,其中包含从 Unity 下载的 NDK 所需位置,因为 Android Studio NDK 文件与 Unity 不兼容。

上传构建时出现这种错误消息:

这里有SDK和NDK路径设置:

现在,解决这个问题的方法是什么?

哪一步我做错了,无法理解?

请不要提及重复的问题,因为我已经尝试了其他对我不起作用的选项。

我在更新游戏时遇到完全相同的问题... 我刚刚检查了我的捆绑包,因为我可以看到那里有 64 位代码...

供日后参考:

google play 和 x86 build 不提供 64 位对应代码的问题。禁用 x86 构建可修复此问题。

参考:https://forum.unity.com/threads/successful-unity-aab-build-not-compliant-with-the-google-play-64-bit-requirement.729035/

问题开始于 08/20/2019。

我在我的 Unity 论坛 post 上从 Unity 支持人员那里得到了这种清晰而简单的回复,这对我有用:

APKs or App Bundles are available to 64-bit devices but they only have 32-bit native code

这是回复的快照:

我希望现在,解决这个问题变得容易了。

目前正在努力移除 x86 架构

我也遇到了同样的问题,确实是上传选错了'Supported architectures'。

第 1 步

所以现在我选择了这样的架构

但在我 'x86' 检查之前。检查它并没有错,但我了解到在那种情况下你还需要检查 'x86_64' 。就像你需要'arm64-v8a',如果你有'armeabi-v7a'

无论如何我修复了这个问题,重建了解决方案(使用 Visual Studio 2019 社区中的 Xamarin Forms),将其存档并上传到 Google Play Console。 没用!

第 2 步

我认为我需要更改 'Version name'(从 1.0.0.0 到 1.0.0.1)才能正常工作,但无济于事。

我迷了半天,才找到这个

versionCode — A positive integer used as an internal version number. This number is used only to determine whether one version is more recent than another, with higher numbers indicating more recent versions. This is not the version number shown to users; that number is set by the versionName setting, below. The Android system uses the versionCode value to protect against downgrades by preventing users from installing an APK with a lower versionCode than the version currently installed on their device.

Android developer site

所以我将 'Version name' 变回 1.0.0.0 并将 'Version number'(VS19C/XamarinForms 'Version code' 的别名)升级为 2,重建、存档并上传到 Google Play 控制台,我快到了,但还没到。

第 3 步

仅在我点击具有 3 种支持架构的 APK 旁边的 'Remove' 后,发布才成功,只剩下最后上传的 APK,它只有 2 种支持架构。

现在我们在 'Full roll-out'

确保编辑 > 项目设置 > 播放器 > 配置 > 脚本后端 设置为 IL2CPP 和目标架构 > ARM64勾选

添加这个

ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'

build.gradle(Mobile:app)文件中

好的,伙计们,这是问题的解决方案。 打开统一中心。 单击 "Installs",您将在系统上看到 unity 的所有安装版本。 在右上角,每个安装的Unity版本都有三个垂直的点,点击它们并选择"Add Modules"。 第一个选项是 "Android Build Support",展开它并选择 "Unity SDK & NDK Tools"。 现在它会做什么,它将安装支持您正在使用的特定版本的 SDK 和 NDK。 下载安装完成后。 打开统一编辑器。选择 Unity > Preference> External Tools 并浏览您刚刚下载并安装的 SDK 和 NDK。位置如下, 导航到安装 Unity 的位置,然后选择 Unity > Hub >Editor> Unity(版本,您为其安装了 NDK 和 SDK)>Playback Engine > ANdroid Player > NDK/SDK.

你现在已经准备好了。

现在您必须执行此操作才能进入 Player Setting > other settings > Target Architecture > 选择 ARMv7 和 ARMv64(这是必需的)。

构建 APK,一切就绪。 如果它解决了您的问题,请接受答案。 干杯。

我通过从 https://opencv.org

更新到最新的 OPENCV 框架解决了这个问题

我把jni文件夹里的sdk文件从最新的OPENCV sdk换掉了 并且还更新了我的 libs 和 obj 文件夹以支持 64 位支持。

如果您将 Android Studio 与 Gradle、

一起使用

添加

ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64' 

到您的 gradle 文件,如下所示,

android {
   compileSdkVersion 27
   defaultConfig {
       appId "com.google.example.64bit"
       minSdkVersion 15
       targetSdkVersion 28
       versionCode 1
       versionName "1.0"
       ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'