插件太旧,请更新到较新版本,或将环境变量ANDROID_DAILY_OVERRIDE设置为


176

今天,我只是从Android SDK中导入了一个示例应用程序作为项目中的模块(分析),当我尝试对其进行同步时,突然出现了gradle错误: Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE envrinment variable to...

这是我的应用程序gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.0"
    defaultConfig {
        applicationId "xxx.xxxxxx.xxxxx"
        versionCode 1
        versionName '1'
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 1
        versionName '1'
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.google.android.gms:play-services:6.5.87'
    compile 'com.android.support:recyclerview-v7:21.0.0'
    compile 'com.android.support:cardview-v7:21.0.0'
    compile 'com.facebook.android:facebook-android-sdk:3.21.1'
    testCompile 'junit:junit:4.12'
    compile project(':volley')
}

您是否可能是哪个原因(我正在使用插件版本1.1.0-rc1以及gradle版本2.2和Android Studio版本1.1.0)?

编辑:

这是我的顶峰build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0-rc1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

4
您需要Android Studio 1.1.0的Gradle 2.2.1。适用于Android的Gradle插件1.1现在可用,因此您不再需要-rc1
CommonsWare 2015年

首先,感谢您的即刻答复,我将尝试更改项目的设置,并将结果发布在此处。再次感谢!:-)
Mario Norato

1
有效!我只是从类路径中删除了“ -rc1”部分。现在,它同步了。再次感谢!PS:我在使用stackoverflow方面不是很好,我该如何评价您的答案或将其标记为正确的答案?
Mario Norato

1
您随时可以在这里找到最新的gradle版本developer.android.com/tools/revisions/gradle-plugin.html
Bharatesh '16

Android Studio多么粗鲁。如果从gui中自动生成了某些内容,则绝不需要程序员的帮助。
变色龙

Answers:


132

就像CommonsWare所建议的那样,请确保您具有Gradle 2.2.1+(最新版本为2.3)。

确保您升级了Android Studio,但以下是需要更新的“插件”:

最佳 build.gradle

更改:

classpath 'com.android.tools.build:gradle:1.1.0-rc1'

至:

classpath 'com.android.tools.build:gradle:1.1.3' // latest 1.5.0

应用程式build.gradle

更改:

compile 'com.android.support:recyclerview-v7:21.0.0'
compile 'com.android.support:cardview-v7:21.0.0'

至:

compile 'com.android.support:recyclerview-v7:22.0.0' // latest 23.1.1
compile 'com.android.support:cardview-v7:22.0.0' // latest 23.1.1

摇篮:https : //gradle.org/downloads

请始终检查Android SDK Manager的最新版本:

Android构建工具插件:http : //tools.android.com/tech-docs/new-build-system

Android支持库:http : //developer.android.com/tools/support-library/features.html

要查看最新的插件版本,请直接查看Bintray Jcenter页面:https ://bintray.com/android/android-tools/com.android.tools.build.gradle/view 。


好吧,在阅读了Commonsware的答案之后,我只是拿走了类路径的-rc1部分,现在建立索引之后它似乎可以正常工作(哎呀,我浪费了将近2个小时才不会在堆栈溢出中打扰大家:-)),现在我会按照您的建议尝试更新插件。:-) 再次感谢。
Mario Norato

1
@MarioNorato没问题,我会将链接发布到您可以一直找到最新版本的位置。另外,如果您使Android SDK Manager保持更新,则Android Studio会警告您使用新版本。
Jared Burrows

有同样的问题。将插件从1.4。+移至1.3。+就可以了。我也正在使用gradle 2.8并有一个脚本,该脚本始终下载最新版本,显然它具有价格...
codeScriber15年

18
我必须去https://jcenter.bintray.com/com/android/tools/build/gradle/弄清楚gradle的最新版本是什么。使用该URL的最新可用版本更新我的顶级gradle文件可解决此问题。您的解决方案没有给我足够的信息来找到它!
exhuma

1
值得链接到此位置(恕我直言,比Gradle网站更好)-该网站列出了最新的Gradle发布版本:developer.android.com/tools/revisions/gradle-plugin.html
Booger

46

解决方案(更新:2016年5月24日): 更改build.gradle(项目)

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:X.X.X-lastVersionGradle'
    classpath 'com.google.gms:google-services:X.X.X-lastVersionGServices' // If use google-services

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

XXX-lastVersionGradle:例如:2.1.0

XXX-lastVersionGServices:例如:3.0.0(支持Firebase Analytics)

注意:如果您使用的是google-services插件,则必须使用相同的版本(如果有)

警告!!-> 2.2.0-alpha 如果不使用Java JDK 8u91和NetBeans 8.1,则会抛出不受支持的major.minor版本52.0


31

顺便说一句,在完全不相关的情况下,我一直遇到相同的错误-在更改系统时钟年份设置后(即2015-> 2016);将时钟改回正确的时钟可以解决此问题。

注意1:我之所以发布此消息,主要是因为我有完全相同的错误消息,但是事实证明工作解决方案不同于仅更新插件的版本(由发行Jared Burrows)。

注2:使用

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

可以将插件版本默认为最新版本。请记住,您的构建可能会因API更改而中断(因此,Android API文档不鼓励这样做),因此,仅在始终不断更新版本的情况下,使用此风险自负。


4
Intellij / Android Studio将警告您不要执行此操作,因为您应该知道所使用的版本。
Jared Burrows 2015年

1
@JaredBurrows我知道我使用的是哪个版本-最新版本。我认为没有必要将自己绑定到特定发行版,并且每次使用新发行版时手动更新版本几乎都不比使用+IMO版本更明智。发出警告是为了帮助编程,如果它们指的是严格的,不可弯曲的规则,则它们并不是警告,而是错误。不过,您提出的观点完全正确,我已在帖子中包含了该信息。

1
使用“ +”运算符会产生无法预测的构建,应始终避免。这是一个危险的答案。
agrosner,2015年

@agrosner看到在上面的评论的理由。的确,应该在最终发布和严格的生产代码中避免使用它,但是在小型应用程序的连续开发中使用它并没有真正的不利之处。改写以使其更明显。附带说明,该信息是解决实际问题的一种可能的解决方案,而不是最佳实践 -并非答案在这里-答案是检查时钟。

好吧...我今天遇到了这个问题,现在确实是2016年。另外,有没有一种方法可以在不更改时钟的情况下解决此问题?我目前正在使用Android和构建环境。这对我来说仍然是新的,我有点迷失于此错误:(
exhuma


15

您可以随时在此处查看最新的gradle插件版本: https

所以从今天起,您应该使用:

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

相应地。


9

将类路径替换为类似这样的歧义。它是一个解决方案,它可以工作,但可能不是一个好的解决方案。

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

最好的方法是用最新版本的gradle替换+


好吧,仅当您确实要使用Alpha或Beta版本时。
JacksOnF1re

请在此处阅读警告:developer.android.com/studio/releases/gradle-plugin.html “注意:您不应在版本号中使用动态依赖项,例如'com.android.tools.build:gradle:2.+'使用此功能可能会导致版本意外更新,并难以解决版本差异。”
weston

6

在此处检查最新版本的Gradle插件:

下载

您应该根据应用设置更改此设置

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:[PLACE VERSION CODE HERE]'

}

}



1

我正在使用Android数据绑定并且今天了同样的问题。

要解决它,请更改:

classpath "com.android.databinding:dataBinder:1.0-rc0"

至:

classpath "com.android.databinding:dataBinder:1.0-rc1"

现在仍可以在jcenter上找到1.0-rc0 ,我不知道为什么它不能使用。


1

我有一种方法可以最终解决此问题1.在顶部build.gradle中检查您的calsspath,例如,我的类路径为'com.android.tools.build:gradle:2.1.0-alpha3',然后转到 https:// jcenter。 bintray.com/com/android/tools/build/gradle/ 找到一个比您的更新的版本,在这里我选择2.1.0-beta3将类路径更改为以下版本,然后启动构建。classpath'com.android.tools.build:gradle:2.1.0-beta3'



0

将环境变量ANDROID_DAILY_OVERRIDE设置为相同的值示例-b9471da4f76e0d1a88d41a072922b1e0c257745c

这对我有用。


以及该变量位于何处?
MobileEvangelist

我必须在哪里设置ANDROID_DAILY_OVERRIDE?
MiguelAngel_LV

1
@ MiguelAngel_LV,AndriodNewbie,Google如何在您的操作系统中导出环境变量。这是一项操作系统功能
Yaroslav Mytkalyk,2015年


0

在过去的几个月中,我使用了Android Studio的“预览版”。我试图切换回“稳定”版本以进行软件更新,但还不够,您遇到了这个著名的错误。

卸载我的Android Studio 2.2.preview并安装最新的稳定的 Android Studio(2.1)后,为我修复了它:)


0

在我的情况下,在应用程序级别的gradle文件中寻求稳定版本或gradle
classpath'com.android.tools.build: '

我用

类路径'com.android.tools.build:gradle:2.1.2'


0

输出来自NonFinalPluginExpiry.java

示例2.4.0-alpha7

https://github.com/c3ph3us/android-gradle-plugin-source-codes/blob/master/gradle-2.4.0-alpha7-sources/com/android/build/gradle/internal/NonFinalPluginExpiry.java

如果有人想使用插件,不想做一个日常的谷歌..

要么需要:

  1. 重新编译插件
  2. 替换清单中的“插件版本”
  3. 制作自动化脚本以生成env var并每天进行设置

         MessageDigest crypt = MessageDigest.getInstance("SHA-1");
         crypt.reset();
         crypt.update(String.format(
                         "%1$s:%2$s:%3$s",
                            now.getYear(),
                            now.getMonthValue() -1,
                            now.getDayOfMonth())
                            .getBytes("utf8"));
        String overrideValue = new BigInteger(1, crypt.digest()).toString(16);

JAVA中的示例APP(源+ JAR):

  1. 用于生成ADO-用于所有具有JVM的操作系统
  2. 为LINUX设置环境

https://github.com/c3ph3us/ado

https://github.com/c3ph3us/ado/releases

导出环境并启动Idea / Studio的示例bash函数:

// eval export & start idea :) 
function sti() {
    export `java -jar AndroidDailyOverride.jar p`
    idea.sh
}

0

这是android告诉您将gradle升级到最新版本的方式。您可以做两件事-

  1. 升级到较新版本的gradle。升级后,您可能会遇到新的错误(例如,如果要升级到4.1,则必须适应新的语法-“编译”不再有效,请使用“实现”)。
  2. 将您的ANDROID_DAILY_OVERRIDE变量更新为给定的值。转到计算机->属性->高级系统设置->环境变量,然后创建一个新变量或更新现有ANDROID_DAILY_OVERRIDE的值。顾名思义,该值仅在一天之内有效,第二天您将不得不再次覆盖该变量。

-1

您应该升级gradle的版本。例如:com.android.build.gradle 1.3.0

更改gradle的版本时,会发生此问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.