true - gradle version android studio
¿Cuál es el propósito de Gradle? (4)
¿Cuáles son estas dependencias?
Hay tantas bibliotecas geniales que podrías decidir usar. Y muchas de estas bibliotecas están soportando la integración con gradle ahora. Así que ya no tendrá que importar el proyecto y alojarlo usted mismo. Todo está alojado en mavencentral. Aún necesita la biblioteca de soporte, por ejemplo, incluso si decide apuntar a API 11+.
¿Qué es una envoltura Gradle?
Un envoltorio de Gradle es una herramienta increíble, si está trabajando en un equipo, o especialmente en un proyecto de código abierto. No necesitas tener instalado Gradle. El reiniciador de Gradle descargará y almacenará en caché todas sus dependencias en la primera ejecución. Así que todos los desarrolladores de tu equipo pueden construir el proyecto realmente rápido.
¿Por qué Gradle necesita estar en línea constantemente?
Porque las dependencias necesitan estar sincronizadas. Estás de suerte, si estás usando Android Studio sin embargo. La última versión soporta un "modo offline gradle".
De las notas de publicación :
Studio ahora admite el modo Gradle Offline. Esto es útil si se encuentra sin una conexión de red, y sus dependencias están usando la sintaxis más para elegir la última versión disponible. En ese caso, Gradle se conectará una vez al día (de manera predeterminada) al repositorio de artefactos para ver si hay una versión más reciente. Si esa conexión de red falla, la compilación falla. Si no tiene una conexión de red, esto es problemático. Ahora puede abrir las opciones Compilador> Gradle y habilitar el modo Desconectado, que le indicará a Gradle que ignore los controles de actualización hasta la fecha:
¿Por qué es importante que Gradle use Groovy?
Escribes plugins de Gradle en Groovy. Y todas tus tareas de gradle en build.gradle también.
Precaución: no soy un experto en gradle. De hecho, un usuario relativamente nuevo también.
Podría usar un poco de ayuda para comprender los conceptos detrás de Gradle (plugin v 0.7) en el contexto de Android Studio 0.4.0. No he usado Gradle antes y solo me está causando problemas. No veo su propósito / beneficio porque no sé lo suficiente.
Algunas preguntas especificas que tengo
¿Cuáles son estas dependencias? Estoy creando una aplicación simple con un cajón de navegación, orientada a API 11+, donde debería ser compatible de forma nativa. ¿Qué dependencias podría estar usando?
¿Qué es una envoltura Gradle? ¿Qué cambios, si los hay, hace en la solicitud completada?
¿Por qué Gradle necesita estar en línea constantemente? No tengo acceso a Internet en mi computadora portátil personal cuando estoy en el trabajo. Llegué al punto de que no puedo ejecutar o probar mi aplicación porque Gradle no puede resolver algunos recursos sin acceso a Internet.
¿Por qué es importante que Gradle use Groovy? He buscado en Internet y eso suele ser algo que a la gente le gusta de Gradle, pero no suelen explicar por qué Groovy es importante o qué hace para una aplicación de Android.
A veces es difícil como programador intermedio, ya que la información tiende a ser demasiado simple o demasiado compleja. Aparte de mis preguntas específicas, cualquier información adicional que pueda proporcionar sería útil. No busco debatir los pros y los contras de Gradle en comparación con otras herramientas que pueden hacer lo mismo, me gustaría saber más sobre Gradle y su uso para poder tomar decisiones informadas.
Gracias
Algunas de sus preguntas son generales porque hablan de por qué las herramientas de construcción son una buena cosa en general. Otros llegan a Gradle específicamente. Trataré de abordar ambas categorías de la manera más sucinta posible, al mismo tiempo que trato de evitar la terminología punzante de los demás.
Las herramientas de compilación como Maven, Gradle, SBT, Leiningen, etc. ayudan a automatizar tareas que de otra forma tendríamos que realizar manualmente o "automatizar manualmente". Uso este último para describir lo que solía hacer con Ant: escribir tareas personalizadas para compilar, ejecutar, generar Javadoc, etc. para que las tareas puedan automatizarse para el futuro. Al cumplir con las convenciones originalmente definidas por Maven y adoptadas por los demás posteriormente (como poner su fuente en src / main / java ), esto se hace posible. Si sigo las convenciones, la herramienta de compilación puede compilar, ejecutar, generar Javadoc, probar y todo lo demás con un mínimo trabajo extra.
Ahora a sus preguntas (en orden):
- Otra función crítica de las herramientas de compilación es reducir el "infierno de tarros" al administrar las dependencias de manera consistente en todas las compilaciones. Solo especifico qué versión de Apache Commons o Google Guava o Spring o Jackson quiero (o incluso rango de versiones) y la herramienta de compilación las descargará y las colocará en algún lugar para que puedan estar en el classpath y en la compilación si corresponde (como un archivo de guerra). También puedo definir ámbitos, como quiero que esta dependencia esté disponible en tiempo de compilación pero esta otra solo en tiempo de ejecución. ¿Debo proporcionarlo explícitamente o estará disponible? Cosas como esas.
- Esto es específico de Gradle. Como se describe here , la envoltura de Gradle ayuda a los equipos a ejecutar Gradle sin tener que instalar Gradle de forma manual y al mismo tiempo mantener la coherencia. Todos usan la misma versión. Una vez que lo configura, nunca tiene que preocuparse por eso, y todas las tareas de Gradle que desea utilizar están disponibles a través del envoltorio, por lo que no necesita preocuparse de que esté allí. Puedes elegir instalar Gradle directamente y ejecutarlo directamente, pero rara vez veo el punto.
- Esto es general. Mencioné anteriormente la gestión de la dependencia. Para obtener estas dependencias, la herramienta de compilación debe estar en línea donde esté disponible desde Maven Central o un grupo de repositorios de terceros. Otra innovación de Maven adoptada por los otros es la gestión de repositorios , por lo que los artefactos compilados se publican en un repositorio de acuerdo con la convención para que otros proyectos puedan usarlos. Por lo general, no te importa eso. Simplemente le dice a la herramienta que necesita una cierta dependencia y que sabe cómo agarrarla porque todos siguen las convenciones. En situaciones en las que no tiene acceso a Internet (algo con lo que estoy muy familiarizado), sus opciones son simplemente tomar todas las dependencias cuando está en línea y luego, opcionalmente, configurar un repositorio local de Maven como Nexus o Artifactory para publicar esos artefactos. Luego le dices a tu herramienta de construcción que mire allí, así como a Maven Central, etc.
- Maven está configurado con XML, y eso parecía realmente genial en ese momento. Pero hay dos consecuencias. Una es que la configuración se vuelve muy verbosa. Otra es que se hace difícil hacer cosas personalizadas. Tienes que hacer todo de forma declarativa en XML, lo que a muchos les resulta difícil. Usted configura los complementos en XML, o escribe los suyos propios y los envuelve de una manera que Maven puede entender y puede configurar en XML. Es mucho más fácil y más poderoso hacer cosas de compilación personalizada en código. Gradle eligió a Groovy para esto porque Groovy es ideal para DSL y es muy fácil de aprender para los desarrolladores de Java que vienen de Maven. SBT eligió a Scala y Leiningen eligió a Clojure porque esas herramientas de compilación están dirigidas a esos lenguajes / plataformas, por lo que un desarrollador de Scala, por ejemplo, no tiene que aprender nada nuevo para usar SBT, además del DSL. Pero el punto más amplio es que confiar en el código en lugar de XML tiene muchos beneficios.
Espero que ayude.
Entiendo lo que todos afirman en cuanto a por qué es necesaria la parte en línea de Gradle, pero para aquellos de nosotros que están detrás de los cortafuegos en el trabajo, o cuando podemos estar trabajando sin conexión, es realmente una carga para nosotros tener que estar en línea al menos una vez para poder compilar en modo offline.
Simplemente no entiendo por qué este requisito se coloca en el proyecto. ¿Qué sucede si estoy iniciando un proyecto completamente nuevo en Android Studio con el que quiero probar un concepto? No puedo hacerlo a menos que esté en línea al menos una vez. ¿Qué pasa si no tengo acceso a Internet en ese momento y quiero hacer esto? ¿Entonces que?
Parece un requisito innecesario que sobrecarga al desarrollador con problemas innecesarios que podrían evitarse. Una vez más, entiendo la razón detrás de esto, pero aún así, forzar el requisito de al menos compilar una vez en línea para usar sin conexión parece un poco ridículo.
Quiero usar Gradle, pero en este momento es algo que ni siquiera podemos usar en el trabajo debido a los requisitos en línea. Tendré que trabajar con nuestro departamento de seguridad para determinar qué agujeros perforar en nuestro firewall para permitir que esto suceda, así como configurar nuestro proxy correctamente para permitirlo.
Por lo tanto, en este momento, no puedo recomendar Gradle para usarlo en mi lugar de trabajo, lo que significa que también continuaremos usando Eclipse para el desarrollo de Android en lugar de Android Studio. Parece un requisito limitante que no parece necesario.
Supongamos que la comprensión de los siguientes puntos sirve como una base agredible:
Qué son las clases, interfaces, APIs, paquetes, módulos y bibliotecas.
Qué son las dependencias de los módulos y qué significa "gestión de dependencias".
Una complejidad de aplicaciones modernas. Incluso si realiza una aplicación simple "Hello, world" (sería una aplicación de escritorio o una aplicación web), debería incluir una docena (si no cien) de varias bibliotecas. Todas estas bibliotecas proporcionan infraestructura a su aplicación, pero muchas de ellas no están directamente relacionadas con su lógica.
Si su aplicación no es "Hola, mundo", ocultar su complejidad (mediante la modularización adecuada) y automatizar su ensamblaje y prueba (mediante el uso de herramientas de construcción adecuadas) se vuelve crucial para el éxito.
Con este entendimiento en mente (y teniendo en cuenta las preciosas consideraciones, enumeradas anteriormente por los estimados colegas), tiene sentido comenzar a hablar de Gradle, Ant, Hiedra y Maven.