【问题标题】:Android Studio Build Error - "Failed to resolve: monitor"Android Studio 构建错误 - “无法解决:监视器”
【发布时间】:2019-03-29 14:15:41
【问题描述】:

我之前有一个正在运行的项目,其中版本已升级到最新版本。由于以下构建错误,现在我无法构建项目。

无法解决:监控
打开文件

“打开文件”链接指向 build.gradle(模块)文件。我尝试了“无效并重新启动”,但没有帮助。

在“无法解析:监视器”或“无法解析:”下搜索未找到任何解决方案。

在这一点上我完全被难住了。

模块:build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'

    defaultConfig {
        applicationId "com.example.android.sunshine"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
    productFlavors {
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'

    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:preference-v7:28.0.0'

    androidTestImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support:support-annotations:28.0.0'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test:rules:1.0.2'
}

【问题讨论】:

  • 在删除 androidTestImplementation 'com.android.support.test:runner:1.0.2' 并增加你的 min sdk 版本后尝试构建
  • @singh.indolia 解决方案由 Son Truong 提供,但您能否提供更多信息说明您为什么觉得 'com.android.support.test:runner:1.0.2' 和 mind sdk 版本可能是个问题?它将帮助我解决未来的构建错误。
  • @Radesh 在发布此问题之前,我尝试彻底搜索解决方案。也许是因为我缺乏 gradle 构建故障排除方面的知识,所以我永远不会找到您提到的帖子。

标签: android android-studio gradle


【解决方案1】:

我昨天从 Git 存储库签出新分支或在 Android Studio 中创建新项目时遇到了这个问题。

根本原因:当我尝试构建应用程序时,Android Studio 显示此错误

Could not find monitor.jar (com.android.support.test:monitor:1.0.2).
Searched in the following locations:
    https://jcenter.bintray.com/com/android/support/test/monitor/1.0.2/monitor-1.0.2.jar

在浏览器上打开 https://jcenter.bintray.com/com/android/support/test/monitor/1.0.2/monitor-1.0.2.jar 时出现此错误。

{
  "errors" : [ {
    "status" : 404,
    "message" : "Could not find resource"
  } ]
}

我的假设是 monitor 依赖项已从 jcenter repo 中删除(可能是暂时的)。结果构建过程失败。所以我想出了两个解决方案:

解决方案1:转到build.gradle (Project) 更改repo 的顺序,这样gradle 构建系统会首先在google repo 中找到monitor 依赖。幸运的是,这个依赖在 repo 中是可用的(至少到目前为止)。

allprojects {
    repositories {
        jcenter()
        google()
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

解决方案 2:转到 build.gradle (Module:App) 注释掉或删除这些行。这意味着我们的应用不需要 Android 测试支持库,它为测试 Android 应用提供了广泛的框架。

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'

    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:preference-v7:28.0.0'

    androidTestImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support:support-annotations:28.0.0'

    // Comment-out or delete these lines
//    androidTestImplementation 'com.android.support.test:runner:1.0.2'
//    androidTestImplementation 'com.android.support.test:rules:1.0.2'
}

然后点击立即同步

【讨论】:

  • 令人惊讶的是,这个解决方案有效。我也对如何得出这样的解决方案感到目瞪口呆和印象深刻。对我来说这毫无意义。
  • 原理是什么?为什么这个解决方案有效?
  • 这个答案解释了根本原因:stackoverflow.com/a/52982816/6899896 在您的情况下,monitor-1.0.2.jar 不再托管在 jcenter 中,但 pom.xml 仍然存在! (见jcenter.bintray.com/com/android/support/test/monitor/1.0.2/…
  • @M.Ricciuti 谢谢你的信息,所以我的假设是正确的。某些依赖项已从 jcenter 中删除,原因不明。最好能找到jcenter 的任何官员为什么要这么做。
【解决方案2】:

问题似乎出在 jcenter 上。我花了几个小时来解决这个问题,您的问题似乎与我的相似,我认为以下解决方案应该可行。

出于某种原因,对于 jcenter 中的许多库,许多库的 pom 文件保留在原处,但相应的 aar 文件已被删除。 play-services-basement 库也是如此。请在此处查看以下内容以供参考(play-services-basement 的 pom 文件可在 jcentre here 获得,但 aar 文件不可在 jcentre here 获得):

解决方案: 在您的项目级 gradle 文件中,更改以下代码块

allprojects {
    repositories {
        jcenter()
        google()
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

为什么会这样?

在我们的第一个代码块中,当 gradle 尝试解析存储库中的依赖项时(在我的情况下,它是 jcentre 存储库中的 google-services-basement),因为相应的 aar 文件已被删除,所以它没有得到解决。结果,构建失败,如下所示:

 Could not find play-services-basement.aar (com.google.android.gms:play-services-basement:15.0.1).

在我们的第二个代码块中,在 jcenter 存储库之前引用了 google 存储库。当 gradle build 开始时,它首先在 repositories{... 中列出的库中查找,以解析项目中使用的任何库。现在,当 gradle 尝试解析 jcenter 中的 play-services-basement 时,它成功解决了依赖关系,因为 google 存储库已经提供了相应的 aar 文件(最新版本的相同 aar 文件在 jcenter 存储库中不可用)已经在评估 jcenter 存储库之前引用。请检查并让我知道这是否有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多