百度地图SDK坐标转换报java.lang.UnsatisfiedLinkError: No implementation found...解决方法

最近发现以前使用百度地图sdk提供的坐标转换(GPS转百度坐标一直报错,错误如下)

java.lang.UnsatisfiedLinkError: No implementation found for boolean com.baidu.mapsdkplatform.comjni.tools.JNITools.CoordinateEncryptEx(float, float, java.lang.String, java.lang.Object) (tried Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_CoordinateEncryptEx and Java_com_baidu_mapsdkplatform_comjni_tools_JNITools_CoordinateEncryptEx__FFLjava_lang_String_2Ljava_lang_Object_2)
        at com.baidu.mapsdkplatform.comjni.tools.JNITools.CoordinateEncryptEx(Native Method)
        at com.baidu.mapsdkplatform.comapi.util.b.a(Unknown Source)
        at com.baidu.mapapi.model.CoordUtil.Coordinate_encryptEx(Unknown Source)
        at com.baidu.mapapi.utils.CoordinateConverter.a(Unknown Source)
        at com.baidu.mapapi.utils.CoordinateConverter.a(Unknown Source)
        at com.baidu.mapapi.utils.CoordinateConverter.convert(Unknown Source)

根据错误可以知道,找不到CoordinateEncryptEx这个方法,so包没有导入成功。我本来是放在main/jniLibs文件下的,但是很明显没成功,然后尝试了放在libs下面,添加jniLibs.srcDirs = ['libs'],等等一系列网上搜索的方法,但是没什么用,依然找不到方法。

最后只有手动进行导入(既然自动导入不了,就只有手动了),可以在第一个activity中添加

static {
    System.loadLibrary("BaiduMapSDK_base_v5_3_0");
}

再次运行会发现找的到这个方法了,但是又报了其他的错误

JNI DETECTED ERROR IN APPLICATION: jmethodID was NULL

in call to CallVoidMethodV

这个错误一看就知道报在了so包里C/C++代码的,这可怎么办,调用方法如下所示,调用应该没有什么问题,也不知道是不是手动导入的问题,目前还不知道。

CoordinateConverter converter  = new CoordinateConverter();
converter.from(CoordinateConverter.CoordType.GPS);
converter.coord(new LatLng(34.69, 119.31));
LatLng desLatLng = converter.convert();

然后根据converter.convert()方法走进源代码,查看到调用so包方法的类为JNITools,这个类里定义了一些native修饰的方法(这些就是调用so里面的方法),可以找到如下方法

public static native double[] wgsToBaidu(double var0, double var2);

这个方法一看方法名,就是将wgs坐标转为百度坐标,wgs84(是为GPS全球定位系统使用而建立的坐标系统)。

于是直接使用wgsToBaidu方法来实现转换。

double[] bd = JNITools.wgsToBaidu(34.69, 119.31);

这样就实现了GPS坐标转换为百度坐标的功能。

你可能感兴趣的:(android)