[Android][Google Play]Support 64-bit architectures

来源:https://developer.android.com/distribute/best-practices/develop/64-bit
从 2019 年 8 月 1 日开始,您在 Google Play 上发布的应用必须支持 64 位架构。64 位 CPU 能够为您的用户提供更快、更丰富的体验。添加 64 位的应用版本不仅可以提升性能、为未来创新创造条件,还能针对仅支持 64 位架构的设备做好准备。

您的应用是否包含 64 位库?
要确定应用是否包含 64 位库,最简单的方法就是检查 APK 文件的结构。在编译时,APK 会与应用所需的所有原生库打包在一起。原生库会根据 ABI 而存储在不同的文件夹中。您的应用无需支持所有 64 位架构,但对于您支持的每种原生 32 位架构,则应用都必须包含相应的 64 位架构。
对于 ARM 架构,32 位库位于 armeabi-v7a 中。对应的 64 位库位于 arm64-v8a 中。
对于 x86 架构,请查找 x86(32 位)和 x86_64(64 位)。

=======================================================
对于Google的良(流)苦(氓)用(行)心(为),不得不对代码中的jni部分重新梳理,接下来会分享踩过的坑……

Android[Exception][java.lang.UnsatisfiedLinkError]

上篇二维码的应用使用了jni代码,在Nexus5X(Android7.1.1)上会crash,抛出了如下异常:

AndroidRuntime: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[zip file “/data/app/…/base.apk”],nativeLibraryDirectories=[/data/app/…/lib/arm64, /system/fake-libs64, /data/app/…/base.apk!lib/arm64-v8a, /system/lib64, /system/lib64, /vendor/lib64]]] couldn’t find “libxxx.so”
AndroidRuntime: at java.lang.Runtime.loadLibrary…

在apk包里找不到对应的so文件,在指定的目录下也找不到,于是抛出异常;可以看到lib加载的类型是arm64-v8a,的确是没有,我们来看看别人是怎么说的。
http://blog.csdn.net/qiuchangyong/article/details/50040579

11.APP_ABI目前能取得值包括:(1)、32位:armeabi、armeabi-v7a、x86、mips;(2)、64位:arm64-v8a,x86_64, mips64;

12.注意事项:(1)、目前模拟器只有x86_64的没有arm64-v8a的;(2)、在用真机测试armv8-a时,最好先通过adb shell, cat  /proc/cpuinfo ,来查看下真机是否是支持armv8-a;(3)、arm32和arm64有些配置参数不能共存,如-msoft-float仅在arm32位下支持,在arm64位下是不支持的.

13.使用这个命令可以获得本机的arch:adb shell getprop ro.product.cpu.abi

在本机模拟器上运行时,发现也抛出了这个异常,缺少x86_64导致的,顺利解决。