美文网首页
安卓jar包冲突问题

安卓jar包冲突问题

作者: 辣条少年J | 来源:发表于2020-04-20 21:03 被阅读0次

          前段时间Flutter集成高德的导航功能的时候,开始是使用的插件flutter_amap_plugin,但是发现它的高德sdk版本有点低,而且没有实现输入起始点坐标导航的功能。其它的诸如 如果是自己添加上去,由于它sdk版本比较低,现有的文档已经找不到那个版本的sdk的接口是什么,所以决定自己手动写个导航的插件flutter_navi_plugin。
          由于使用了amap_map_fluttify这个地图插件,它包含了高德地图功能,里面包含了Android_Map3D_SDK_V6.9.2_20190709.jar(下文简称"6.9.jar")包这个库。在写导航插件的时候我在高德官方下载了导航的sdk是AMap3DMap_7.2.1_AMapNavi_7.2.0_20200115.jar(下文简称"7.2.jar")这个jar包,这个jar包包含了地图和定位。这个时候如果同时引用这两个插件的话会引起多定义冲突,因为其实后者包含了前者。
          开始我想的办法是希望能够屏蔽掉7.2.jar里跟6.9里jar相同的包名,网上查了后说的是使用exclude group屏蔽掉相关联的模块,需要放在App住Module里的build.gradle里,像下面这样:

    dependencies {
    compile (project(':Speech')){
            //解决Gson重复依赖问题,与passport-1.4.2.jar有冲突
            exclude group: 'com.google.code.gson', module: 'gson'       
        }
    }
    

    额,试过这种方式,考虑到需要过滤的jar包内容较多,就使用了下面的方式

    解决方法

          我还是决定使用7.2.jar这个jar包,然后让amap_map_fluttify依赖flutter_navi_plugin,当然amap里要取消掉对6.9.jar的引用。当然,6.9和7.2的api有些许不同,不过所幸两者版本相差不大。但是一开始我用这种方式amap_map_fluttify始终无法连接到flutter_navi_plugin里的jar包的相关类,经过一段时间后找到原因是由于我对包的引用使用的是compile的引用方式,即compile files('xxx.jar'),这种引用方式外部无法使用,正确的方式是api files('xxx.jar')

    compile files('xxx.jar')
    //改为
    api files('xxx.jar')
    

    由于两个版本的api还是有些许差异,amap_map_fluttify本来实现了很多插件方法,总共有差不多1w多行代码,所以需要改动的地方也很多,不过由于我只用到了地图相关功能,只需改动地图相关的方法其他注释就可。

    相关文章

      网友评论

          本文标题:安卓jar包冲突问题

          本文链接:https://www.haomeiwen.com/subject/xhidihtx.html