高德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
      }
}
根据提供的引用内容,Gradle同步失败的错误信息是"Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.pom'. Received status code 400 from server: Bad Request" [1和"Could not GET 'https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4.0/protobuf-java-3.4.0.jar'" [2。同时在给出的完整build.gradle代码中,指定了三个仓库: maven.aliyun.com, google()和jcenter() [3。 根据提供的问题,无法找到与"http://maven.aliyun.com/nexus/content/repositories/google/com/android/tools/build/gradle/4.0.2/gradle-4.0.2.pom"相关的引用内容。请提供更多的引用内容或详细说明问题,以便我能够更准确地回答你的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Gradle sync failed: Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/g](https://blog.csdn.net/qq_40811718/article/details/86667523)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Gradle sync failed: Could not GET https://jcenter.bintray.com/com/google/protobuf/protobuf-java/3.4](https://blog.csdn.net/qq_34988341/article/details/106503051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【Android Studio】出现Could not get resource 'https://jcenter.bintray.com/xxxxx/xxx.jar的问题解决...](https://blog.csdn.net/qq_35941776/article/details/104105698)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值