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 构建项目错误:找不到元数据资源