Ошибка Gradle: не удалось найти совпадений для com.android.tools.build:gradle:2.2.+

Это проект React Native. Хорошо работал на другой машине, но однажды переехал на мою машину, это не удается.

Большинство решений, которые я нашел, предлагали добавить jcenter() в репозитории уровня проекта gradle.build. В моем случае это уже было добавлено.

Gradle Sync не удается с этой ошибкой:

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)
                    }
                }
            }
        }
    }
}
}

Приложение build.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 android при import com.android.build.OutputFile выдает ошибку: не может быть решена

Редактировать:

Теперь эта часть процесса сборки уже успешно пройдена, но я начал получать эту ошибку: Unable to find a matching configuration of project :react-native-fetch-blob: None of the consumable configurations have attributes.

enter image description here

Ответы

Ответ 1

Если вы не хотите ждать, пока эта библиотека выпустит исправленную версию, вот как вы можете это исправить:

Просто добавьте его в свой build.gradle в разделе подпроектов в корне (не 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

Ответ 2

Это новая проблема, которая была устранена в новой версии response-native-image-picker. Перейдите в корневую папку и переустановите response-native-image-picker:

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

Затем перейдите в вашу корневую папку и убедитесь, что ваш ответ-native-image-picker имеет версию "^ 0.27.2"

Ответ 3

Пакетact-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 о том, что следует избегать использования + в коде версии, и теперь это предложение может быть применено.

Ответ 4

В день, когда был задан этот вопрос - 2018-12-10 - возникла проблема, которая продолжалась более суток, поскольку JCenter получил запрос от Google на удаление нескольких двоичных файлов из своего хранилища:

Google попросил нас прекратить предоставлять свои двоичные файлы. Пожалуйста, используйте официальный репозиторий Google для них. https://twitter.com/bintray/status/1072275597315923971

Если вам нужен немедленный обходной путь, лучшим способом было бы добавить любые зависимости, которые вам нужны, напрямую с их URL-адресом Maven. Например: repositories { (...) maven { url 'https://dl.bintray.com/android/android-tools' } } https://issuetracker.google.com/issues/120759347#comment3

Вышеприведенная ветка - хорошее место, чтобы следить за разрешением проблемы, поскольку она все еще продолжается, пока я пишу это.

Ответ 5

Я получаю почти ту же ошибку: не могу найти совпадений для

com.android.tools.build:gradle: + так как нет версий

com.android.tools.build:gradle доступны

Ответ 6

Попробуйте использовать точную версию Gradle, она работала для меня

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

Ответ 7

Похоже, что некоторые репозитории были удалены по ошибке, и, по словам представителя Google, они сейчас работают над их восстановлением:

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

Привет всем снова,

Теперь мы знаем, что произошло, и работаем над тем, чтобы сделать это разумным образом. Вот основная схема проблемы:

  1. На jCenter были некоторые поддельные/искаженные изображения com.google. * И com.android. *
  2. Большинство из этих артефактов были правильно размещены на maven.google.com(aka google()).
  3. Если ваша система сборки обнаружит версию jCenter до того, как найдет версию Google Maven, ваша сборка будет повреждена
  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 Services (com.google.gms: google-services) была восстановлена, см. Обновление # 31.
  • В jCenter были отправлены запросы на повторную публикацию всех репозиториев, размещенных на bintray.com/google. Администраторы jCenter в JFrog работают над тем, чтобы вернуть их нам в оперативный режим, и сейчас нам остается только ждать. Мы ожидаем, что они скоро появятся в сети. Некоторые библиотеки уже вернулись.
  • В некоторых библиотеках Android/Firebase с двойным размещением на jcenter.bintray.com и maven.google.com отсутствуют более старые версии (ранее размещенные в 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:

    репозитории {maven {url " https://google.bintray.com/ $ (REPOSITORY)"}}

    Замените $ (REPOSITORY) именем проекта со страницы https://bintray.com/google.

    Для bintray.com/firebase используйте " https://firebase.bintray.com/ $ (REPOSITORY)". Для bintray.com/android используйте " https://dl.bintray.com/android/ $ (REPOSITORY)".

    Опять же, этот обходной путь является временным, пока мы не сможем получить все версии, либо повторно внесенные в список в jCenter, либо отраженные в maven.google.com.

РАССЛЕДОВАНИЕ

Похоже, что запрос, отправленный в проекты из jCenter для исключения из списка, был слишком широким и был отправлен другой командой в Google, которая не имела полных полномочий для внесения этого изменения. Администраторы репозитория в Google не консультировались до того, как jCenter выполнил этот запрос. Мы рассмотрим это подробнее в ближайшие дни, сейчас наш главный приоритет - восстановление доступа ко всем версиям затронутых библиотек.

Кроме того, похоже, что в репозитории Google может быть неверная конфигурация, которая препятствует зеркалированию с maven.google.com в jCenter, что, в свою очередь, стало причиной первоначального запроса на удаление. Исправление этой неправильной конфигурации, возможно, избавило от необходимости что-либо удалять. Дополнительное наблюдение происходит внутри страны.