Gradle 错误:找不到任何匹配 com.android.tools.build:gradle:2.2.+ [重复]

Posted

技术标签:

【中文标题】Gradle 错误:找不到任何匹配 com.android.tools.build:gradle:2.2.+ [重复]【英文标题】:Gradle error: Could not find any matches for com.android.tools.build:gradle:2.2.+ [duplicate] 【发布时间】:2019-05-11 17:54:41 【问题描述】:

这是一个 React Native 项目。在另一台机器上工作正常,但一旦移到我的机器上它就失败了。

我找到的大多数解决方案都建议将 jcenter() 添加到项目级别 gradle.build 的存储库中。就我而言,它已经被添加了。

Gradle 同步失败并出现此错误:

Could not find any matches for com.android.tools.build:gradle:2.2.+ as no versions of com.android.tools.build:gradle are available. Searched in the following locations: https://jcenter.bintray.com/com/android/tools/build/gradle/maven-metadata.xml https://jcenter.bintray.com/com/android/tools/build/gradle/ Required by: project :react-native-image-picker

Android build.gradle 文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript 
    repositories 
        google()
        mavenLocal()
        mavenCentral()
        jcenter()

    dependencies 
classpath 'com.android.tools.build:gradle:3.0.1'    


allprojects 
    repositories 
        google()
        mavenCentral()
        mavenLocal()
        jcenter()
        maven 
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        

       maven  url 'https://jitpack.io' 
    


ext 
    buildToolsVersion = "27.0.3"
    minSdkVersion = 19
    compileSdkVersion = 26
    targetSdkVersion = 26
    supportLibVersion = "26.1.0"

    googlePlayServicesVersion = "11.8.0"
    androidMapsUtilsVersion = "0.5+"

subprojects  subproject ->
    afterEvaluate 
        if ((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) 
            android 
                variantFilter  variant ->
                    def names = variant.flavors*.name
                    if (names.contains("reactNative51") || names.contains("reactNative55")) 
                        setIgnore(true)
                    
                
            
        
    


应用构建.gradle:

apply plugin: "com.android.application"

import com.android.build.OutputFile

/**
 * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
 * and bundleReleaseJsAndAssets).
 * These basically call `react-native bundle` with the correct arguments during the Android build
 * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
 * bundle directly from the development server. Below you can see all the possible configurations
 * and their defaults. If you decide to add a configuration block, make sure to add it before the
 * `apply from: "../../node_modules/react-native/react.gradle"` line.
 *
 * project.ext.react = [
 *   // the name of the generated asset file containing your JS bundle
 *   bundleAssetName: "index.android.bundle",
 *
 *   // the entry file for bundle generation
 *   entryFile: "index.android.js",
 *
 *   // whether to bundle JS and assets in debug mode
 *   bundleInDebug: false,
 *
 *   // whether to bundle JS and assets in release mode
 *   bundleInRelease: true,
 *
 *   // whether to bundle JS and assets in another build variant (if configured).
 *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
 *   // The configuration property can be in the following formats
 *   //         'bundleIn$productFlavor$buildType'
 *   //         'bundleIn$buildType'
 *   // bundleInFreeDebug: true,
 *   // bundleInPaidRelease: true,
 *   // bundleInBeta: true,
 *
 *   // whether to disable dev mode in custom build variants (by default only disabled in release)
 *   // for example: to disable dev mode in the staging build type (if configured)
 *   devDisabledInStaging: true,
 *   // The configuration property can be in the following formats
 *   //         'devDisabledIn$productFlavor$buildType'
 *   //         'devDisabledIn$buildType'
 *
 *   // the root of your project, i.e. where "package.json" lives
 *   root: "../../",
 *
 *   // where to put the JS bundle asset in debug mode
 *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
 *
 *   // where to put the JS bundle asset in release mode
 *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in debug mode
 *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in release mode
 *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
 *
 *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
 *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
 *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
 *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
 *   // for example, you might want to remove it from here.
 *   inputExcludes: ["android/**", "ios/**"],
 *
 *   // override which node gets called and with what additional arguments
 *   nodeExecutableAndArgs: ["node"],
 *
 *   // supply additional arguments to the packager
 *   extraPackagerArgs: []
 * ]
 */

project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"

/**
 * Set this to true to create two separate APKs instead of one:
 *   - An APK that only works on ARM devices
 *   - An APK that only works on x86 devices
 * The advantage is the size of the APK is reduced by about 4MB.
 * Upload all the APKs to the Play Store and people will download
 * the correct one based on the CPU architecture of their device.
 */
def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = false

android 
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig 
        applicationId "com.sos"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName "1.0"
  missingDimensionStrategy "RNN.reactNativeVersion", "reactNative57"

        ndk 
            abiFilters "armeabi-v7a", "x86"
        
    
    splits 
        abi 
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        
    
        signingConfigs 
        release 
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) 
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            
        
    
    buildTypes 
        release 
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release

        
    
    // applicationVariants are e.g. debug, release
    applicationVariants.all  variant ->
        variant.outputs.each  output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
            def versionCodes = ["armeabi-v7a":1, "x86":2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null)   // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            
        
    
    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    

configurations.all 
    resolutionStrategy.eachDependency  DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support' && requested.name != 'multidex') 
            details.useVersion "$rootProject.ext.supportLibVersion"
        
    

dependencies 
    implementation project(':react-native-fetch-blob')
    implementation project(':react-native-linear-gradient')
    implementation project(':react-native-maps')
    implementation project(':react-native-image-picker')
    implementation project(':react-native-vector-icons')
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.android.support:appcompat-v7:$rootProject.ext.supportLibVersion"
    implementation "com.facebook.react:react-native:+"  // From node_modules
    implementation project(':react-native-navigation')
    implementation 'com.android.support:design:25.4.0'
    implementation "com.android.support:appcompat-v7:$rootProject.ext.supportLibVersion"
    implementation project(':react-native-maps')



// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) 
    from configurations.compile
    into 'libs'

顺便说一句,在app build.gralde 文件中,import com.android.build.OutputFile 中的android 抛出错误:无法解决

编辑:

现在构建过程的一部分已经成功通过,但我开始收到此错误: Unable to find a matching configuration of project :react-native-fetch-blob: None of the consumable configurations have attributes.

【问题讨论】:

试用 2.2.3 的确切版本,它对我有用 It seems it's not a problem you can solve,一些库未从 jCenter 发布。 看来 jCenter 已经解决了这个问题,现在再次同步项目对我有用。 【参考方案1】:

对于使用 react-native-vector-icons 包遇到此错误的人:

    升级 package.json 中的“react-native-vector-icons”:“^6.0.2”

来源:https://github.com/oblador/react-native-vector-icons/issues/605#issuecomment-446081342

【讨论】:

【参考方案2】:

看起来有些存储库被错误地删除了,据 Google 代表说,这是他们目前正在努力恢复的东西:

https://issuetracker.google.com/issues/120759347#comment30

大家好,

我们现在知道发生了什么,并且正在努力将其回滚 明智的方式。以下是问题的基本概述:

    jCenter 上存在一些虚假/格式错误的 com.google.* 和 com.android.* 工件 这些工件中的大多数都正确托管在 maven.google.com(又名 google())上 如果您的构建系统在找到 Google Maven 版本之前找到了 jCenter 版本,那么您的构建将会中断 Google 注意到了这一点,并要求 jFrog 基本上删除 com.google.* 和 com.android.* 下的所有内容,因为我们假设它 也都在 Google Maven 上 我们错了:-( 从 jCenter 中删除的一些工件会导致您的构建出现错误

我们正在做一些事情:

一些已删除的库正在推送到 Google Maven。 这包括 com.google.gms:google-services 插件、firebase 性能插件和 Exoplayer。尝试将 google() 添加到您的 buildscript 和 app repositories 块看看是否有帮助。我们 希望这可以帮助很多人,但不是每个人。 * 我们正在工作 列出哪些库被不当删除。一些 上面第 4 步中删除的内容是有充分理由的,所以我们 也不想恢复这些。

正如我之前所说,我们讨厌我们破坏了您的构建,我们很感激 请耐心等待我们修复它!

山姆

与此同时,他们还提出了以下解决方法:

https://issuetracker.google.com/issues/120759347#comment36

状态

Google 服务库 (com.google.gms:google-services) 库已恢复,请参阅更新 #31。 已向 jCenter 提交重新发布 bintray.com/google 上托管的所有存储库的请求。 JFrog 的 jCenter 管理员 正在努力让他们为我们重新上线,在这一点上,我们只能 做的是等待。我们预计他们很快就会上线。有些图书馆是 已经回来了。 jcenter.bintray.com 和 maven.google.com 上双宿主的一些 Android/Firebase 库缺少旧版本 (以前托管在 jCenter 上)。我们仍在努力获得这些 在 jcenter.bintray.com 或 maven.google.com 中重新联机,如 适当的——我们在这里仔细工作以避免重新创建 导致问题的初始冲突。工作正在进行中。较新 这些库的版本不受影响,因为它们在 maven.google.com。

解决方法

    对于 Google 服务库,不需要解决方法。该库已恢复。 /google 中的其他库位于 恢复进度。 对于从 bintray.com/android 或 bintray.com/firebase 提供的无法解析的项目,请考虑升级到 已托管在 maven.google.com 上的较新版本。 (见下文 如果这不可行。)

    对于来自 bintray.com/google 的项目,或者如果您无法升级到较新版本的 Android 或 Firebase 库...您将 需要临时添加一个类似于以下的块到您的 build.gradle:

    存储库 行家 网址“https://google.bintray.com/$(存储库)”

    将 $(REPOSITORY) 替换为来自的项目名称 https://bintray.com/google.

    对于 bintray.com/firebase,请使用 “https://firebase.bintray.com/$(存储库)”。对于 bintray.com/android, 使用“https://dl.bintray.com/android/$(REPOSITORY)”。

    再一次,这种解决方法只是暂时的,直到我们得到所有 版本在 jCenter 中重新列出或镜像到 maven.google.com。

调查

提交的从 jCenter 删除项目的请求似乎过于宽泛,并且是由 谷歌的另一个没有完全授权的团队 改变。在此之前没有咨询过 Google 的存储库管理员 请求由 jCenter 执行。我们将在 未来的日子,现在我们的首要任务是恢复访问 到受影响库的所有版本。

此外,似乎在 阻止从 maven.google.com 镜像的 Google 存储库 进入 jCenter,这反过来又是最初删除的原因 要求。纠正这种错误配置可能避免了需要 删除任何东西。内部正在进行其他后续行动。

【讨论】:

【参考方案3】:

如果您不想等到这个库发布固定版本,您可以通过以下方式修复它:

只需将其添加到您的 build.gradle 中的根目录下的 subprojects 部分(不是 app/gradle)

subprojects 
    if (project.name.contains('react-native-image-picker') || 
        project.name.contains('react-native-vector-icons')) 
        buildscript 
            repositories 
                jcenter()
                maven  url "https://dl.bintray.com/android/android-tools/"  
            
        
    

感谢https://github.com/akolpakov

【讨论】:

这个答案对我有用! 拯救了我的一天。 :)【参考方案4】:

在提出这个问题的那天 - 2018-12-10 - 由于 JCenter 收到了 Google 要求从其存储库中删除多个二进制文件的请求,因此问题持续了一天多:

Google 要求我们停止提供他们的二进制文件。请使用他们的官方 Google 存储库。 https://twitter.com/bintray/status/1072275597315923971

如果您需要立即解决问题,最好的做法是直接使用其 Maven URL 添加您需要的任何依赖项。例如。: repositories (...) maven url 'https://dl.bintray.com/android/android-tools' https://issuetracker.google.com/issues/120759347#comment3

上面的帖子是跟踪问题解决的好地方,因为在我写这篇文章时它仍在进行中。

【讨论】:

【参考方案5】:

尝试使用对我有用的确切版本的 gradle

classpath 'com.android.tools.build:gradle:2.2.3'

【讨论】:

【参考方案6】:

react-native-vector-icons 包也遇到了同样的问题。

这是由这两个损坏的存储库引起的吗?

https://jcenter.bintray.com/com/android/tools/build/gradle/maven-metadata.xml
https://jcenter.bintray.com/com/android/tools/build/gradle/

他们都响应“未找到请求的路径。”

编辑

根据日志信息:

project :react-native-vector-icons 
com.intellij.openapi.externalSystem.model.ExternalSystemException: 
Could not find any matches for com.android.tools.build:gradle:2.3.+ as 
no versions of com.android.tools.build:gradle are available.

搜索“2.3.+”并将其替换为显式版本#(例如 2.3.0) 问题就解决了。

我已经阅读了来自 Android 的关于避免在版本代码中使用 + 的建议,该建议现在可能会被强制执行。

【讨论】:

你的意思是改变 react-native-vector-icons 包中的依赖关系吧?这似乎是一个很快就会适得其反的快速修复:P 将 react-native-vector-icons 升级到 6.0.2 似乎可以解决问题,而且你不需要弄乱 node_modules :)【参考方案7】:

这是新版本的 react-native-image-picker 中解决的新问题 转到您的根文件夹并重新安装 react-native-image-picker:

npm install --save react-native-image-picker

然后转到您的根文件夹并确保您的 react-native-image-picker 是版本“^0.27.2”

【讨论】:

谢谢!这解决了这个特定问题,我现在有一个新问题,但至少构建的那部分已通过!现在我收到Unable to find a matching configuration of project :react-native-fetch-blob: None of the consumable configurations have attributes.

以上是关于Gradle 错误:找不到任何匹配 com.android.tools.build:gradle:2.2.+ [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio:找不到匹配项,因为没有com.android.tools.build:gradle版本可用

找不到 com.android.tools.build:gradle:4.0.1 (或任何版本)

Gradle Android 构建项目错误:找不到元数据资源

出现错误 - 在用户表中找不到任何匹配的行

cordova build ios - 存档失败 - 没有团队匹配的配置文件

Azure Pipeline 错误:找不到与模板文件模式匹配的任何文件