如何解决:Failed to resolve: com.mapbox.mapboxsdk:mapbox-android-sdk:9.5.0

7

当我尝试在Android Studio中使用Mapbox时,遇到了这个问题。


无法解析:com.mapbox.mapboxsdk:mapbox-android-sdk:9.5.0


问题是什么?


我的build.gradle依赖项


dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.5.0'
}

我的 build.gradle 项目

buildscript {
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"
    }
}

allprojects {
    repositories {
  google()
        jcenter()
        maven { url 'https://mapbox.bintray.com/mapbox' }

    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}
10个回答

14

这个解释不太清楚,你需要创建一个私有令牌才行,公共令牌是不行的。在创建令牌时,有一个“读取:下载”字段,请选中它并生成您的令牌。该令牌应该可以使用。


9

版本9.5.0(和9.6.0)也已存在(请参见发布说明:https://github.com/mapbox/mapbox-gl-native-android/blob/main/CHANGELOG.md)。只是随着Mapbox Maps SDK > v9.4.0的推出,访问Maven仓库的方式发生了变化。

我不建议您使用像mapbox-android-sdk:8.6.7这样的过时版本,而应选择com.mapbox.mapboxsdk:mapbox-android-sdk:9.6.0

现在要访问Maven仓库的新方法在此处有文档记录:https://docs.mapbox.com/android/maps/overview/#configure-credentials

现在您需要创建一个秘密访问令牌并将其用于访问Maven仓库,即库所在位置。 您的模块级build.gradle应包含以下内容:

allprojects {
  repositories {
    maven {
      url 'https://api.mapbox.com/downloads/v2/releases/maven'
      authentication {
          basic(BasicAuthentication)
      }
      credentials {
        // Do not change the username below.
        // This should always be `mapbox` (not your username). 
          username = 'mapbox'
          // Use the secret token you stored in gradle.properties as the password
          password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: ""
      }
    }
  }
}

1
它给我这个错误:“无法解决依赖关系':app@debugUnitTest/compileClasspath':无法解决com.mapbox.mapboxsdk:mapbox-android-sdk:9.6.0。” - roro roor
1
我遇到了完全相同的问题。我也在遵循这个文档。出现了和@roro roor提到的相同错误。 可能是因为步骤6中提到的Gradle依赖项不匹配导致的错误吗? - Moritz Kampfinger
3
看起来这是一个范围(scope)的问题。创建一个具有"Downloads:Read"范围(scope)的令牌(token)应该可以解决问题。 - szaske
这对我没有用。仍然无法解决Mapbox SDK。 - Axes Grinds
@AxesGrinds 我也遇到了同样的问题,即使我按照这里所有的答案操作...有趣的是,将版本降级为 implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:8.6.7' 会有所帮助。 - RickertBrandsen
显示剩余3条评论

3

只需使用此安全版本,即可在您的Gradle上运行。

implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.0'){
        exclude group: 'group_name', module: 'module_name'
    }

3
在之前的回答中,通过生成私钥并在maven中央库找到实际版本来解决了问题,写作时9.7和10都不在maven中央库中,使用此处找到的版本9.2。可在以下链接找到:https://mvnrepository.com/artifact/com.mapbox.mapboxsdk/mapbox-android-sdk 编辑:通过修改settings.gradle条目repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)为repositoriesMode.set(RepositoriesMode.PREFER_PROJECT),并在build.gradle中添加mavenCentral()和google()到allprojects repositories,可以使用9.7.0 mapbox。
allprojects {
    repositories {
        google()
        mavenCentral()
        
        allprojects {
            repositories {
                maven {
                    url 'https://api.mapbox.com/downloads/v2/releases/maven'
                    authentication {
                        basic(BasicAuthentication)
                    }
                    credentials {
                        // Do not change the username below.
                        // This should always be `mapbox` (not your username).
                        username = 'mapbox'
                        // Use the secret token you stored in gradle.properties as the password
                        password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: ""
                    }
                }
            }
        }
    }
}

1

我唯一让我的项目最终工作的方法是在这里附加的项目中寻找了一些指针: https://github.com/mapbox/mapbox-maps-android/issues/614#issue-988592394 它使用com.mapbox.maps:android:10.0.0-rc.3,实际上在我的机器上运行。

为了使我的项目工作,我不得不更改settings.gradle,从这个开始:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    repositories {
        google()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
    }
}
rootProject.name = "Mapbox Map"
include ':app'

转换为:

rootProject.name = "Mapbox Map"
include ':app'

1

不妨试试一个实际存在的版本?

implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:8.6.7'

4
这是过时的版本。请查看下面我的回复,了解如何解决这个问题。 - Moritz
刚刚发现有两个分支似乎都在开发中。一个使用旧的访问Maven仓库的方式(8.x),另一个使用新的方式(>9.4)。但是请查看下面我的回复,了解如何使用最新版本。 - Moritz

1

screenshot

Mapbox提供给您的默认令牌是我认为您正在使用的,您需要创建一个新的私有令牌并检查此权限 DOWNLOAD:READ ,然后它应该可以工作。

我创建了一个新的令牌,并将其命名为first,您可以随意更改名称。


0
你应该移除这行代码:maven{ url 'https://mapbox.bintray.com/mapbox' }
 repositories {
    google()
    jcenter()
    mavenCentral()
    /**
    if you using => maven { url 'https://mapbox.bintray.com/mapbox' }
     so remove this line because mapbox remove repository from https://mapbox.bintray.com/mapbox
    * */
    maven { url "https://oss.sonatype.org/content/groups/public/" }
    maven { url 'https://jitpack.io' }
    maven {
        url 'https://api.mapbox.com/downloads/v2/releases/maven'
        authentication {
            basic(BasicAuthentication)
        }
        credentials {
            // Do not change the username below.
            // This should always be `mapbox` (not your username).
            username = 'mapbox'
            // Use the secret token you stored in gradle.properties as the password
            password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: ""
        }
    }
}

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0
问题出在凭据上;只需将密码从以下内容替换为: password = MAPBOX_DOWNLOADS_TOKEN 或者 password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: ""
改为: password = "您的令牌"
并确保令牌位于双引号 "" 之间。

0
您可以在此处找到Mapbox GL Android的文档:https://docs.mapbox.com/android/maps/guides/install/

正如Mapbox_gl插件开发者所说,这是社区驱动的,而不是官方的Mapbox产品。

因此,请仅针对Flutter Android项目执行文档中的https://docs.mapbox.com/android/maps/guides/install/#configure-credentials部分。

  • 创建一个带有Downloads:Read权限的秘密访问令牌。

  • 将您的秘密令牌配置在android/gradle.properties中,如MAPBOX_DOWNLOADS_TOKEN=YOUR_SECRET_MAPBOX_ACCESS_TOKEN

  • 在app/source/main/AndroidManifest.xml中配置权限

    <!-- 必须包含该权限 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    
    <!-- 只有当您的应用程序从精准位置访问中受益时才包含 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
  • 请记住在项目中MapboxMap小部件的accessToken属性中提供相同的秘密键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接