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

使用条件:
1.    IDE环境为AndroidStudio
2.    网络可以访问到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三个sdk
code:
    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.0
3.    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  省略)
2d
4.2.0
com.amap.api:map2d:4.2.0
3d
5.0.0
com.amap.api:3dmap:5.0.0
navi
5.0.1
com.amap.api:navi-3dmap:5.0.1
search
5.0.0
com.amap.api:search:5.0.0
location
3.3.0
com.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
示例代码:
task.whenTaskAdded{task->
      if(task.name.contains('transformNative_libsWithMergeJniLibsForDebug')){
               task.enable=false
      }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值