Mapbox - LostLocationEngine 解析失败
Mapbox - Failed resolution of LostLocationEngine
当我尝试开始导航时:
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"
确实我无法从该位置导入 class,但是 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'
我该如何解决这个问题才能在我的应用程序中开始导航?
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), but the navigation is using Mapbox 5 (Navigation 0.12.0)。
当您组合这 3 个库时,Gradle 将在 2 个库共享相同库时尝试使用最新版本的依赖项。
在我们的例子中,mapbox-android-telemetry
将从 2.2.10 升级到 3.0.2。这就是为什么当 nagivation 试图在 com.mapbox.services.android.telemetry.location
(v2) 下找到 LostLocationEngine
时它失败了,因为这个分类移动到 com.mapbox.services.android.location
(v3).
如果你想知道如何查看依赖版本,look here
将此行添加到您的 gradle 或者如果您已经有 mapbox-android-服务,则将其版本更改为 2.2.9。
implementation ('com.mapbox.mapboxsdk:mapbox-android-services:2.2.9@aar'){
transitive=true
}
当我尝试开始导航时:
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"
确实我无法从该位置导入 class,但是 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'
我该如何解决这个问题才能在我的应用程序中开始导航?
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), but the navigation is using Mapbox 5 (Navigation 0.12.0)。
当您组合这 3 个库时,Gradle 将在 2 个库共享相同库时尝试使用最新版本的依赖项。
在我们的例子中,mapbox-android-telemetry
将从 2.2.10 升级到 3.0.2。这就是为什么当 nagivation 试图在 com.mapbox.services.android.telemetry.location
(v2) 下找到 LostLocationEngine
时它失败了,因为这个分类移动到 com.mapbox.services.android.location
(v3).
如果你想知道如何查看依赖版本,look here
将此行添加到您的 gradle 或者如果您已经有 mapbox-android-服务,则将其版本更改为 2.2.9。
implementation ('com.mapbox.mapboxsdk:mapbox-android-services:2.2.9@aar'){
transitive=true
}