2013-07-04 96 views
32

是否有可能产生使用摇篮的Android项目的Eclipse和IntelliJ项目文件?如何使用摇篮生成的Eclipse和IntelliJ项目文件的Android项目

Maven中,我们会做mvn eclipse:eclipse和PlayFramework我们会做play eclipsify。 Gradle是否为Android项目提供此功能?

我已经安装了摇篮(1.6)和Android SDK管理器(22.0.1)解释here

这是我的build.gradle文件:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.0' 
    } 
} 

apply plugin: 'android' 
apply plugin: 'eclipse' 

sourceCompatibility = 1.7 
version = '1.0.2' 

repositories { 
    mavenCentral() 
} 

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

android { 
    buildToolsVersion "17" 
    compileSdkVersion 8 
    defaultConfig { 
     versionCode 1 
     versionName "1.0" 
     minSdkVersion 7 
     targetSdkVersion 8 
    } 
    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') 
    } 
} 

然后我运行命令:

gradle clean build cleanEclipse eclipse 

它建立得很好,但是当我将项目导入Eclipse中,它看起来像一个正常的Java项目。

任何人都知道如何得到摇篮创建的Android具体的Eclipse项目文件?

这是Gradle的优先功能吗?

- 更新 -

我相信这是一个问题。所以我已将它发布到Android工具团队issue #57668。请明星为他们的问题:)

优先 - 更新 -

它看起来并不像Android的工具团队正在调查这个问题。所以现在我已经转换为Android Studio,我可以通过IDE导入带有依赖关系的我的gradle项目。

+1

我相当肯定你不能(很容易)。我认为我的目标是让Eclipse ADT直接理解build.gradle,但恐怕这仍然是未来。 – Delyan

+0

你知道为什么这不是一个优先功能吗?事件更好,你知道要联系谁来获得这个功能吗? –

+1

我不知道更多关于他们的优先级的内容,而不是[此列表]上的内容(http://tools.android。COM /路线图)。也就是说,你最好的选择是去['adt-dev'邮件列表](https://groups.google.com/forum/#!forum/adt-dev)并且在那里询问(不过首先搜索! )。 – Delyan

回答

9

Gradle本身是一个通用的构建工具,它不是专门为Android创建的。

使用插件启用所有功能。传统上,构建插件不会生成项目结构。这是项目特定工具的工作。 Gradle的Android插件遵循这一点。

的问题是,在SDK当前android工具生成旧类型的项目结构的(蚂蚁构建)。新的项目结构只能通过Android Studio生成。

还有就是archetypes像Maven的工具,使用项目模板,允许一个概念。 Gradle目前还不支持此功能(请求已经提供)。

请参阅此主题:http://issues.gradle.org/browse/GRADLE-1289,一些用户已经提供的脚本生成的结构。

生成初始化功能正在进行中:https://github.com/gradle/gradle/blob/master/design-docs/build-initialisation.md

希望有一个人可以写一个脚本来做到这一点,请参阅本指南为新项目结构:http://tools.android.com/tech-docs/new-build-system/user-guide

更新

有现在是官方的Android IDE:Android Studio。它基于Intellij,新的构建系统是基于Gradle的。

+0

我不是在寻找Gradle的方式来创建'archetypes'。我所追求的是特定于IDE的项目文件的生成,它使我可以在我的首选IDE中导入为项目。在maven中,我们将执行'mvn eclipse:eclipse',并且在Play Framework中,我们将执行'玩eclipsify'。我给了+1以便开始讨论;) –

+0

@arcone啊..我不知道这里有这样一个插件。不支持导入Gradle项目的Eclipse吗? –

+2

我已经安装了Eclipse的Gradle插件,它似乎没有工作。我应该补充一点,我没有尝试过这么多,因为我不想额外的复杂性。我肯定会喜欢有一个'gradle eclipse'命令来处理Android项目:) –

1

也许我错过了一些非常明显的东西,但不是eclipse plugin你在找什么?这会生成.project文件以及.classpath文件,并在运行后续时间时根据需要更新这些文件。

还有一个IDEA plugin,虽然我没有用过这个,也不能说话。

希望有所帮助。

+3

至于我所了解的gradle eclipse插件只生成java项目文件而不是Android :-( –

+0

啊,那将是明显的一块我但是可能是一个很好的起点 – Myles

2

正如Android团队(由@arcone提出)

项目成员#2×... @ android.com

Eclipse插件是无法与Android插件兼容的Issue 57668回答。

您将无法使用Eclipse中默认的Gradle支持将Android gradle项目导入Eclipse。

,使其在Eclipse的工作,我们将不得不改变摇篮的Eclipse插件,同样的道理,我们在的IntelliJ修改摇篮支持

即Android团队正在gradle这个插件的IntelliJ和Eclipse的gradle插件也需要更新。

Eclipse现在有什么可能是

.1。导入项目一般项目

.project

<?xml version="1.0" encoding="UTF-8"?> 
<projectDescription> 
    <name>OpenSpritz-Android</name> 
    <comment></comment> 
    <projects> 
    </projects> 
    <buildSpec> 
    </buildSpec> 
    <natures> 
    </natures> 
</projectDescription> 

import-android-gradle-as-general-project

0.2。放2 Eclipse。 “点” 文件到模块到/OpenSpritz-Android/app/src/main/OpenSpritz-Android/lib/src/main

add-eclipse-files

.project

<?xml version="1.0" encoding="UTF-8"?> 
<projectDescription> 
    <name>OpenSpritz-Android-app</name> 
    <comment></comment> 
    <projects> 
    </projects> 
    <buildSpec> 
     <buildCommand> 
      <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
     <buildCommand> 
      <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
     <buildCommand> 
      <name>org.eclipse.jdt.core.javabuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
     <buildCommand> 
      <name>com.android.ide.eclipse.adt.ApkBuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
    </buildSpec> 
    <natures> 
     <nature>com.android.ide.eclipse.adt.AndroidNature</nature> 
     <nature>org.eclipse.jdt.core.javanature</nature> 
    </natures> 
</projectDescription> 

.classpath

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="java"/> 
    <classpathentry kind="src" path="gen"/> 
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> 
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> 
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/> 
    <classpathentry kind="output" path="bin/classes"/> 
</classpath> 

0.3。导入为现有的Android代码到工作区

results

你就可以浏览代码熟悉的方式,但 甚至后,你将无法使用Eclipse ADT运行。

.4。

现在你可以用gradle CLI或Nodeclipse/Enide Gradle for Eclipsemarketplace)上运行的构建和任务

start

https://github.com/Nodeclipse/nodeclipse-1/issues/148

2

讨论以下为我工作

eclipse.classpath.plusConfigurations += configurations.compile 

eclipse.classpath.file { 
    beforeMerged { classpath -> 
    classpath.entries.removeAll() { c -> 
     c.kind == 'src' 
    } 
} 

withXml { 
    def node = it.asNode() 

    node.appendNode('classpathentry kind="src" path="src/main/java"') 
    node.appendNode('classpathentry kind="src" path="src/debug/java"') 
    node.appendNode('classpathentry kind="src" path="gen"') 

    node.children().removeAll() { c -> 
     def path = c.attribute('path') 
     path != null && (
       path.contains('/com.android.support/support-v4') 
       ) 
    } 
    } 
} 

eclipse.project { 
    name = 'AndroidGradleBasic' 

    natures 'com.android.ide.eclipse.adt.AndroidNature' 
    buildCommand 'com.android.ide.eclipse.adt.ResourceManagerBuilder' 
    buildCommand 'com.android.ide.eclipse.adt.PreCompilerBuilder' 
    buildCommand 'com.android.ide.eclipse.adt.ApkBuilder' 
} 

来源 - http://blog.gouline.net/2013/11/02/new-build-system-for-android-with-eclipse/

样本 - https://github.com/krishnaraj/oneclipboard

2

有四个问题与摇篮插件“com.android.application”和“月食”的组合:一是不添加配置类路径Eclipse的类路径,但这是易于修复。其次,必须对.AAR依赖性做些事情。这有点棘手。第三,我们需要包含像R.java这样的东西的生成源。最后,我们需要包含Android.jar本身。

我能够一起构建一个gradle配置,从Android Studio build.config中为Eclipse生成适当的.classpath文件。我的CPU风扇的效果非常令人满意,这款风扇一直在Android Studio上运行。 Eclipse将生成的项目视为一个功能完整的Java项目,但仅此而已。

我最后决定将直接在我的应用程序项目的build.gradle如下:

apply plugin: 'eclipse' 
eclipse { 
    pathVariables 'GRADLE_HOME': gradle.gradleUserHomeDir, "ANDROID_HOME": android.sdkDirectory 
    classpath { 
     plusConfigurations += [ configurations.compile, configurations.testCompile ] 

     file { 
      beforeMerged { classpath -> 
       classpath.entries.add(new org.gradle.plugins.ide.eclipse.model.SourceFolder("src/main/java", "bin")) 
       // Hardcoded to use debug configuration 
       classpath.entries.add(new org.gradle.plugins.ide.eclipse.model.SourceFolder("build/generated/source/r/debug", "bin")) 
       classpath.entries.add(new org.gradle.plugins.ide.eclipse.model.SourceFolder("build/generated/source/buildConfig/debug", "bin")) 
      } 

      whenMerged { classpath -> 
       def aars = [] 
       classpath.entries.each { dep -> 
        if (dep.path.toString().endsWith(".aar")) { 
         def explodedDir = new File(projectDir, "build/intermediates/exploded-aar/" + dep.moduleVersion.group + "/" + dep.moduleVersion.name + "/" + dep.moduleVersion.version + "/jars/") 
         if (explodedDir.exists()) { 
          explodedDir.eachFileRecurse(groovy.io.FileType.FILES) { 
           if (it.getName().endsWith("jar")) { 
            def aarJar = new org.gradle.plugins.ide.eclipse.model.Library(fileReferenceFactory.fromFile(it)) 
            aarJar.sourcePath = dep.sourcePath 
            aars.add(aarJar) 
           } 
          } 
         } else { 
          println "Warning: Missing " + explodedDir 
         } 
        } 
       } 
       classpath.entries.removeAll { it.path.endsWith(".aar") } 
       classpath.entries.addAll(aars) 

       def androidJar = new org.gradle.plugins.ide.eclipse.model.Variable(
        fileReferenceFactory.fromPath("ANDROID_HOME/platforms/" + android.compileSdkVersion + "/android.jar")) 
       androidJar.sourcePath = fileReferenceFactory.fromPath("ANDROID_HOME/sources/" + android.compileSdkVersion) 
       classpath.entries.add(androidJar) 
      } 
     } 
    } 
} 

// We need build/generated/source/{r,buildConfig}/debug to be present before generating classpath 
// This also ensures that AARs are exploded 
eclipseClasspath.dependsOn "generateDebugSources" 


// Bonus: start the app directly on the device with "gradle startDebug" 
task startDebug(dependsOn: "installDebug") << { 
    exec { 
     executable = new File(android.sdkDirectory, 'platform-tools/adb') 
     args = ['shell', 'am', 'start', '-n', android.defaultConfig.applicationId + '/.MainActivity'] 
    } 
} 

运行gradle eclipse,你将有一个Eclipse项目可以导入和编译。但是,这个项目是一个普通的Java项目。为了构建apk,我必须退回到gradle命令行并执行gradle installDebuggradle processDebugResources接收Android XML文件中的更改并重新生成build/generated/source下的文件。我使用Android SDK的“监视器”程序查看应用程序日志。如果没有Android Studio,我目前还没有找到任何方法来进行调试。

我从Android Studio中错过的唯一功能是调试(但谁有时间处理错误!)并以可视方式编辑资源。

+1

这对我来说非常合适,我已经创建了一个Gradle插件来完成这个工作,稍作修改以适应全新的Android构建系统https://github.com/greensopinion/gradle-android-eclipse –

+0

这个工作,我需要一些帮助,将这个项目转换为eclipse库。任何想法呢? – Govind