Android 设备上怎么做 64 位兼容?

可能的原因是:

在安装APK的时候,系统会按照 Build.SUPPORTED_ABIS 去查找 APK 的 lib 目录下的 native 库的目录(现有的ABI:armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips64, mips)。 如果在 app 中有兼容64-bit 的目录但是又缺少库文件的话,并不会使用其他 ABI 目录下的库文件替换所缺少的库文件进行安装,这些库不混合使用,也就是说需要为每个架构提供对应的库文件。 Android 在加载 native 库的时候有回退(fallback)机制,在 64 位系统上如果 app 并不存在 arm64-v8a 的目录,则会尝试寻找 armeabi-v7a 下面的库进行加载,一般来说是向下兼容的。

出现该问题的解决方案如下:

方法 1: 在构建应用程序的时候,在工程(project)里删除所有 arm64-v8a 下面的库以及该目录;在生成 app 后,确认 apk 的包内 lib 下没有 arm64-v8a 的目录。

方法 2: 在 gradle 构建文件中设置 abiFilters,只打包 32 位架构的库:

android {
    …
    defaultConfig {
        …
        ndk {
            //选择要添加的对应 cpu 类型的 .so 库。
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
            // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }
    }
}