¿Qué es Gradle en Android Studio?


1314

Gradle es un poco confuso para mí, y también para cualquier desarrollador de Android nuevo. ¿Alguien puede explicar qué es Gradle en Android Studio y cuál es su propósito? ¿Por qué está incluido en Android Studio?



14
Para responder por qué querría una herramienta de compilación como Gradle, consulte esta publicación de Jeff Atwood.
Adam S

829
Cuando alguien hace una pregunta aquí que sí, tiene muchos enlaces en Google al respecto, lo que realmente están pidiendo es que alguien responda la pregunta con un lenguaje sencillo y la ponga en contexto , como por qué la necesitamos. , quién lo usará más, ¿necesitamos saberlo para crear aplicaciones de Android en Android Studio, etc.? Debido a que la mayoría de las veces los enlaces que se encuentran en Google están en "lenguaje tecnológico" y para un principiante esto es confuso.
Azurespot

3
@NoniA. Exactamente mis pensamientos. Todavía estoy un poco confundido, ¿Gradle es solo el proceso en segundo plano que compila el código que he escrito? Además, después de mirar muchas otras respuestas, mencionan dependencias. ¿Que son esos? ¡Muchas gracias!

Puede ver una explicación concisa y agradable aquí Presentación de gradle . Bastante útil
eRaisedToX

Respuestas:


1532

Respuesta corta

Gradle es un sistema de construcción.

Respuesta larga

Antes de Android Studio, usabas Eclipse para tus propósitos de desarrollo y, lo más probable es que no supieras cómo construir tu APK de Android sin Eclipse.

Puede hacer esto en la línea de comando, pero debe aprender qué hace cada herramienta (dx, aapt) en el SDK. Eclipse nos salvó a todos de estos bajos pero importantes detalles fundamentales al darnos su propio sistema de compilación.

Ahora, ¿alguna vez te has preguntado por qué la rescarpeta está en el mismo directorio que tu srccarpeta?

Aquí es donde el sistema de compilación entra en escena. El sistema de compilación toma automáticamente todos los archivos de origen ( .javao .xml), luego aplica la herramienta adecuada (por ejemplo, toma javalos archivos de clase y los convierte en dexarchivos), y los agrupa a todos en un archivo comprimido, nuestro querido APK.

Este sistema de compilación utiliza algunas convenciones: un ejemplo es especificar el directorio que contiene los archivos de origen (en Eclipse es una \srccarpeta) o archivos de recursos (en Eclipse es una \rescarpeta).

Ahora, para automatizar todas estas tareas, tiene que haber un script; Puede escribir su propio sistema de compilación utilizando scripts de shell en Linux o sintaxis de archivos por lotes en Windows. ¿Entendido?

Gradle es otro sistema de compilación que toma las mejores características de otros sistemas de compilación y las combina en una sola. Se mejora en función de sus deficiencias. Es un sistema de compilación basado en JVM , lo que eso significa es que puede escribir su propio script en Java, que Android Studio utiliza.

Una cosa interesante sobre gradle es que es un sistema basado en complementos . Esto significa que si tiene su propio lenguaje de programación y desea automatizar la tarea de construir algún paquete (salida como un JAR para Java) desde las fuentes, entonces puede escribir un complemento completo en Java o Groovy (o Kotlin, consulte aquí ), y distribuirlo al resto del mundo.

¿Por qué lo usó Google?

Google vio uno de los sistemas de compilación más avanzados del mercado y se dio cuenta de que podía escribir sus propios scripts con poca o ninguna curva de aprendizaje, y sin aprender Groovy ni ningún otro idioma nuevo. Entonces escribieron el complemento de Android para Gradle.

Debe haber visto build.gradlearchivos en su proyecto. Ahí es donde puede escribir scripts para automatizar sus tareas. El código que vio en estos archivos es el código Groovy. Si escribe System.out.println("Hello Gradle!");, se imprimirá en su consola.

¿Qué puedes hacer en un script de compilación?

Un ejemplo simple es que debe copiar algunos archivos de un directorio a otro antes de que ocurra el proceso de compilación real. Un script de compilación de Gradle puede hacer esto.


11
Tengo que decir que Gradle me estaba dando problemas al llevar un proyecto de AndroidStudio de una ubicación a otra. Desajustes de versiones, módulos faltantes, lo que sea ... me estaba costando mucho. Terminé recreando el esqueleto del proyecto y cortando / pegando las partes del código que eran del proyecto anterior al nuevo. Y esto está bajo Windows para las fuentes y el destino. Voy a moverlo ahora bajo un laboratorio basado en Linux.
jfmessier

22
Lo que no entiendo es por qué Gradle intenta conectarse a Internet para cada proyecto que hago o incluso cada vez que quiero compilar
AaA

44
Pensé que IntelliJ ya sabía cómo construir proyectos de Android sin la necesidad de otro sistema de compilación.
Arne Evertsson

18
Otra ventaja clave de gradle sobre los sistemas de compilación de estudio anteriores de Android es la administración de dependencias. Antes de usar una biblioteca de Android en un proyecto, uno tendría que descargar el código fuente, agregarlo a su proyecto y compilarlo con su proyecto. En cambio, con gradle se puede agregar una sola línea a build.gradle y gradle descargará la biblioteca compilada de un repositorio público y la agregará a su proyecto. Algunos ejemplos: blog.teamtreehouse.com/android-libraries-use-every-project Esto también funciona para archivos jar Java estándar en lugar de ponerlos en el directorio lib.
Stan Kurdziel

44
Gradle es un sistema de construcción terrible. Al usar Android Studio, quiero que se encargue de la compilación. No entiendo por qué agregar algunas clases obliga a Gradle a hacer una sincronización antes de que pueda ser útil. Trabajar con Visual Studio en comparación es increíble (o incluso X-Code): no se necesitan extras desagradables. El IDE construye el proyecto y la solución sin la necesidad de jugar en archivos aleatorios para la configuración que el proceso de compilación de Android necesita a veces o mediante actualizaciones de proyectos antiguos. Gradle es la peor parte de la experiencia de Android.
csmith

162

Es la nueva herramienta de compilación que Google quiere usar para Android. Se está utilizando debido a que es más extensible y útil que la hormiga. Está destinado a mejorar la experiencia del desarrollador.

Puede ver una charla de Xavier Ducrohet del Equipo de desarrolladores de Android en Google I / O aquí.

También hay otra charla sobre Android Studio por Xavier y Tor Norbye, también durante Google I / O aquí .


44
Pensé que IntelliJ ya sabía cómo construir proyectos de Android sin la necesidad de otro sistema de compilación.
Arne Evertsson

1
Entonces, ¿gradle es solo el proceso en segundo plano que compila el código que he escrito? Además, después de mirar muchas otras respuestas, mencionan dependencias. ¿Que son esos? Muchas gracias Daniel!

2
@ user5562706 No compila el código, pero es responsable de llamar al ejecutable que sí compila su código. Después de compilar su código, puede ejecutar otra tarea para empaquetarlo, otra para copiarlo en un directorio de su elección, luego tal vez otro para cargarlo en un servidor en algún lugar ... Es ese tipo de tareas Gradle, o cualquier compilación sistema, lo haremos.
Michael Berry

63

Gradle es un sistema de compilación que se ejecuta en Android Studio .

En otros idiomas, por ejemplo:


23
Cuando dijiste que Gradlees similar a make, acabo de recibir su concepto
usuario3405291

3
PHING de PHP
Yousha Aleayoub

15
Una de las formas más rápidas que he encontrado para aprender lo que hace una herramienta desconocida y dónde cae en la tubería, es escribir en Google el nombre de la herramienta y "vs". Los resultados generalmente mostrarán "X vs Y" donde Y es otra herramienta con la que podría estar más familiarizado.
James Kuang

webpack para javascript
codepig

47

Aquí hay una explicación detallada sobre qué Gradlees y cómo usarlo en Android Studio.

Explorando los archivos de Gradle

  1. Cada vez que crea un proyecto en Android Studio, el sistema de compilación genera automáticamente todos los archivos de compilación de Gradle necesarios.

Gradle Build Files

  1. Los archivos de compilación de Gradle utilizan a Domain Specific Language or DSLpara definir la lógica de compilación personalizada y para interactuar con los elementos específicos de Android del complemento de Android para Gradle.

  2. Los proyectos de Android Studio constan de 1 o más módulos, que son componentes que puede compilar, probar y depurar de forma independiente. Cada módulo tiene su propio archivo de compilación, por lo que cada proyecto de Android Studio contiene 2 tipos de archivos de compilación de Gradle.

  3. Archivo de compilación de nivel superior: aquí encontrará las opciones de configuración que son comunes a todos los módulos que conforman su proyecto.

  4. Archivo de compilación a nivel de módulo : cada módulo tiene su propio archivo de compilación Gradle que contiene configuraciones de compilación específicas del módulo. Pasará la mayor parte de su tiempo editando archivos de compilación de nivel de módulo en lugar del archivo de compilación de nivel superior de su proyecto.

Para ver estos build.gradlearchivos, abra el panel Proyecto de Android Studio (seleccionando la pestaña Proyecto) y expanda la carpeta Gradle Scripts. Los primeros dos elementos en la carpeta Gradle Scripts son los archivos de compilación de Gradle a nivel de proyecto y a nivel de módulo

Archivo de compilación Gradle de nivel superior

Cada proyecto de Android Studio contiene un único archivo de compilación de Gradle de nivel superior. Este build.gradlearchivo es el primer elemento que aparece en la carpeta Gradle Scripts y está claramente marcado como Proyecto.

La mayoría de las veces, no necesitará realizar ningún cambio en este archivo, pero sigue siendo útil para comprender su contenido y el papel que desempeña en su proyecto.

Archivos de compilación Gradle a nivel de módulo

Además del archivo de compilación de Gradle a nivel de proyecto, cada módulo tiene un archivo de compilación de Gradle propio. A continuación se muestra una versión anotada de un archivo de compilación básico de Gradle a nivel de módulo.

Otros archivos de Gradle

Además de los archivos build.gradle, su carpeta Gradle Scripts contiene algunos otros archivos Gradle. La mayoría de las veces no tendrá que editar manualmente estos archivos, ya que se actualizarán automáticamente cuando realice cambios relevantes en su proyecto. Sin embargo, es una buena idea comprender el papel que juegan estos archivos dentro de su proyecto.

gradle-wrapper.properties (Versión Gradle)

Este archivo permite a otras personas construir su código, incluso si no tienen instalado Gradle en su máquina. Este archivo verifica si está instalada la versión correcta de Gradle y descarga la versión necesaria si es necesario.

settings.gradle

Este archivo hace referencia a todos los módulos que componen su proyecto.

gradle.properties (Propiedades del proyecto)

Este archivo contiene información de configuración para todo su proyecto. Está vacío de forma predeterminada, pero puede aplicar una amplia gama de propiedades a su proyecto agregándolas a este archivo.

local.properties (ubicación del SDK)

Este archivo le dice al complemento Android Gradle dónde puede encontrar su instalación de Android SDK.

Nota: local.properties contiene información específica de la instalación local del SDK de Android. Esto significa que no debe mantener este archivo bajo control de origen.

Lectura sugerida - Tutorial de Tutsplus

Tengo una clara comprensión de gradle de esto.


1
Tenga en cuenta que se desaconsejan las respuestas de solo enlace , las respuestas SO deben ser el punto final de una búsqueda de una solución (frente a otra escala de referencias, que tienden a quedarse obsoletas con el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia.
kleopatra

30

Gradle es un tipo de herramienta de compilación que construye el código fuente del programa. Por lo tanto, es una parte importante de Android Studio y debe instalarse antes de comenzar a desarrollar su aplicación.

No tenemos que instalarlo por separado, porque Android Studio lo hace por nosotros cuando hacemos nuestro primer proyecto.


44
¿Qué quieres decir con construir el código fuente del programa? ¿No es ese el trabajo de un desarrollador?
committedandroider

Esta respuesta es completamente incorrecta en la forma en que está redactada. Gradle es la herramienta de empaquetado que viene incluida con Android Studio, por lo que se encarga de construir el apk. El código fuente siempre lo crea el compilador y nada más.
AutomEng

Sin embargo, según otra pregunta, parece que Gradle no funcionará correctamente sin una conexión a Internet confiable, ¿significa esto que tengo que tirar Android Studio hasta que se solucione?
Michael

2
@committedandroider: el trabajo de un desarrollador es escribir el código fuente, no construirlo . En el desarrollo del sistema, usamos la palabra "Build" para referirnos al proceso de empaquetar el código fuente compilado en un producto final (un paquete o un ejecutable )
MestreLion

1
@MestreLion lol yo estaba bastante confundido en ese entonces porque las personas utilizan 'construir' en referencia a la escritura de código fuente para su proyectos- construí este servidor de chat, esta aplicación para ...
committedandroider

26

DEFINICIÓN :: Gradle se puede describir como un mecanismo de construcción estructurado en el que proporciona al desarrollador las herramientas y la flexibilidad para administrar los recursos de un proyecto para crear compilaciones que son smaller in size, targeting specific requirementspara ciertos dispositivos de ciertas configuraciones


Configuraciones Básicas

  1. minimumSdk
  2. maximumSdk
  3. targettedSdk
  4. versionCode
  5. versionName

BIBLIOTECAS :: Podemos agregar bibliotecas de Android o cualquier otra biblioteca de terceros, además, según los requisitos fáciles, que era una tarea tediosa anteriormente. Si la biblioteca no se ajusta al proyecto existente, se muestra al desarrollador un registro en el que la persona puede encontrar una solución adecuada para realizar cambios en el proyecto y poder agregar la biblioteca. Es solo una línea de dependencia


GENERANDO VARIEDADES DE EDIFICIOS

Combinando tipos de compilación con sabores de compilación para obtener variedades de variantes de compilación

 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

TAMAÑO REDUCIDO

Gradle ayuda a reducir el tamaño de la compilación generada al eliminar los recursos no utilizados y también los elementos no utilizados de las bibliotecas integradas


PERMISOS DE GESTIÓN

Podemos especificar ciertos permisos para ciertas compilaciones agregando ciertos permisos en ciertos escenarios según los requisitos


CONSTRUYE PARA DETERMINADOS DISPOSITIVOS

Podemos administrar la generación de generación para ciertos dispositivos que incluyen ciertas densidades y ciertos niveles de API. Esto ayuda en la implementación de productos en la tienda de aplicaciones de acuerdo con los requisitos en múltiples tipos de dispositivos


BUENA REFERENCIA

Tutoriales de Vogella


25

Puede encontrar todo lo que necesita saber sobre Gradle aquí: Guía del usuario de Gradle Plugin

Objetivos del nuevo sistema de compilación

Los objetivos del nuevo sistema de construcción son:

  • Facilite la reutilización de código y recursos.
  • Facilite la creación de varias variantes de una aplicación, ya sea para distribución multi-apk o para diferentes sabores de una aplicación
  • Facilite la configuración, extensión y personalización del proceso de compilación
  • Buena integración IDE

¿Por qué gradle?

Gradle es un sistema de compilación avanzado, así como un kit de herramientas de compilación avanzado que permite crear una lógica de compilación personalizada a través de complementos.

Estas son algunas de sus características que nos hicieron elegir Gradle:

  • Lenguaje específico de dominio (DSL) para describir y manipular la lógica de compilación
  • Los archivos de compilación están basados ​​en Groovy y permiten mezclar elementos declarativos a través del DSL y usar código para manipular los elementos DSL para proporcionar una lógica personalizada.
  • Gestión de dependencias incorporada a través de Maven y / o Ivy.
  • Muy flexible. Permite usar las mejores prácticas pero no obliga a su propia manera de hacer las cosas.
  • Los complementos pueden exponer su propio DSL y su propia API para que los archivos de compilación los utilicen.
  • Buena API de herramientas que permite la integración IDE

25

Me refiero a dos tutoriales para escribir la Respuesta uno , dos

Gradle es una herramienta de construcción declarativa de uso general. Es de propósito general porque puede usarse para construir casi cualquier cosa que desee implementar en el script de compilación. Es declarativo ya que no desea ver mucho código en el archivo de compilación, que no es legible y menos mantenible. Entonces, si bien Gradle proporciona la idea de convenciones y una construcción simple y declarativa, también hace que la herramienta sea adaptable y los desarrolladores puedan ampliarla. También proporciona una manera fácil de personalizar el comportamiento predeterminado y diferentes ganchos para agregar características de terceros.

Gradle combina las partes buenas de ambas herramientas y proporciona características adicionales y utiliza Groovy como un lenguaje específico de dominio (DSL). Tiene el poder y la flexibilidad de la herramienta Ant con características de Maven, como el ciclo de vida de construcción y la facilidad de uso.

¿Por qué gradle? ¿Porqué ahora?

La respuesta de la herramienta de compilación es agregar funcionalidad de secuencias de comandos a través de mecanismos de extensión no estándar. Terminas mezclando código de scripting con XML o invocando scripts externos desde tu lógica de compilación. Es fácil imaginar que necesitará agregar más y más código personalizado con el tiempo. Como resultado, inevitablemente introduce una complejidad accidental, y la facilidad de mantenimiento desaparece.

Supongamos que desea copiar un archivo en una ubicación específica cuando está creando la versión de lanzamiento de su proyecto. Para identificar la versión, marque una cadena en los metadatos que describen su proyecto. Si coincide con un esquema de numeración específico (por ejemplo, 1.0-RELEASE), copie el archivo del punto A al punto B. Desde una perspectiva externa, esto puede sonar como una tarea trivial. Si tiene que confiar en XML, el lenguaje de construcción de muchas herramientas tradicionales, expresar esta lógica simple se vuelve bastante difícil.

Evolución de las herramientas de compilación de Java

La lógica de compilación de Java debe describirse en XML. XML es excelente para describir datos jerárquicos, pero no alcanza a expresar el flujo del programa y la lógica condicional. A medida que el script de compilación crece en complejidad, mantener el código de construcción se convierte en una pesadilla.

En Ant , haces que el objetivo JAR dependa del objetivo de compilación. Ant no da ninguna guía sobre cómo estructurar su proyecto. Aunque permite la máxima flexibilidad, Ant hace que cada script de compilación sea único y difícil de entender. Las bibliotecas externas requeridas por su proyecto generalmente se registran en el control de versiones porque no existe un mecanismo automatizado para extraerlas de una ubicación central.

Maven 1 , lanzado en julio de 2004, trató de facilitar ese proceso. Proporcionó un proyecto estandarizado y una estructura de directorios, así como la gestión de dependencias. Desafortunadamente, la lógica personalizada es difícil de implementar

Gradle encaja perfectamente en esa generación de herramientas de compilación y satisface muchos requisitos de las herramientas de compilación modernas (Figura 1). Proporciona un DSL expresivo, una convención sobre el enfoque de configuración y una potente gestión de dependencias. Realiza el movimiento correcto para abandonar XML e introducir el lenguaje dinámico Groovy para definir su lógica de compilación. Suena convincente, ¿no?

Gradle combina las mejores características de otras herramientas de compilación.

ingrese la descripción de la imagen aquí

Conjunto de características convincentes de Gradle

ingrese la descripción de la imagen aquí

¿Por qué construir sus proyectos Java con Gradle en lugar de Ant o Maven?

La herramienta de compilación predeterminada para Android (y la nueva estrella de herramientas de compilación en la JVM) está diseñada para facilitar la creación de scripts de compilaciones complejas en varios idiomas. Sin embargo, ¿debería cambiarlo si está usando Ant o Maven?

La clave para desbloquear las potentes funciones de Gradle dentro de su script de construcción radica en descubrir y aplicar su modelo de dominio, como se muestra en la imagen a continuación. ingrese la descripción de la imagen aquí

Gradle no puede conocer todos los requisitos específicos para la construcción de su empresa. Al exponer los ganchos en las fases del ciclo de vida, Gradle permite monitorear y configurar el comportamiento de ejecución del script de compilación.

Gradle establece un vocabulario para su modelo al exponer un DSL implementado en Groovy. Cuando se trata de un dominio de problemas complejos, en este caso, la tarea de crear software, poder usar un lenguaje común para expresar su lógica, puede ser una herramienta poderosa.

Otro ejemplo es la forma en que puede expresar dependencias a bibliotecas externas, un problema muy común resuelto por las herramientas de compilación. Gradle listo para usar le proporciona dos bloques de configuración para su script de compilación que le permiten definir las dependencias y repositorios de los que desea recuperarlos. Si los elementos DSL estándar no se ajustan a sus necesidades, incluso puede introducir su propio vocabulario a través del mecanismo de extensión de Gradle.

Integración con otras herramientas de compilación

Gradle juega bien con Ant, Maven e Ivy de sus predecesores, como se muestra en la imagen a continuación.

ingrese la descripción de la imagen aquí

Automatizando su proyecto desde la compilación hasta la implementación

ingrese la descripción de la imagen aquí

En imagen: etapas de una tubería de implementación.

  • Compilando el código

  • Ejecución de pruebas unitarias y de integración

  • Realizar análisis de código estático y generar cobertura de prueba

  • Creando la distribución

  • Aprovisionamiento del entorno objetivo

  • Desplegando el entregable

  • Realización de humo y pruebas funcionales automatizadas.

Me refiero a dos tutoriales para escribir la Respuesta uno , dos


1
Además de eso, puede construir sus aplicaciones de Android desde la línea de comandos en su máquina o en máquinas donde Android Studio no está instalado (como los servidores de integración continua).
jettimadhuChowdary

23

Gradle es un sistema de construcción . Los sistemas de compilación son herramientas de software diseñadas para automatizar el proceso de compilación de programas. Los sistemas de compilación vienen en varias formas y se utilizan para una variedad de tareas de compilación de software. Si bien su objetivo principal es crear ejecutables de manera eficiente.

Otro término relacionado es Automatización de compilación, que es el proceso de automatizar la creación de una compilación de software y los procesos asociados que incluyen: compilar el código fuente de la computadora en código binario, empaquetar el código binario y ejecutar pruebas automatizadas.

Pocos sistemas de compilación similares para otros idiomas son (ver la lista completa aquí ):

  1. Apache Ant y Apache Maven - Java
  2. sbt (Herramienta de compilación simple) - para Scala (Play framework, etc.)
  3. AAP: herramienta de compilación basada en Python
  4. Rastrillo (Apache Builder) - Ruby
  5. Leiningen para Clojure

17

A riesgo de ser discursivo, creo que detrás de esto está la cuestión de por qué la experiencia Android Studio / Gradle es tan mala.

Experiencia típica de Clojure:

  • descargue el proyecto con las dependencias enumeradas en project.clj.
  • Leiningen obtiene las dependencias gracias a Clojars y Maven.
  • Proyecto compila.

Experiencia típica de Android Studio / Gradle:

  • "Importar mi proyecto Eclipse".
  • OK proyecto importado.
  • Gradle está haciendo sus cosas ... espera ... espera ... espera ... Gradle ha terminado.
  • Compilar ... no puedo compilar porque no sé qué es una X / no puedo encontrar la biblioteca Y.

No estoy seguro de que esto sea culpa de Gradle exactamente. Pero la "importación del proyecto Eclipse" parece bastante escamosa. A pesar de la supuesta sofisticación de Gradle y las virtudes de un sistema de compilación, Android Studio simplemente no parece importar muy bien las dependencias de compilación o el proceso de compilación de Eclipse.

No le indica cuándo no se pudo importar un gráfico de dependencia completo. Android Studio no ofrece ayuda o consejos útiles sobre cómo resolver el problema. No le dice dónde puede buscar manualmente en las carpetas de Eclipse. No te dice qué biblioteca parece faltar. O ayudarlo a buscar Maven, etc. para ellos.

En 2016, cosas como Leiningen / Clojars, o npm del nodo, o pip de Python, o el paquete Debian (y estoy seguro de que muchos administradores de paquetes similares para otros lenguajes y sistemas) funcionan perfectamente ... las dependencias faltantes son cosa del pasado.

Excepto con Android. Android Studio es ahora el único lugar donde todavía parece experimentar un infierno de dependencia perdida.

Me inclino a decir que esto es culpa de Google. Rompieron el ecosistema de Android (y miles de proyectos existentes de Android / tutoriales en línea) cuando decidieron cambiar de Eclipse a Android Studio / Gradle sin producir un proceso de conversión robusto. Las personas cuyos proyectos funcionan en Eclipse no los están adaptando a AS (presumiblemente porque es un dolor para ellos). Y las personas que intentan utilizar esos proyectos en AS están enfrentando los mismos problemas.

Y de todos modos, si Gradle es este sistema de construcción súper potente, ¿por qué sigo administrando muchas otras dependencias en el administrador de SDK? ¿Por qué no puede un proyecto que necesita, por ejemplo, el ndk especificar esto en su archivo Gradle para que se instale y cree automáticamente cuando sea necesario? ¿Por qué es especial NDK? Del mismo modo para las plataformas de destino? ¿Por qué los estoy instalando explícitamente en el IDE en lugar de simplemente verificar mi proyecto contra ellos y tener todo esto resuelto para mí detrás de escena?


44
Estoy totalmente de acuerdo en que Gradle es un sistema de construcción terrible. Es el componente que hace que Android Studio sea mucho peor que X-Code o Visual Studio. Me doy cuenta de que estos deben "construir" el sistema detrás de escena, pero realmente no estoy obligado a conocer / cuidar / jugar con sus elementos internos. Gradle, por otro lado, parece romperse con cada actualización de Android Studio y bloquea el sistema incluso agregando una clase. Ningún otro IDE hace eso.
csmith

14

Gradle es un sistema de compilación avanzado, así como un kit de herramientas de compilación avanzado que permite crear lógica de compilación personalizada a través de complementos.

Ventajas:

  • Dsl: lenguaje específico de dominio, basado en groovy
  • DAG - Gráfico acíclico dirigido
  • Construcciones incrementales
  • Modelo de dominio extensible
  • Gradle siempre está actualizado
  • Antes de que se ejecute una tarea, Gradle toma una instantánea de la entrada y salida de su tarea.
  • En caso de que la instantánea haya cambiado o no exista, Gralde volverá a ejecutar esta tarea.

Entradas manifiestas

A través del DSL es posible configurar las siguientes entradas de manifiesto:

Construir variante

De manera predeterminada, el complemento de Android configura automáticamente el proyecto para crear una versión de depuración y una versión de lanzamiento de la aplicación.

Dependencias

  1. Dependencias locales:

Si tiene archivos binarios en su sistema de archivos local de los que depende un módulo, como archivos JAR, puede declarar estas dependencias en el archivo de compilación para ese módulo.

  1. Dependencias remotas:

Primero, el repositorio debe agregarse a la lista, y luego la dependencia debe declararse de manera que Maven o Ivy declaren sus artefactos.


13

Gradle es para el lenguaje Groovy JVM lo que Ant es para Java. Básicamente, es la herramienta de compilación de Groovy. A diferencia de Ant, se basa en el lenguaje Groovy completo. Puede, por ejemplo, escribir el código de secuencia de comandos Groovy en la secuencia de comandos Gradle para hacer algo en lugar de depender de un idioma de dominio específico.

No conozco la integración específica de IntelliJ, pero imagina que puedes "extender" Groovy de tal manera que puedas escribir primitivas específicas de lenguaje "build" y que simplemente se vuelvan parte del lenguaje Groovy. (La metaprogramación de Groovy es una discusión completa en sí misma). IntelliJ / Google podría usar Gradle para construir un lenguaje de compilación de muy alto nivel, sin embargo, es una compilación de lenguaje en un estándar abierto y expandible.


2
no es la "herramienta de compilación Groovys" - es una herramienta de compilación multipropósito cuyo DSL se construye sobre groovy
martyglaubitz

10

Gradle es un kit de herramientas de compilación avanzado para Android que gestiona dependencias y le permite definir una lógica de compilación personalizada. las características son como

  • Personalice, configure y amplíe el proceso de compilación.

  • Cree múltiples APK para su aplicación con diferentes características usando el mismo proyecto.

  • Reutilizar código y recursos.

referir


9

Gradle es un kit de herramientas de construcción automatizado que puede integrarse en muchos entornos diferentes, no solo para proyectos de Android.

Aquí hay algunas cosas que puedes hacer con gradle.

  • Configuración mínima requerida para nuevos proyectos porque Gradle tiene configuraciones predeterminadas para sus proyectos de estudio de Android.

  • Declaración de dependencia. Puede declarar archivos jar de dependencia o archivos de biblioteca alojados en un servidor local o remoto.

  • Gradle genera automáticamente un directorio de prueba y un APK de prueba a partir de la fuente de su proyecto.

  • Si agrega toda la información necesaria, como keyPasswordy keyAlias, a su archivo de compilación de Gradle, puede usar Gradle para generar APK firmados.

  • Gradle puede generar múltiples APK con diferentes paquetes y configuraciones de compilación desde un solo módulo.


8

En Android Studio, Gradle es una herramienta de compilación personalizada que se utiliza para compilar paquetes de Android (archivos apk) administrando dependencias y proporcionando una lógica de compilación personalizada.

El archivo APK (paquete de aplicación de Android) es un archivo zip especialmente formateado que contiene

  • Código de bytes
  • Recursos (imágenes, interfaz de usuario, xml, etc.)
  • Archivo de manifiesto

Un archivo apk se firma y se envía al dispositivo usando ADB (Android Debug Bridge) donde se ejecuta.


6

Gradle es una herramienta de compilación personalizada y utilizada para compilar APK o conocido como kit de paquete de aplicación.


4

por @Brian Gardner:

Gradle es una herramienta de construcción extensa y un administrador de dependencias para proyectos de programación. Tiene un lenguaje específico de dominio basado en Groovy. Gradle también ofrece soporte de construcción por convención para muchos tipos de proyectos, incluidos Java, Android y Scala.

Característica de Gradle:

  1. Gestión de dependencias
  2. Usando Ant de Gradle
  3. Complementos Gradle
  4. Complemento Java
  5. Complemento de Android
  6. Construcciones multiproyecto

3

Gradle es lo que hace posible automatizar la construcción de proyectos complejos de Android que involucran cientos de miles de líneas de código de múltiples fuentes, proyectos, bibliotecas, etc. Puede generar condicionalmente múltiples APK optimizados basados ​​en una gran cantidad de especificaciones de configuración, si usted es interesado, las otras respuestas proporcionan más detalles de este aspecto de Gradle.

Sin embargo, si eres nuevo en el desarrollo de Android, Gradle en el 99% de los casos es lo que detiene la construcción de tu proyecto. Es un sistema complejo e inescrutable que ofusca efectivamente el proceso de compilación de Android y esencialmente lo hace no disponible para desarrolladores sin experiencia, es decir, para construir una aplicación de Android de nivel de entrada simple, el novato desprevenido podría necesitar estudiar y comprender muchas cosas por las que no negociaron. como:

  • Estructura y ecosistema de Android APK
  • Android Studio
  • Java Classpaths y dependencias
  • Maravilloso
  • Gradle scripts de compilación
  • Muchas otras tecnologías complejas e interesantes.

Todas estas cosas son interesantes y útiles para los desarrolladores de Android, pero están lejos de ser fáciles y presentan una barrera de entrada formidable. Sospecho que lo que inspiró al OP para hacer esta pregunta es la sensación de frustración que inevitablemente golpea al desarrollador neófito después de pasar demasiado tiempo tratando de obtener una aplicación simple para construir y ser continuamente frustrado por Gradle. El problema se exacerba perversamente por la abrumadora cantidad de documentación altamente técnica que está disponible para todas estas tecnologías. También para una gran cantidad de necesidades de desarrollo, Gradle es excesivo.

Una alternativa es escribir un script de shell que construya su proyecto mediante la automatización de las herramientas disponibles en el SDK de Android. Las virtudes de este enfoque son muchas, para empezar es probablemente la mejor manera de estudiar y comprender el proceso de compilación y el ecosistema de Android, y le permite controlar completamente cómo se construye su aplicación. Sin embargo, este enfoque es más adecuado para los fanáticos de la tecnología profundamente irremediables que para los novatos sin experiencia que prueban Android.

Lo que destaca por su ausencia (por favor infórmeme si existe tal cosa) es un IDE de nivel de entrada, liviano con un conjunto de características reducidas que simplifica simultáneamente el proceso de compilación sin ocultarlo (por lo tanto, no es un frijol o eclipse). usa Gradle (lo que estaba mal con Ant). Debería facilitar la generación de APK que se ajusten a algunas configuraciones comunes y usar una estructura de proyecto que pueda evolucionar a un proyecto completo de Android Studio si decide tomarlo de esa manera.


1

En términos simples, Gradle es una herramienta proporcionada por Android Studio para implementar dos procesos importantes:

  1. Construye nuestros proyectos
  2. Empaquete AndroidManifest.xml, la carpeta res y el código binario en un archivo zip especialmente formateado llamado APK

1

Resultados de búsqueda Fragmento destacado de la web Android | construir. Gradle Gradle es un sistema de compilación (código abierto) que se utiliza para automatizar la compilación, las pruebas, la implementación, etc. ... Por ejemplo, la secuencia de comandos de compilación de Gradle puede realizar la tarea simple de copiar algunos archivos de un directorio a otro El proceso sucede.


1

En Android Studio, Gradle se usa para construir nuestros proyectos de aplicaciones de Android, por lo tanto, desempeña el papel de un sistema de construcción. Antes de Android Studio, en Eclipse solíamos compilar y compilar las aplicaciones usando la herramienta de línea de comandos que pronto se hizo cargo de los pasos basados ​​en GUI para construir y ejecutar aplicaciones de Android en eclipse usando ANT. Cada herramienta de desarrollo de aplicaciones de Android tiene que compilar recursos, código fuente de Java, bibliotecas externas y combinarlas en un APK final.

Gradle es un sistema de compilación, que es responsable de la compilación, prueba, implementación y conversión del código en archivos .dex y, por lo tanto, ejecuta la aplicación en el dispositivo.

Como Android Studio viene con el sistema Gradle preinstalado, no es necesario instalar softwares de tiempo de ejecución adicionales para construir nuestro proyecto. Cada vez que hace clic en el correrbotón en Android Studio, una tarea de Gradle se activa automáticamente y comienza a construir el proyecto y, una vez que Gradle completa su tarea, la aplicación comienza a ejecutarse en AVD o en el dispositivo conectado.

Un sistema de compilación como Gradle no es un compilador, un enlazador, etc., pero controla y supervisa la operación de compilación, vinculación de archivos, ejecución de casos de prueba y, finalmente, agrupa el código en un archivo apk para su aplicación de Android.

Hay dos archivos build.gradle para cada proyecto de estudio de Android, uno para aplicaciones y otro para archivos de compilación de nivel de proyecto (nivel de módulo) .

En el proceso de compilación, el compilador toma el código fuente, recursos, archivos JAR bibliotecas externas y AndroidManifest.xml (que contiene los meta-datos sobre la aplicación) y convertirlos en .dex (archivos ejecutables) Dalvik archivos, que incluye el código de bytes . Ese código de bytes es compatible con todos los dispositivos Android para ejecutar su aplicación. Luego, APK Manager combina los archivos .dex y todos los demás recursos en un solo archivo apk. APK Packager firma el apk de depuración o lanzamiento usando el almacén de claves de depuración o lanzamiento correspondiente.

El apk de depuración generalmente se usa con fines de prueba o podemos decir que se usa solo en la etapa de desarrollo. Cuando su aplicación esté completa con las funciones deseadas y esté listo para publicar su aplicación para uso externo, entonces necesitará un apk de lanzamiento firmado con un almacén de claves de lanzamiento.

Ahora vamos a arrojar algo de luz sobre los archivos gradle.

setting.gradle El setting.gradle archivo (Gradle ajuste) se utiliza para especificar todos los módulos utilizados en su aplicación.

build.gradle (nivel de proyecto) El archivo build.gradle de nivel superior (módulo) es un archivo de compilación de nivel de proyecto, que define las configuraciones de compilación a nivel de proyecto. Este archivo aplica configuraciones a todos los módulos en el proyecto de aplicación de Android.

build.gradle (nivel de aplicación) El archivo de nivel de aplicación build.gradle se encuentra en cada módulo del proyecto de Android. Este archivo incluye el nombre de su paquete como ID de aplicación, nombre de versión (versión apk), código de versión, sdk mínimo y objetivo para un módulo de aplicación específico. Cuando incluye bibliotecas externas (no los archivos jar), debe mencionarlo en el archivo gradle de nivel de aplicación para incluirlas en su proyecto como dependencias de la aplicación.

Nota: Si una determinada aplicación se desarrolla en variaciones para módulos individuales como, por ejemplo, Smart Phone, Tablet o TV, se deben crear archivos gradle separados para todos. Incluso puede iniciar su sistema gradle a través de la herramienta de línea de comandos. Los siguientes comandos se utilizan para ello:

./gradlew build - (proyecto de construcción)
./gradlew clean build - (proyecto de construcción completo desde cero)
./gradlew clean build - (ejecuta la prueba)
./gradlew wrapper - (para ver todas las tareas disponibles)


0

Gradle = Groovy + Cradle Comentario del foro Hans Dockter

La confusión es un poco innecesaria cuando podría haberse llamado "Build" o algo así en Android Studio.

Nos gusta hacernos las cosas difíciles a nosotros mismos en la comunidad de Desarrollo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.