首先查看.so文件是否放置正确(具体怎么操作,高德文档有说明),如果没有解决问题,运行在不同的手机上报错,报错原因是因为不同的手机cpu不一样,程序在相应目录下找不到.so文件导致报错
解决方案:
首先通过Build.CPU_ABI方法获取到与手机相匹配存放.so文件的文件夹,接着在libs下创建该名字的文件夹,在高德地图api中下载相应的.so文件放入该文件夹中,如果官方没有提供则将armeabi文件中的.so文件拷贝到该文件夹下
关于Android的.so文件相关说明,更多详情http://www.kejik.com/article/21884.html
在Android系统上,每一个CPU架构对应一个ABI:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64。很多设备都支持多于一种的ABI。例如ARM64和x86设备也可以同时运行armeabi-v7a和armeabi的二进制包。但最好是针对特定平台提供相应平台的二进制包,这种情况下运行时就少了一个模拟层(例如x86设备上模拟arm的虚拟层),从而得到更好的性能(归功于最近的架构更新,例如硬件fpu,更多的寄存器,更好的向量化等)。我们可以通过Build.SUPPORTED_ABIS得到根据偏好排序的设备支持的ABI列表。但你不应该从你的应用程序中读取它,因为Android包管理器安装APK时,会自动选择APK包中为对应系统ABI预编译好的.so文件,如果在对应的lib/ABI目录中存在.so文件的话。
.so文件放置可能带来的问题以及一些规则
你应该尽可能的提供专为每个ABI优化过的.so文件,但要么全部支持,要么都不支持:你不应该混合着使用。你应该为每个ABI目录提供对应的.so文件。
当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。在x86设备上,libs/x86目录中如果存在.so文件的话,会被安装,如果不存在,则会选择armeabi-v7a中的.so文件,如果也不存在,则选择armeabi目录中的.so文件(因为x86设备也支持armeabi-v7a和armeabi)。
使用android-21平台版本编译的.so文件运行在android-15的设备上,使用NDK时,你可能会倾向于使用最新的编译平台,但事实上这是错误的,因为NDK平台不是后向兼容的,而是前向兼容的。推荐使用app的minSdkVersion对应的编译平台。这也意味着当你引入一个预编译好的.so文件时,你需要检查它被编译所用的平台版本。