【问题标题】:Gradle error: Could not find any matches for com.android.tools.build:gradle:2.2.+ [duplicate]Gradle 错误:找不到任何匹配 com.android.tools.build:gradle:2.2.+ [重复]
【发布时间】: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 已经解决了这个问题,现在再次同步项目对我有用。

标签: android android-studio android-gradle-plugin jcenter


【解决方案1】:

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

  1. 升级 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

    大家好,

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

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

    解决方法

    1. 对于 Google 服务库,不需要解决方法。该库已恢复。 /google 中的其他库位于 恢复进度。
    2. 对于从 bintray.com/android 或 bintray.com/firebase 提供的无法解析的项目,请考虑升级到 已托管在 maven.google.com 上的较新版本。 (见下文 如果这不可行。)
    3. 对于来自 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.
          猜你喜欢
          • 2019-05-11
          • 2020-12-24
          • 1970-01-01
          • 2019-05-12
          • 1970-01-01
          • 1970-01-01
          • 2017-08-21
          • 2019-05-11
          • 2018-04-11
          相关资源
          最近更新 更多