[高德地图 应用案例] couldn't find "libgdinamapv4sdk752.so" 和 UnstatisFieldLinkedError

在升级到SDK3.x之后出现了,找不到so的问题, couldn't find "libgdinamapv4sdk752.so"

提供一个简单粗暴的方式查看,是不是有这个问题
找到出问题的APK.
1.如demo.apk
2.修改后缀为demo.zip
3.解压zip
4.查看libs目录
如果里面有处理armeabi以外的文件夹,那么小心了有可能有问题

比如下面这种 就是有问题的




1. 工程中没有放置so文件

java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader[DexPathList[[zip file"/data/app/com.example.projectforbbs-2/base.apk"],nativeLibraryDirectories=[/data/app/com.example.projectforbbs-2/lib/arm,/vendor/lib, /system/lib]]] couldn't find "libgdinamapv4sdk752.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
atjava.lang.System.loadLibrary(System.java:1076)
at com.autonavi.amap.mapcore.MapCore.<clinit>(MapCore.java:60)
at com.amap.api.mapcore.AMapDelegateImp.<init>(AMapDelegateImp.java:298)
at com.amap.api.mapcore.j.<init>(AMapGLSurfaceView.java:26)
at com.amap.api.mapcore.j.<init>(AMapGLSurfaceView.java:20)
at com.amap.api.mapcore.at.a(MapFragmentDelegateImp.java:129)
at com.amap.api.maps.MapView.onCreate(MapView.java:121) 
at com.example.projectforbbs.basic.BasicMapActivity.onCreate(BasicMapActivity.java:65)




很多同学看到这个错误的时候都比较惊讶,应该它报错是说MapView.onCreate有问题,自己的程序啥都没执行,就出问题,就想肯定是sdk有问题。然而并不是这样,仔细看一下错误,报的是
nativeLibraryDirectories=[/data/app/com.example.projectforbbs-2/lib/arm,/vendor/lib, /system/lib]]] couldn't find "libgdinamapv4sdk752.so
找不到so 文件,正常so 文件是放在libs 下面的和jar 包放在一起,看一下工程


发现问题了,根本没有so文件。


加上so 文件就可以完美运行了。


2.so文件对应错误

下面也有一种情况会报上述问题,但是so jar 包都是有的,看一下图

这也是一个很明显的错误,使用的是3.2.1 jar 对应so 名称应该是gdinamapv4sdk752 .so 截图里面是304 so 应该是2.7 sdk 对应的版本,所以才会包这个错。

PS:如果把so名称修改了,同样的也是会报找不到的



3.平台不一样

先来看一下 3.2.1 SDK 情况
对比 2.7.0 看一下

3.2.12.7.0少两个文件夹,armeabi-v7ax86,这个是引起众多问题的罪魁祸首,不过不用担心,分分钟解决它。


x86 平台举个例子,如果在x86 的平台上,要运行sdk 怎么办,3.2.1 没有x86 so ,很多同学想了一个办法,
把armeabi文件夹下面的so文件复制到x86下面;
②把x86文件夹空着,什么也不放;
那么恭喜你,运行了之后会获得找不到so 的错误;

解决办法是这样,只保留 armeabi 文件夹,其他的统统删掉 ,因为大多数x86 平台的手机都会兼容armeabi 的版本。
但是会发现就算这样做了在模拟器上面依旧装不上,那是因为模拟器没有兼容,但是他可以替换平台。如果是genymotion 的话,需要安装一个转换为arm 的插件。

PS :在以后的版本中其他平台各自的包也会逐步给出来的

4.Android Studio 上不行,eclipse可以

如果使用的是Android Studio ,还有一个地方需要注意一下,AS Android Studio )和eclipse 不一样,eclipse so 文件放到libs 目录下就可以了,但是AS 的话,还需要自己处理一下。
app/build.gradle 中进行如下配置,注意不是根目录的那个
sourceSets {
       main {
           jniLibs.srcDirs = ['libs']
       }
                  //…
}
这样配置之后,AS 工程里面打开,就会看见一个 jniLibs
如果不想配置,可以在app/src/main/ 这个目录下创建一个jniLibs 文件夹把so 文件放进去

5.明明只保留了armeabi文件夹还是报错

这种情况也是有的,绝大多数原因都是打包脚本在作怪,特别是android studio很容易出问题

比如工程里面只保留了armeabi但是应用了一个第三方的AAR,它里面有其他平台,我也删不掉了咋办。打包的时候打出来自然就会有其他平台了。


这时候可以参考99楼的做法,在gradle中配置一下只打包armeabi的就可了


android{
            splits {
            abi {
                enable true
                reset()
                include 'armeabi'//只打包armeabi平台的,就算有其他文件夹也不管
//                include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'x86', 'x86_64'
            }
        }


PS:如果是自己写得打包脚本,还望稍微检查一下 ~

PS:3.2.0 64 位的手机上有问题,3.2.0.1 便是修复这个问题发布的版本。

以上就是目前遇到的情况,欢迎补充!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Android高德地图SDK的配置,我可以给您提供一些心得。 首先,您需要下载高德地图SDK的jar文件和so文件。这些文件可以在高德开放平台上下载,或者从其他第三方渠道获取。 接着,将下载好的jar文件拷贝至您的Android项目的libs目录下,并在项目的build.gradle文件中添加如下依赖: ``` dependencies { implementation files('libs/amap-android-map-x.x.x.jar') } ``` 然后,将下载好的so文件拷贝至您的Android项目的jniLibs目录下。如果没有该目录,可以手动创建。so文件的命名规则为libamap_*.so,其中*代表不同的CPU架构。 最后,在您的AndroidManifest.xml文件中添加如下权限: ``` <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ``` 并在application节点下添加如下元素: ``` <meta-data android:name="com.amap.api.v2.apikey" android:value="您申请的高德地图API Key" /> ``` 需要注意的是,您需要替换上述代码中的amap-android-map-x.x.x.jar、libamap_*.so和您申请的高德地图API Key为您实际使用的文件名和API Key。 希望这些信息能对您有所帮助。如果您还有其他问题,可以随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值