从 Eclipse 生成 Gradle 构建文件,出现错误:需要 Gradle 版本 1.10

Posted

技术标签:

【中文标题】从 Eclipse 生成 Gradle 构建文件,出现错误:需要 Gradle 版本 1.10【英文标题】:Generated Gradle build files from Eclipse, getting error: Gradle version 1.10 is required 【发布时间】:2017-12-21 07:50:21 【问题描述】:

我从一个 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')
    

另一方面,this project 的构建没有任何问题。

我尝试复制buildscript 块以及android 的任何缺失子块,以及注释掉***dependencies 块,但无济于事。

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

什么给了?

【问题讨论】:

你为什么不用android studio IDE? Android Studio 不会构建我用 C 编写的桌面应用程序(Eclipse 会这样做,这要归功于 CDT),这使得 AS 只是朝着更加碎片化的方向迈出了一步。因此,我正在寻找一种可以让我保留 Eclipse 的方法。 【参考方案1】:

我终于用 Gradle Wrapper 构建了它。

由于gradle wrapper 也会失败并显示相同的错误消息(有 2.10,想要 1.10),我只是从我之前成功构建的另一个项目中复制了 gradlewgradlew.batgradle 子目录.

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(),这样也可以。

修改 dependencies 块:由于我们从存储库中提取 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 等),lintOptions 很重要,否则这些将导致构建失败。

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

有了所有这些,项目终于建立起来了。关于 Google 保持向后兼容性的内容非常多……

【讨论】:

以上是关于从 Eclipse 生成 Gradle 构建文件,出现错误:需要 Gradle 版本 1.10的主要内容,如果未能解决你的问题,请参考以下文章

apply plugin: 'idea' --- gradle idea

如何让 Eclipse 使用 Gradle 生成 MapStruct 映射器

Gradle 构建无法生成 .apk 文件

如何使用 Gradle 为 Android 项目生成 Eclipse 和 Intellij 项目文件

如何使用Gradle为Android项目生成Eclipse和Intellij项目文件

配置现有的 eclipse java 项目以使用 gradle 构建