使用Gradle构建系统在Eclipse中开发Android应用是否可行?

23

我有一个应用程序,需要使用不同的资源为不同的客户构建多次(品牌、配置和预加载数据在客户之间发生变化)。

在今年Google I/O之后,我听说了基于Gradle的新Android构建系统。因此,我认为,使用Gradle构建脚本实现单一源/多个APK方案是一个好主意。

现在我的问题来了:如何开始使用Gradle构建,同时坚持使用Eclipse?我在网上找到的所有阅读都指向将项目转换为尚不成熟的Android Studio。我希望推迟到Google宣布Android Studio已经“安全”用于生产环境之前迁移到Android Studio。

理想情况下,我希望能够将构建脚本钩入Eclipse的调试和运行配置中,就像我可以在XCode中选择不同的构建目标进行调试和归档一样。如果可能的话,需要采取哪些步骤才能使其正常工作?

对于这些问题的初学者质量,我深表歉意,但对我来说,这实际上是一个未知的国度。感谢任何帮助。

编辑: 我们的团队于2013年10月底迁移到Android Studio,并自版本0.4以来遇到越来越少的错误。如果您的组织不是非常保守地采用面向开发的预1.0环境,我鼓励您跳进冷水并尝试使用Android Studio及其Gradle构建系统。我认为唯一重要的缺失是对单元测试的良好支持。


1
据我所知,目前Eclipse还没有官方支持基于Gradle的构建,除非你在命令行上自己进行构建。Eclipse/Gradle项目支持最终会到来。 - CommonsWare
谢谢,这让我感觉自己不那么无能了 :-) - Chris
@CommonsWare,您是否已经了解到这方面的最新进展?Eclipse是否已经可以使用新的Gradle系统进行构建了? - spierce7
1
@spierce7:目前还没有任何消息。如果在Android Studio发布之前可用,我会有些惊讶,因为他们只有那么多工程师。请注意,Eclipse和当前的ADT可以导出描述项目的Gradle构建文件,但仅限于此。 - CommonsWare
1
答案已更新。 - Paul Verest
显示剩余3条评论
2个回答

24
可以使用2个构建系统(Eclipse + gradle),只需确保输出文件夹不同(ADT为bin,gradle为build)。 (更新TL;DR:请查看Nodeclipse/Enide Gradle for Eclipse (marketplace) ) 文件 -> 导出 -> 生成Gradle构建文件 将添加以下内容的 build.gradle 文件(但请检查版本)。不会更改现有文件。 com.android.tools.build:gradle版本应该是最新的。如http://tools.android.com/tech-docs/new-build-system/user-guide所说,对于Gradle类型,请键入gradle build。尝试gradle tasks以获取更多信息。(在我的缓慢的互联网连接上,需要1小时!才能下载所有必需的依赖项)
Vogella教程http://www.vogella.com/articles/AndroidBuild/article.html还没有准备好。其他在线教程并不真正完成http://www.jayway.com/2013/02/26/using-gradle-for-building-android-applications/
Eclipse ADT目前尚未使用gradle,我认为它将首先在Android Studio中得到完善。同时在两个IDE中开始使用不断发展的技术可能并不明智。
请参见下面的build.gradle示例。如果您已经掌握了gradle,则可能根本不需要向导。 有关经典Android项目的最新build.gradle模板,请查看gh.c/N/n-1/b/m/o.n.e.e.g/docs/android/build.gradle
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

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

android {
    compileSdkVersion 8
    buildToolsVersion "19.0.0"

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

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

ADT-Bundle不带有Eclipse Marketplace,因此可以使用更新站点。 Gradle Integration for Eclipse的更新p2存储库为:

http://dist.springsource.com/release/TOOLS/gradle

但是在3.4.0版本中,它不提供.gradle文件的编辑器。因此,在Android开发中没有意义。
我会使用默认的ADT构建,将gradle作为辅助构建进行实验,并在http://tools.android.com/tech-docs/new-build-system上的错误流变得稀少时保持关注(这应该是正式1.0版本左右)。
更新:2014-04-15 Alex Ruiz(来自Android团队)关于Android,Gradle和ADT的博客

Android的Gradle模型

我们决定不创建特定于IDE的Android/Gradle模型,而是使用IDE无关的Gradle项目表示法。这样,我们就有了一个易于维护的单一信息来源。IDE集成将作为每个受支持的IDE(在我们的情况下是Eclipse和IDEA)的插件实现。这种方法的主要好处是我们可以独立发布Gradle插件和IDE集成插件。例如,我们可以发布一个新版本的Eclipse插件,其中包含几个错误修复,而不影响Android Gradle方面。

截至2014年4月,eclipse-gradle插件与android-gradle插件不兼容:

正如Android团队在问题57668中回答的那样(由@arcone提出)

Eclipse插件与Android插件不兼容。使用Eclipse中默认的Gradle支持,您将无法将Android Gradle项目导入到Eclipse中。
为了使其在Eclipse中正常工作,我们将不得不更改Eclipse的Gradle插件,就像我们正在修改IntelliJ中的Gradle支持一样。
这就是Android团队正在为IntelliJ开发gradle插件,而gradle插件也需要更新。
Nodeclipse努力平滑过渡时间。并在继续在Eclipse中开发时仍然尝试或完全使用gradle。 Nodeclipse/Enide Gradle for Eclipse (marketplace)
以下是Gradle for Eclipse的一些屏幕截图:


2
哇,感谢您更新答案。然而,我们的团队已经完全迁移到了Android Studio,并且我们非常满意。我认为这个答案对于任何正在研究Android构建系统难题的开发人员都会非常有帮助。再次感谢! - Chris
1
时间可以解决一切,但有时候匆忙地转向新的软件会比预期花费更多的时间。截至2014年4月,基于Gradle的新构建系统为0.9版本,似乎即将发布1.0正式版。更广泛采用的时机已经到来。 - Paul Verest
1
谷歌团队似乎完全忽视在Eclipse中添加使用Gradle构建Android应用的支持。 - Martin

1
  1. 安装Gradle:
    a. http://gradle.org/gradle-download/
    b. 从“previous releases”部分选择2.1版本。
    c. 解压到指定文件夹。(例如:D:\Graddle\gradle-2.1)
    d. 设置系统环境变量。
    i. 将GRADLE_HOME设置为D:\Graddle\gradle-2.1。
    ii. 将GRADLE_OPTS设置为-XX:MaxPermSize=512m。
    iii. 将%GRADLE_HOME%\bin添加到Path中。
    iv. 设置ANDROID_HOME(例如:D:\android-sdk)。
    v. 在Path中添加“%ANDROID_HOME%\platform-tools”。

e. 打开命令提示符并检查是否设置了gradle。可使用gradle -version命令进行检查。

  1. 安装Gradle Eclipse插件: a. 启动Eclipse b. 帮助 > Eclipse市场 c. 搜索“gradle” d. 选择“Nodeclipse/enide” e. 选择所有列出的项目,接受并安装。 f. 安装完成后重启Eclipse。

  2. 设置Gradle和Java环境: a. 启动Eclipse。 b. 窗口 > 首选项 > Gradle EnIDE c. 如果未设置,请进行以下设置: i. 设置Gradle主目录(例如:D:\Graddle\gradle-2.1) ii. 设置备用JAVA_HOME(例如:C:\Program Files (x86)\Java\jdk1.7.0_60) iii. 将GRADLE_OPTS的JVM选项设置为“-XX:MaxPermSize=512m”

  3. 构建项目: a. 在Eclipse Java资源管理器中展开APK。 b. 右键单击build.gradle c. 运行 As > Gradle GUI d. 命令行:gradle clean build e. 等待构建完成:首次构建需要几分钟。 f. 如果出现Build dex错误或Java堆空间错误: i. 在编辑器中打开build.gradle。 ii. 对于多dex构建-根据您的Java设置适当的javaMaxHeapSize(32位Java的javaMaxHeapSize=1024M,64位Java为2048M) iii. 可以注释掉签名(//apply from: "$rootProject.projectDir/jenkins_config/gradle/signing.gradle";),以避免在调试构建中进行签名。 iv. 修复后再次构建。

  4. 在设备上安装构建: a. 将设备连接到计算机。 b. 右键单击build.gradle c. 运行 As > gradle installDebug Gradle Android start d. 等待安装完成

  5. 调试构建: a. 启动应用程序 b. 连接调试器(DDMS>Devices > App)。 c. 我们已在一些检查的设备上可以进行调试。


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