添加Mapbox导航依赖后Gradle构建失败,请求排查原因
我看你在集成Mapbox Navigation API时遇到了依赖解析的问题,其他Mapbox依赖能正常获取,但mapbox-android-navigation:0.11.1始终找不到,结合你给出的错误信息和依赖配置,问题出在仓库配置缺失上。
先还原你的场景:
你在app/build.gradle中添加了导航依赖:
dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:support-core-utils:25.4.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation:0.11.1' implementation 'com.android.support:appcompat-v7:25.4.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:design:25.4.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:5.5.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' }
但构建时出现错误:
Error:Could not resolve all files for configuration ':app:debugCompileClasspath'.
Could not resolve com.mapbox.mapboxsdk:mapbox-android-navigation:0.11.1.
Required by: project :app
Could not resolve com.mapbox.mapboxsdk:mapbox-android-navigation:0.11.1.
Could not get resource 'https://dl.google.com/dl/android/maven2/com/mapbox/mapboxsdk/mapbox-android-navigation/0.11.1/mapbox-android-navigation-0.11.1.pom '.
Could not GET 'https://dl.goo...
问题原因
mapbox-android-navigation:0.11.1是一个非常早期的版本,这个版本并没有发布到Google Maven仓库(也就是错误信息里的dl.google.com/maven2),而你的Gradle默认只在Google Maven等公共仓库查找,所以找不到这个依赖。而你能正常获取的mapbox-android-sdk:5.5.0,当时是发布在Google Maven的,所以没有问题。
解决步骤
修改项目根目录的build.gradle文件
在allprojects下的repositories块中,添加Mapbox旧版本的专属仓库:allprojects { repositories { google() jcenter() // 旧版本依赖可能需要jcenter支持,注意jcenter已归档,但临时用于旧依赖下载是可行的 maven { url 'https://mapbox.bintray.com/mapbox' } } }这个仓库是Mapbox早期用来发布旧版本依赖的地址,添加后Gradle就能找到
mapbox-android-navigation:0.11.1的资源了。验证代理配置
虽然你说已经设置了代理,但请确认代理能正常访问https://mapbox.bintray.com这个域名,避免因为代理拦截导致资源无法下载。
额外建议
这个0.11.1版本的导航库已经非常老旧了,不仅缺少很多新功能,还可能存在安全漏洞和兼容性问题。如果你的项目没有强制要求使用旧版本,建议升级到Mapbox Navigation的最新稳定版本,同时记得按照最新文档配置对应的仓库。
内容的提问来源于stack exchange,提问作者udenjoe

