高德地图升级失败及onMarkerClick方法使用的坑

高德地图升级失败及onMarkerClick方法使用的坑_第1张图片
高德地图

自己动手
不放过任意一个说明
相信官网的文档

升级后崩溃

高德地图从3.0.0版本升级到6.0.0,发现App一打开就崩溃,2个项目报的错误还不一样。(1)报在主线程中打开了太多的线程,app崩溃。(2)找不到so文件,调用jni的时候,方法执行失败。

  1. 开始怀疑最新版本不支持Gradle 4.1最新版本,也可能不支持buildToolsVersion版本。各种的修改。

  2. 然后考虑到是不是因为

ndk {
           abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "mips", "mips64", "x86", "x86_64"
        }

设置的内容太多,不能将所有的SO包括到。
最后发现不需要支持那么多,只要支持

ndk {
             abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
        }

这2个就可以解决了。 注意今天用户有人用华为荣耀V9和1加5T手机,出现地图黑屏的问题,查看了原因是JNI没有初始化,也就是说so文件没有对应的。这2个手机Android 8.0的。添加了arm64-v8a后,正常。 !_!

  1. 难道是因为Maven的支持不够,还需要手动再导入SO文件。下载了6.0.0的so文件。发现不是。!_!
    难道
//3D地图so及jar
    compile 'com.amap.api:3dmap:6.0.0'
    //定位功能
    compile 'com.amap.api:location:3.8.0'
    //搜索功能
    compile 'com.amap.api:search:5.7.0'

这个执行的有问题吗?NO NO NO

结果: 混淆。
在生成 apk 进行代码混淆时进行如下配置(如果报出 warning,在报出 warning 的包加入类似的语句:-dontwarn 包名)

3D 地图 V5.0.0之前:
-keep   class com.amap.api.maps.**{*;} 
-keep   class com.autonavi.amap.mapcore.*{*;} 
-keep   class com.amap.api.trace.**{*;}

3D 地图 V5.0.0之后:
-keep   class com.amap.api.maps.**{*;} 
-keep   class com.autonavi.**{*;} 
-keep   class com.amap.api.trace.**{*;}

定位
-keep class com.amap.api.location.**{*;}
-keep class com.amap.api.fence.**{*;}
-keep class com.autonavi.aps.amapapi.model.**{*;}

搜索
-keep   class com.amap.api.services.**{*;}

2D地图
-keep class com.amap.api.maps2d.**{*;}
-keep class com.amap.api.mapcore2d.**{*;}

导航
-keep class com.amap.api.navi.**{*;}
-keep class com.autonavi.**{*;}

因为之前的版本太老,混淆有修改了。而不同的版本在debug中配置有的开启了混淆,所以导致调用so文件中的方法失败了。

buildTypes {

        debug {
            manifestPlaceholders = [DEBUG: "true"]

            // 是否进行混淆
            minifyEnabled true
            shrinkResources true
            // 混淆文件的位置
            proguardFiles 'proguard-rules.pro'

            signingConfig signingConfigs.release
        }

        release {
            manifestPlaceholders = [DEBUG: "false"]

            // 是否进行混淆
            minifyEnabled true
            shrinkResources true
            // 混淆文件的位置
            proguardFiles 'proguard-rules.pro'

            signingConfig signingConfigs.release
        }
    }

要注意到官网的所有的内容啊。

onMarkerClick 返回值的误导

之前执行的好好的代码,升级到最新版本后,突然出问题了,当点击marker的时候,事件传递到了下一层,导致了触发了2个事件。网上查看onMarkerClick方法的时候是不是有问题

高德地图升级失败及onMarkerClick方法使用的坑_第2张图片
网上

说明都是一边倒的说返回false的作用是,不将marker移动到地图中心。
OK, 那就是说没有问题,之前的代理逻辑是这样的。继续找其他原因。1天又过去了。!_! 最后么有版本,下载了官方的文档,看到了:
高德地图升级失败及onMarkerClick方法使用的坑_第3张图片
官网

返回false是指点击事件向下传递,Oh,My God。 真的是晴天霹雳啊。

请相信官方的说明,网上什么都是假的,包括美女。

高德地图下载地址。

// END 2018年3月10日 晴

你可能感兴趣的:(高德地图升级失败及onMarkerClick方法使用的坑)