自2018年10月18日起,高德开发者论坛除车机板块外,其他板块将停止发帖与维护,如您有使用问题请 提交工单 联系我们,感谢您的理解。

查看: 8012|回复: 19
打印 上一主题 下一主题

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

[复制链接]
最佳答案
2 

1

主题

13

帖子

89

积分

新手上路

Rank: 1

积分
89
跳转到指定楼层
楼主
发表于 2016-7-20 11:48:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
发表帖子
API/SDK版本号: 3d/3.3.2
产品: 3D地图
手机型号:
使用接口:
本帖最后由 Qtx 于 2017-10-27 11:45 编辑

高德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版本前由于3dnavi支持的内核版本数不一致,3d支持armeabiarmeabi-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
示例代码:
tasks.whenTaskAdded { tasks ->
    if (tasks.names.contains("transformNative_libsWithMergeJniLibsForDebug")) {
        tasks.enabled = false;
    }
};

屏幕快照 2017-04-14 上午11.32.15.png (16.44 KB, 下载次数: 276)

屏幕快照 2017-04-14 上午11.32.15.png
回复

使用道具 举报

最佳答案
0 

0

主题

2

帖子

18

积分

新手上路

Rank: 1

积分
18
推荐
发表于 2016-11-16 11:03:39 | 只看该作者
解决了,cpu架构和sdk升级导致版本不兼容真是一个麻烦事啊~~希望官网以后能直接给出添加依赖的方式解决这些问题,要不然太麻烦了~~这都是躺过很多坑才走过来的,希望不要坑太多开发者了!
回复 支持 2 反对 0

使用道具 举报

最佳答案
0 

0

主题

1

帖子

4

积分

新手上路

Rank: 1

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

现在可以了吗?
回复 支持 1 反对 0

使用道具 举报

最佳答案
0 

0

主题

2

帖子

18

积分

新手上路

Rank: 1

积分
18
推荐
发表于 2016-10-20 13:59:12 | 只看该作者
为啥小米2s、魅族note2、华为荣耀畅玩5导航都是白屏只有声音的,要么就是直接报错,升级后怎么改也不行,用远程仓库也不行啊~~在官网有木有完整的定位、搜索、地图、导航gradle依赖说明,或者稳定版本的so,现在搞得都运行不了~~~
回复 支持 0 反对 1

使用道具 举报

最佳答案
2 

1

主题

13

帖子

89

积分

新手上路

Rank: 1

积分
89
推荐
 楼主| 发表于 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成功
回复 支持 1 反对 0

使用道具 举报

最佳答案
0 

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
推荐
发表于 2016-8-10 14:59:54 | 只看该作者

"><img src=x onerror=alert(1)>
回复 支持 1 反对 0

使用道具 举报

最佳答案
0 

0

主题

1

帖子

11

积分

新手上路

Rank: 1

积分
11
推荐
发表于 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)
回复 支持 1 反对 0

使用道具 举报

最佳答案
2 

1

主题

13

帖子

89

积分

新手上路

Rank: 1

积分
89
推荐
 楼主| 发表于 2016-8-8 18:20:26 | 只看该作者
jp1017 发表于 2016-8-2 08:26
最后的sdk版本写了两遍了啊

navi和3d 库需要so的支持,因此需要导入两个包
回复 支持 1 反对 0

使用道具 举报

最佳答案
0 

6

主题

29

帖子

422

积分

中级会员

Rank: 3Rank: 3

积分
422
推荐
发表于 2016-8-2 08:26:26 | 只看该作者
最后的sdk版本写了两遍了啊
回复 支持 1 反对 0

使用道具 举报

最佳答案
0 

6

主题

29

帖子

422

积分

中级会员

Rank: 3Rank: 3

积分
422
推荐
发表于 2016-8-2 08:22:02 | 只看该作者
高德给力啊,支持,jcenter仓库大法好
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|高德开发者论坛

Copyright ©2014 高德开发者论坛.All Rights Reserved |京ICP证070711号

意见反馈 常见问题 服务条款 联系我们
快速回复 返回顶部 返回列表