3

当我尝试开始导航时:

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'

我该如何解决这个问题,以便我可以在我的应用程序中开始导航?

4

2 回答 2

0

TL:博士

使用版本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.0Places 0.3.0),但导航使用的是 Mapbox 5(Navigation 0.12.0)。

当您组合这 3 个库时,当 2 个库共享相同时,Gradle 将尝试使用最新版本的依赖项。

在我们的例子中,mapbox-android-telemetry将从 2.2.10 升级到 3.0.2。这就是为什么当导航试图LostLocationEnginecom.mapbox.services.android.telemetry.location(v2) 下查找时失败的原因,因为这个分类移动到com.mapbox.services.android.location(v3)。

如果你想知道如何检查依赖版本,看这里

于 2018-04-28T15:32:22.210 回答
0

将此行添加到您的 gradle,或者如果您已经拥有 mapbox-android-services,则将其版本更改为 2.2.9。

implementation ('com.mapbox.mapboxsdk:mapbox-android-services:2.2.9@aar'){
    transitive=true
}
于 2018-08-21T06:46:53.463 回答