amap_151****882 发表于 2016-7-20 11:48:41

高德SDK使用jcenter/maven远程获取类库及so解决方案

本帖最后由 Qtx 于 2017-10-27 11:45 编辑

高德SDK使用jcenter/maven远程获取类库及so解决方案
使用条件:1.    IDE环境为AndroidStudio2.    网络可以访问到jcenter或maven使用步骤:1.    在module的build.gradle中添加maven或jcenter仓库地址(Android Studio默认会在project的build.gradle为所有module自动添加jcenter的仓库地址,如果已存在,则不需要重复添加)确认project的build.gradle中是否有如下配置:code:allprojects{   repositories {   jcenter()}}
如果有的话请进入第二步。若没有则可以添加上述红框内的配置,或者只在需要使用sdk的module中为build.gradle添加repositories配置,如图:code: repositories {
    jcenter()
}
2.    在module的dependencies中添加SDK依赖配置,下图以3d的demo工程为例展示了如何添加3d,location,search三个sdkcode:   dependencies {      compile 'com.amap.api:3dmap:5.0.0'
    compile 'com.amap.api:search:5.0.0'
    compile 'com.amap.api:location:3.3.0'
}
3.    执行Android Studio中gradle的build注意:1.    如果build失败提示com.amap.api:XXX:X.X.X 找不到,确认拼写及版本号是否正确,如果访问不到jcenter可以切换为maven仓库尝试一下2.    3d地图SDK与navi导航SDK最新的库即包含jar也包含了so,因此只需要引入一行compile,支持的版本号从5.0.0开始,请注意名称与之前版本的区别          3d:'com.amap.api:3dmap:5.0.0          navi:'com.amap.api:navi-3dmap:5.0.03.    5.0.0版本前navi导航SDK因为依赖定位SDK,所以请不要同时引入5.0.0版本以下的location和navi-solo SDK,因为navi中已经包含了location需要的类库,    5.0.0版本后,导航SDK依赖了3d SDK,因此请不要在5.0.0版本之上同时引用3dmap和navi-3dmap SDK示例导航demo配置如下:code:compile 'com.amap.api:navi-3dmap:5.0.0'
4.    所有SDK版本号均与官网发版一致,如果使用group:artifact:latest.integration这种在版本号后附上版本号占位符的引入形式,则gradle在每次build的时候会自动搜索并拉取最新版本的SDK。这种方式对build时间有一些影响,请权衡使用。示例:会拉取导航5.0.0以上最新的版本
code://使用版本号占位符,推荐
compile 'com.amap.api:navi-3dmap:latest.integration'
5.   使用gradle配置指定内核版本:5.0.0版本后,3d与navi统一支持全平台(包含armeabi,armeabi-v7a,arm64-v8a,x86,x86_64),不需要特殊配置,如果不希望支持五种类型,请在官网下载jar包,并自行去除多余的平台so而5.0.0版本前由于3d与navi支持的内核版本数不一致,3d支持armeabi,armeabi-v7a,而navi只支持armeabi,因此运行在支持armeabi-v7a的平台上时会出现找不到so问题,所以在使用navi SDK和3d SDK时建议使用gradle配置只支持指定内核即armeabi避免程序崩溃。具体代码如下:
a.在项目application model的build.gradle添加如下节点android {   defaultConfig {      ndk {            abiFilters 'armeabi'       }   }}b.然后在project的根目录(和local.properties同级)新建一个gradle.properties文本文件,文件里面加入下面这行       android.useDeprecatedNdk=true同理,如果只使用3d SDK建议也使用abiFilters 'armeabi' ,'armeabi-v7a'配置来避免与其他SDK产生不兼容
6.    其他build失败问题请确认网络及Android Studio本身gradle编译问题,相关疑问可以在论坛中发帖留言,也欢迎大家积极反馈相关问题

截至到本帖发布时间2017-04-14各个SDK最新版本情况:
sdk版本引入代码(compile 省略)
2d4.2.0com.amap.api:map2d:4.2.0
3d5.0.0com.amap.api:3dmap:5.0.0
navi5.0.1com.amap.api:navi-3dmap:5.0.1
search5.0.0com.amap.api:search:5.0.0
location3.3.0com.amap.api:location:3.3.0



常见问题:1.com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry
class类重复,请检查是否导入了重复的类库,如5.0.0版本以下同时引入location与导航,或5.0.0版本以上同时引入导航与3d地图
2.导航出现白屏或崩溃
考虑so的版本问题,比如运行手机为armeabi-v7a内核,具体参考上文注意第五条
3.com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK lib/x86/libRoadLineRebuildAPI.so
首先确定除了3d的so是否同时引用了navi的so,如果的确是引用了一次so并报错时,仔细阅读出错信息,找到对应的gradle的task。部分AS的build版本下多module的编译会报so重复问题,如主module为app,地图SDK是在一个Android Library module名为maplib进行的配置,app中配置了compile project为maplib,某些gradle插件版本下,编译中会首先合并两个module的compile配置,因此地图SDK会被app module导入一次,然后app还有个task 名字为transformNativeLibsWithMergeJniLibsForDebug,该task会将依赖的module中的jni在做一次merge,因而导致so重复,解决方案为在app的配置中跳过该task
示例代码:
tasks.whenTaskAdded { tasks ->
    if (tasks.names.contains("transformNative_libsWithMergeJniLibsForDebug")) {
      tasks.enabled = false;
    }
};

amapZRwe5HdA 发表于 2016-11-16 11:03:39

:lol解决了,cpu架构和sdk升级导致版本不兼容真是一个麻烦事啊~~希望官网以后能直接给出添加依赖的方式解决这些问题,要不然太麻烦了~~这都是躺过很多坑才走过来的,希望不要坑太多开发者了!

amap_178****573 发表于 2016-10-28 17:58:48

淡然灬一笑 发表于 2016-10-20 13:59
为啥小米2s、魅族note2、华为荣耀畅玩5导航都是白屏只有声音的,要么就是直接报错,升级后怎么改也不行, ...

现在可以了吗?

amapZRwe5HdA 发表于 2016-10-20 13:59:12

:L为啥小米2s、魅族note2、华为荣耀畅玩5导航都是白屏只有声音的,要么就是直接报错,升级后怎么改也不行,用远程仓库也不行啊~~在官网有木有完整的定位、搜索、地图、导航gradle依赖说明,或者稳定版本的so,现在搞得都运行不了~~~:Q

amap_151****882 发表于 2016-10-17 12:13:12

amap_53760790 发表于 2016-8-10 14:09
我再x86_64的Android6.0模拟器上运行就会出错,小米5也会报错。报的都是找不到.so的问题。( java.lang.Uns ...

是什么sdk?你可以去gradle缓存查找下是否下载so成功

amap_137****560 发表于 2016-8-10 14:59:54


amap_183****765 发表于 2016-8-10 14:09:24

我再x86_64的Android6.0模拟器上运行就会出错,小米5也会报错。报的都是找不到.so的问题。( java.lang.UnsatisfiedLinkError: No implementation found for long com.autonavi.amap.mapcore.MapCore.nativeNewInstance)

amap_151****882 发表于 2016-8-8 18:20:26

jp1017 发表于 2016-8-2 08:26
最后的sdk版本写了两遍了啊

navi和3d 库需要so的支持,因此需要导入两个包

amap_183****380 发表于 2016-8-2 08:26:26

最后的sdk版本写了两遍了啊:D

amap_183****380 发表于 2016-8-2 08:22:02

高德给力啊,支持,jcenter仓库大法好:lol
页: [1] 2
查看完整版本: 高德SDK使用jcenter/maven远程获取类库及so解决方案