当我尝试开始导航时:
MapboxNavigation navigation = new MapboxNavigation(this, Mapbox.getAccessToken(), options);
navigation.startNavigation(route);
我在运行时遇到以下错误:
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/mapbox/services/android/telemetry/location/LostLocationEngine;
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mapbox.services.android.telemetry.location.LostLocationEngine"
实际上我无法从该位置导入类,但是LocationEngine可以从com.mapbox.services.android.location.LostLocationEngine
获得。我认为这可能与依赖关系有关。这是我在Gradle文件中使用mapbox构建的:
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-places:0.3.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-locationlayer:0.5.0'
implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation:0.12.0'
我如何解决这个问题,以便在我的应用中开始导航?
答案 0 :(得分:0)
<强> TL:DR 强>
使用版本0.13.0-SNAPSHOT
repositories {
mavenCentral()
maven { url "http://oss.sonatype.org/content/repositories/snapshots/" }
}
dependencies {
implementation'com.mapbox.mapboxsdk:mapbox-android-navigation:0.13.0-SNAPSHOT'
}
<强>解释强>
问题是LocationLayer
和Places
正在使用Mapbox 6(LocationLayer 0.5.0,Places 0.3.0),但导航使用的是Mapbox 5(Navigation 0.12.0)
当您组合这3个库时,Gradle将尝试使用最新版本的依赖项,当2个库共享相同时。
在我们的例子中,mapbox-android-telemetry
将从2.2.10升级到3.0.2。这就是为什么当nagivation试图在LostLocationEngine
(v2)下找到com.mapbox.services.android.telemetry.location
时它失败了,因为这个类别转移到com.mapbox.services.android.location
(v3)。
如果您想知道如何检查依赖项版本,look here
答案 1 :(得分:0)
将此行添加到gradle中,或者如果您已经拥有mapbox-android-services,则将其版本更改为2.2.9。
implementation ('com.mapbox.mapboxsdk:mapbox-android-services:2.2.9@aar'){
transitive=true
}