Cómo utilizar Gradle para generar archivos de proyecto Eclipse e Intellij para proyectos de Android

¿Es posible generar archivos de proyectos Eclipse e Intellij para proyectos de Android con Gradle?

En maven haríamos mvn eclipse:eclipse y en PlayFramework haríamos play eclipsify . ¿Tiene Gradle esta característica para los proyectos de Android?

He instalado Gradle (1.6) y Android SDK Manager (22.0.1) explicado aquí

Este es mi archivo 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') } } 

Y luego ejecuto el comando:

 gradle clean build cleanEclipse eclipse 

Se basa muy bien, pero cuando importo el proyecto en Eclipse se ve como un proyecto normal de java.

¿Alguien sabe cómo Gradle puede crear archivos específicos de proyectos de Android para Eclipse ?

¿Es esta una característica priorizada por Gradle?

– ACTUALIZACIÓN –

Creo que este es un problema. Así que lo he publicado en el equipo de herramientas de Android número # 57668 . Por favor, la estrella de ellos para dar prioridad a la cuestión 🙂

– ACTUALIZACIÓN –

No parece que el equipo de Herramientas de Android esté investigando este problema. Así que por ahora me he convertido a Android Studio donde puedo importar mi proyecto gradle con dependencias a través del IDE.

Gradle sí mismo es una herramienta genérica de la estructura, no se crea específicamente para el androide.

Toda la funcionalidad está habilitada mediante plug-ins. Tradicionalmente, los complementos de compilación no generan la estructura del proyecto. Ese es el trabajo de las herramientas específicas del proyecto. El plug android para Gradle sigue esto.

El problema es que la herramienta android actual en SDK genera un antiguo tipo de estructura de proyecto (build de hormigas). La nueva estructura del proyecto sólo se puede generar a través de Android Studio.

Existe un concepto de archetypes en herramientas como Maven, que permiten el uso de plantillas de proyectos. Gradle no es compatible con eso todavía (se han realizado solicitudes para esta función).

Consulte este hilo: http://issues.gradle.org/browse/GRADLE-1289 , algunos usuarios han proporcionado scripts para generar la estructura.

La función de inicialización de compilación está en curso: https://github.com/gradle/gradle/blob/master/design-docs/build-initialisation.md

Esperemos que alguien pueda escribir un script para hacerlo, consulte esta guía para la nueva estructura del proyecto: http://tools.android.com/tech-docs/new-build-system/user-guide

Actualizar

Ahora hay un androide oficial IDE: Android Studio . Se basa en Intellij y el nuevo sistema de construcción está basado en Gradle.

Según lo respondido en el número 57668 por el equipo de Android (planteado por @arcone)

Miembro del proyecto # 2 x … @ android.com

El complemento de eclipse no es compatible con el complemento de Android.

No podrá importar un proyecto de gradle de Android a Eclipse utilizando el soporte predeterminado de Gradle en Eclipse.

Para que funcione en Eclipse tendremos que cambiar el plugin Gradle para Eclipse, de la misma manera que estamos modificando el soporte de Gradle en IntelliJ

Que es el equipo de Android está trabajando en gradle plugin para IntelliJ y gradle plugin para Eclipse necesita ser actualizado también.

Lo que es posible con Eclipse ahora es

.1. Importar el proyecto como proyecto general

.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

.2. Ponga 2 Eclipse. Archivos "dot" en módulos en /OpenSpritz-Android/app/src/main y /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> 

.3. Importar como código existente de Android en el área de trabajo

Resultados

Puede explorar el código de manera familiar, pero incluso después de que no será capaz de ejecutar con Eclipse ADT.

.4.

Ahora puede ejecutar compilación y tareas con gradle CLI o Nodeclipse / Enide Gradle para Eclipse ( marketplace )

comienzo

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

Lo siguiente funcionó para mí

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

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

Muestra – https://github.com/krishnaraj/oneclipboard

Existen cuatro problemas con la combinación de los complementos Gradle 'com.android.application' y 'eclipse': Primero, los classpaths de configuración no se agregan al classpath de Eclipse, pero esto es fácil de arreglar. En segundo lugar, algo debe hacerse acerca de las dependencias .AAR. Esto fue un poco más complicado. En tercer lugar, necesitamos incluir las fuentes generadas para cosas como R.java. Por último, tenemos que incluir Android.jar en sí.

Fui capaz de cortar juntos una configuración de gradle que generaría archivos .classpath adecuados para Eclipse desde un build.config Studio de Android. Los efectos fueron muy satisfactorios para mi fan de CPU, que había estado funcionando constantemente con Android Studio. Eclipse ve el proyecto resultante como un proyecto Java completamente funcional, pero sólo eso.

Terminé poniendo lo siguiente directamente en build.gradle en mi app-project:

 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'] } } 

Ejecute gradle eclipse y tendrá un proyecto Eclipse que puede ser importado y compilado. Sin embargo, este proyecto actúa como un proyecto normal de Java. Para construir el apk, tengo que caer de nuevo a la línea de comandos gradle y ejecutar gradle installDebug . gradle processDebugResources capta los cambios en los archivos XML de Android y regenera los archivos bajo build/generated/source . Utilizo el programa "monitor" con Android SDK para ver los registros de aplicaciones. Hasta ahora no he encontrado ninguna manera de depurar sin Android Studio.

Las únicas características que extraño de Android Studio son la depuración (pero que tiene tiempo para errores) y la edición de recursos visualmente.

Tal vez estoy perdiendo algo muy obvio, pero no es el plugin de eclipse lo que estás buscando? Esto genera un archivo .project así como un archivo .classpath y los actualiza cuando sea necesario cuando se ejecutan tiempos posteriores.

También hay un plugin IDEA , aunque no he usado este y no puedo hablar con él.

Espero que ayude.

He creado un nuevo plugin de Gradle que genera los archivos apropiados de .project y de .classpath Eclipse, basados ​​en la respuesta proporcionada por Johannes Brodwall en este desbordamiento de pila.

Consulte https://github.com/greensopinion/gradle-android-eclipse para obtener más detalles.

  • ¿Hay una manera fácil de tener el aviso de derechos de autor añadido automáticamente por android studio?
  • ¿Cómo puedo configurar IntelliJ IDEA para aplicaciones android en un MAC
  • Separar un proyecto de Android en varias bibliotecas de dependientes
  • ShortCut para añadir el campo de clase al constructor existente en AndroidStudio o IDEA
  • IntelliJ IDEA 12 - Nuevo asistente de módulo de aplicaciones de Android falla con "no se puede encontrar el directorio de recursos para el módulo"
  • ¿Cómo detectar rápidamente el código fuente no utilizado de greenrobot EventBus?
  • Agrega .idea / libraries a .gitignore con Android Studio (y Gradle) una buena idea?
  • No hay icono de la aplicación en ActionBar
  • ¿Hay algún soporte IDE para crear Cordova Plugins?
  • Conexión por nombre de host
  • Android Studio: ¿Por qué mi nuevo proyecto contiene 2 módulos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.