Java 从Eclipse生成的Gradle构建文件,获取错误:需要Gradle版本1.10

Java 从Eclipse生成的Gradle构建文件,获取错误:需要Gradle版本1.10,java,android,eclipse,gradle,build.gradle,Java,Android,Eclipse,Gradle,Build.gradle,我从Eclipse项目生成了一个Gradle构建文件,然后在源根目录中运行了Gradle build,这产生了以下错误: FAILURE: Build failed with an exception. * Where: Build file '/home/me/src/myproject/build.gradle' line: 11 * What went wrong: A problem occurred evaluating project ':src:myproject'. >

我从Eclipse项目生成了一个Gradle构建文件,然后在源根目录中运行了
Gradle build
,这产生了以下错误:

FAILURE: Build failed with an exception.

* Where:
Build file '/home/me/src/myproject/build.gradle' line: 11

* What went wrong:
A problem occurred evaluating project ':src:myproject'.
> Failed to apply plugin [id 'com.android.application']
   > Gradle version 1.10 is required. Current version is 2.10. If using the gradle wrapper, try editing the distributionUrl in /home/me/src/myproject/gradle/wrapper/gradle-wrapper.properties to gradle-1.10-all.zip
这是自动生成的
build.gradle

apply plugin: 'com.android.application'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':tools:android-sdk-linux_86:extras:android:support:v7:appcompat')
}

android {
    compileSdkVersion 25
    buildToolsVersion "23.0.3"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

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

        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
另一方面,构建没有任何问题

我试着复制
buildscript
块以及
android
中任何缺失的子块,并注释掉顶级
依赖项
块,但没有成功

如果有必要的话,操作系统是Ubuntu 16.04(64位),gradle 2.10


有什么好处?

我终于用Gradle包装器构建了它

由于
gradle包装器
也会失败,并显示相同的错误消息(have 2.10,want 1.10),因此我刚刚复制了
gradlew
gradlew.bat
和我以前成功构建的另一个项目的
gradle
子目录

gradlew build
仍然会抱怨版本,因此我按照错误消息的指示在
gradle wrapper.properties
中编辑了版本

然后对
build.gradle
进行一些修改(并非所有修改都是必要的):

在顶部添加新块:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
    }
}
除其他外,这将指定JCenter作为依赖项的存储库。对于Maven Central,指定
mavenCentral()
,而不是
jcenter()
,这同样适用

修改
依赖项
块:因为我们正在从存储库中提取Android支持库,所以禁用本地构建。删除以下行:

compile project(':tools:android-sdk-linux_86:extras:android:support:v7:appcompat')
如果没有任何本地jar要包含,那么也可以删除另一行(在这种情况下,可以删除整个部分)。我有一个jar要包含(除了appcompat),所以我保留了这行代码,并将
*.jar
更改为我需要的jar的名称。(或者,从libs目录中删除重复的jar,但这将直接从Eclipse中断ant构建。)

在android块中,添加以下子项:

defaultConfig {
    minSdkVersion 11
    targetSdkVersion 23
}

lintOptions {
    abortOnError false
}

dependencies {
    compile 'com.android.support:support-v4:23.1.+'
    compile 'com.android.support:appcompat-v7:23.1.+'
}
defaultConfig
中的API版本应与应用程序清单中的版本匹配

如果您的项目包含一些非关键问题(未使用的声明、使用不推荐的API等),则选项非常重要,否则将导致生成失败

依赖项
可能因您通过JCenter包含的库而异。我注意到appcompat-V7V23.2和更高版本会给我带来编译错误(这可能是一个单独的问题),所以我坚持使用最后一个有效的版本


有了所有这些,项目最终得以构建。关于谷歌维护向后兼容性的内容太多了…

为什么不使用android studio IDE?android studio不会构建我用C编写的桌面应用程序(Eclipse会这样做,这要归功于CDT),这只是迈向更碎片化的又一步。因此,我正在寻找一种方法,使我能够保持Eclipse。