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?
- Ejecutar Robolectric en IDEA detrás del proxy
- Cómo configurar la configuración de SONAR para el complemento de sonar intellij para Android Studio?
- Desarrollo sustancial de Android en Scala
- Intentando ejecutar un proyecto de Android en IntelliJ: Error: Terminación del proceso de compilación anormal: Error: Esta instancia de Java no admite una JVM de 32 bits.
- Intellij Idea log GradleConnectionException: No se pudo ejecutar la compilación usando la instalación de Gradle mientras se construye
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.
- IntelliJ android problemas de procesamiento de interfaz de usuario - Missing Library
- Junit usando ActivityInstrumentationTestCase2 - Excepción en el constructor: Stub
- Android / Scala proyecto en IntelliJ 14 compila, pero se bloquea cuando se inicia no encontrar la clase Scala
- IntelliJ / búsqueda estructural: Elimine métodos inútiles que sólo llaman super-método
- Cómo agregar android.support.v7.widget.GridLayout en intelliJidea?
- Aplicación de Android con android-support-v4.jar añadido a lib enfrentando error al intentar iniciar sesión usando progaurd en IntelliJ Idea
- Diseño de vista previa con la etiqueta de raíz de mezcla en Intellij IDEA / Android Studio
- Agregar AAR en IntelliJ IDEA sin gradle
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>
.2. Ponga 2 Eclipse. Archivos "dot" en módulos en /OpenSpritz-Android/app/src/main
y /OpenSpritz-Android/lib/src/main
.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
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 )
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/
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.
- Cómo implementar la aplicación Phonegap en el iPhone sin tener hardware de Apple (iPhone + Mac)
- El comando adb no se encuentra en el entorno Linux