Android Studio:Gradle构建失败--执行任务':compileDebugAidl'失败

36

在Android Studio(I/O预览版)中更改源代码并使用Gradle进行构建后,构建失败,并出现以下错误:

Gradle: 
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileDebugAidl'.
> No signature of method: com.android.ide.common.internal.WaitableExecutor.waitForTasks() is applicable for argument types: () values: []
  Possible solutions: waitForAllTasks()
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
Could not execute build using Gradle distribution 'http://services.gradle.org/distributions/gradle-1.6-bin.zip'.

第二次运行构建将成功。

使用版本为1.6的Gradle包装器。

这真的很糟糕,因为在第一次失败后,它会执行长时间的(非增量)构建。

有没有办法避免这种失败情况?

编辑以包括build.gradle文件。

buildscript {

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

task wrapper(type: Wrapper) {
    gradleVersion = '1.6'
}

dependencies {

    compile fileTree(dir: 'libs', include: '*.jar')
}

android {
    compileSdkVersion "Google Inc.:Google APIs:17"
    buildToolsVersion "17"

    defaultConfig {
        minSdkVersion 11
        targetSdkVersion 17
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}

在 Google Code 上查看问题的链接:https://code.google.com/p/android/issues/detail?id=56158


你尝试过使用 --stacktrace --info --debug gradle 标志从命令行构建吗? - IgorGanapolsky
2
@IgorGanapolsky 这个问题已经解决了。在将近两年前的 Gradle 版本中进行了修复。 - seanmakesgames
10个回答

36

我通过在我的build.gradle文件中设置buildToolsVersion与SDK管理器中最新的Android SDK Build-tools版本相匹配来解决了这个问题。

显示已安装Build-tools版本22.0.1

在我的情况下,我安装了Android SDK Build-tools版本22.0.1,所以我相应地设置了buildToolsVersion

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
...

做出这个更改后,我的应用程序能够顺利构建。


哈哈,刚更新完Android Studio就遇到这个问题了。在谷歌上找到了这个问题。你的回答解决了我的问题,尽管这个问题已经有2年了,你在3小时前回答了它。太疯狂了 :). - Episodex
2
看起来目前最新版本的Android Studio(1.2.1)捆绑了BuildToolsVersion 23.0.0 rc1。在稳定版本中发布发行候选版不是一个好主意。 - wowo_999
1
@bonth:你是怎么找到构建版本的?我也遇到了同样的问题,使用compile SdkVersion 22buildToolsVersion 23.0.0 rc时出现了相同的问题。但当我将其更改为22.0.1时,我的问题得到了解决。 - Mohammad Hossein Amri
@MoHradA 我已经编辑了答案,包括在Android SDK Manager中Build-tools版本的图像。 - bonh

11

我不确定这是如何发生的。看起来您在Gradle插件本身和提供WaitableExecutor类的依赖项之间存在不匹配。

但是,您提到了Gradle 1.5,这是一个问题。

插件版本0.3与Gradle 1.3-1.4兼容, 上周发布的新版本0.4与Gradle 1.6+兼容。

确保使用0.4和新的Gradle版本。


我正在使用Gradle 1.6和插件版本0.4,并且遇到了相同的问题。 我的构建文件:http://pastebin.com/WCP1R4uW - Alex
我现在使用的是1.6和版本0.4--我已经在上面添加了我的build.gradle文件。 - seanmakesgames
我应该提到它在1.6和0.4版本中仍然存在问题。 - seanmakesgames
3
是的,确实存在问题。已经修复了,将在下一个版本中发布。我希望尽快发布新版本。 - Xavier Ducrohet
1
太好了,@Xav!感谢您查看它。 :D 我将能够在这里验证您的修复。 - seanmakesgames

3

我遇到了同样的问题,错误信息为 "Failed to execute the task: compileDebugaidl aidl/debug/".

在Gradle控制台中查看具体信息如下:

Failed to capture snapshot of output files for task 'prepareComAndroidSupportAppcompatV72103Library' during up-to-date check.

Could not remove entry '/Users/..../.../.../..../build/intermediates/exploded-aar/com.android.support/appcompat-v7/21.0.3' from cache outputFileStates.bin (/Users/..../..../..../.gradle/2.2.1/taskArtifacts/outputFileStates.bin).

我通过从终端删除outputFileStates.bin文件并允许Gradle重新创建它来解决这个问题。

希望对某些人有所帮助。


1
将以下代码添加到您的build.gradle文件中。这对我很有效。
dependencies {

compile fileTree(dir: 'libs', include: '*.jar')

}

1

添加:

compileSdkVersion 17 添加到你的 build.gradle 文件中(如下所示)。

并使用插件版本3:com.android.tools.build:gradle:0.3(或更高版本,用于未来问题等)

编辑:参考我刚刚创建的项目。构建、签名等 https://github.com/yegdroid/gradle_demo

// // 一个基本的Android应用程序,遵循所有惯例 // 构建脚本 { 存储库 { 磨盘() } 依赖关系 { 路径 'com.android.tools.build:gradle:0.3' } } 应用插件: 'android'
android { testBuildType =“debug”
defaultConfig { versionCode = 1 versionName ='0.1' minSdkVersion = 9 targetSdkVersion = 17
compileSdkVersion 17 buildConfig "private final static boolean DEFAULT = true;", \ "private final static String FOO =\"foo\";" }
构建类型 { debug { packageNameSuffix =“.debug”
buildConfig "private final static boolean DEBUG2 = false;" } }
aaptOptions { noCompress "txt" } sourceSets { main { manifest { srcFile 'AndroidManifest.xml' } java { srcDir 'src' } res { srcDir 'res' } assets { srcDir 'assets' } resources { srcDir 'src' } } } }

这是否意味着你的问题不再存在了? - cbrulak
我需要针对Google API 17进行编译。请参见上面的build.gradle文件。 - seanmakesgames
为什么你要使用compileSdkVersion "Google Inc.:Google APIs:17",只需要使用compileSdkVersion "17"就可以了。 - cbrulak
如果我只有'17',它就无法编译——缺少了地图导入。 - seanmakesgames
你正在使用哪个版本的Gradle插件? - cbrulak
它在 Gradle 构建文件中。我正在使用版本为 1.6 的 Wrapper。 - seanmakesgames

1
请尝试在项目级设置中勾选“使用默认的Gradle包装器”选项。
Android Studio-->文件-->设置-->构建、执行、部署-->构建工具-->Gradle。

0

这对我有效
在你的项目 build.gradle 中进行编辑

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        //delete this line below   
        classpath 'com.android.tools.build:gradle:1.0.1'
        //add this line below
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

0

我想在这里注册我的问题和解决方案,因为它几乎与发布的问题相关,如果有人遇到这个错误,可以快速地克服它。

我遇到了一个类似的问题,即“无法执行任务:compileDebugaidl aidl/debug/..访问被拒绝...”

我通过删除构建目录并重新构建它来解决了这个问题[我正在使用Gradle 0.14.4]


生成目录的路径是什么?是 ./android/.gradle 吗? - Noitidart
1
哇,我删除了./android/.gradle/2.14.1/taskArtifacts/目录下的所有文件,然后重新运行,它就可以工作了! - Noitidart

0

缺失的AIDL是Google Android Studio的问题,无法更新主要gradle依赖项类路径。

解决方法: - 打开项目gradle文件(不是app,而是项目!) - 替换: classpath 'com.android.tools.build:gradle:1.0.1'或其他classpath 'com.android.tools.build:gradle:1.3.1'

如果您之前无法编译时间,可编译的项目,则Google猫和狗没有睡觉并且正在进行更改、更新,因此您必须醒来并在他们忘记的地方进行更改。 而且gradle是相当不稳定的项目,容易出现错误。


0

我能看到 gradle(错误过滤)输出吗?(工具窗口 gradle,gradle 选项卡) 看起来 aidl 文件中的函数存在问题,这些函数主要用于外部应用程序接口和服务。 例如,将数据传输到小部件,或者如果您需要在两个应用程序之间进行数据传输。 第二种可能性是具有相同 aidl 结构的两个库,只有一个函数不同,或者您两次使用了相同的库。 另一个原因是我从未见过这个消息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接