Colección de citas famosas - Colección de firmas - Cómo entender a Gredel en términos sencillos

Cómo entender a Gredel en términos sencillos

De Zhihu:

¿Cómo entender Gradle de manera popular?

Solía ​​usar Eclipse con ADT para desarrollar proyectos de Android. No tenía un conocimiento profundo de sus principios básicos, así que comencé el desarrollo sin pensar demasiado. Ahora tengo un nuevo proyecto entre manos que utiliza Android Studio. He oído hablar de AS durante mucho tiempo, pero como soy un poco ignorante, no puedo entender Gradle en el proceso de aprendizaje de AS en estos días. He encontrado mucha información, pero toda está descrita profesionalmente, por lo que me gustaría preguntar si alguien tiene una explicación más vívida y fácil de entender para describir Gradle, qué es y para qué se utiliza. En comparación con el mecanismo de usar ADT para compilar programas de Android en Eclipse, lo tiene.

ghui?

Gracias por la invitación.

Gradle es una herramienta de creación automática de proyectos basada en los conceptos de Apache Ant y Apache Maven. Utiliza un lenguaje específico de dominio basado en Groovy para declarar la configuración del proyecto en lugar del XML tradicional. Actualmente, los lenguajes admitidos se limitan a Java, Groovy y Scala, con planes de admitir más lenguajes en el futuro.

Lo anterior es la explicación de Gradle en Wikipedia. Creo que una persona que no ha estado expuesta a la construcción no puede entenderla. Yo también, esta es mi comprensión popular de Grad:

El desarrollo de software se centra en la reutilización de código, lo que puede hacer que los proyectos sean más fáciles de mantener y tengan menos código... Los desarrolladores pueden usar herencia, combinación, módulos funcionales, etc. Formas de lograr distintos grados de reutilización de código. Pero no sé si alguna vez lo has pensado. El desarrollo de software también es una operación de ingeniería. No se trata solo de escribir código, sino que también implica diversas gestiones del proyecto (dependencia, empaquetado, implementación, lanzamiento y gestión diferenciada de varios). canales... .).

Por ejemplo

Soy un desarrollador de Android. ¿Sabía que hay n mercados de Android, n marcas de teléfonos móviles y n tamaños de teléfonos móviles en China? Generalmente, las empresas emitirán contratos separados para diferentes mercados para contar las descargas de diferentes canales. Es posible que se requiera algún procesamiento especial para diferentes teléfonos móviles. (Información del hardware como marca, tamaño, etc.). En este punto, puedes configurar un proyecto separado para diferentes situaciones, o mejor aún, puedes controlarlo con algunas variables, como esta.

si(es moto){hacer algo} else si(es Huawei){hacer algo}....

Gestión de diferencias

Pero estas dos Cada solución Tiene sus propias deficiencias, especialmente el primero, que tiene mucha duplicación de código. Este último es un poco mejor, pero la diferencia en este método es el tiempo de ejecución, no la estática. La lógica de procesamiento en los teléfonos Moto no tiene ningún impacto en los teléfonos Huawei, pero esta lógica de procesamiento para teléfonos Moto también se ha instalado en los teléfonos Huawei. El control de la diferencia de nivel estático se puede lograr mediante productFlavor y buildtype de Gradle. Puede consultar cómo implementar un conjunto de códigos a través de gradle para desarrollar APK Byghui con diferentes características.

Hablando del problema multicanal mencionado anteriormente, diferentes canales generalmente corresponden a diferentes números de canal. Por supuesto, puede modificar un paquete a la vez para generar su paquete multicanal, pero se dice que la aplicación de Android de un sitio web de compras grupales nacionales tiene más de 100 canales. ¿Qué está pasando aquí? El empaque repetido es muy diferente al empaque anterior (solo el número de canal es diferente). Al igual que escribir código, deberíamos reutilizarlos. Un comando puede imprimir todos los paquetes de canales y un comando puede imprimir paquetes de canales específicos. Para complicar más las cosas, es posible que necesite diferentes canales correspondientes a diferentes archivos de firma, diferentes íconos y diferentes direcciones de servidor... Esto se puede lograr fácilmente a través de Gradle.

Gestión de dependencias:

Es posible que necesites depender de varios archivos jar y bibliotecas para el desarrollo de software. Por supuesto, puedes descargar proyectos jar y biblioteca localmente y copiarlos a tu proyecto, pero no sé si has oído hablar de algo llamado almacén central en el extranjero.

En este repositorio puedes encontrar todos los frascos, AAR... ¿Se te ocurre algún motor de búsqueda del repositorio central del que no hayas oído hablar? Aquí puede encontrar todas las dependencias que necesita, todo lo que necesita es especificar una coordenada como esta:

& ltimg src = "/8883 D4 b 758 b 288 a 74 eb4c 104 db 854 c5f_b .jpg " ancho de datos sin formato = " 330 " alto de datos sin formato = " 24 " clase = " content_image " ancho = " 330 " > Medio. No necesita preocuparse por buscar, descargar y agregar el resto de las dependencias al classpath. Los beneficios de mantener dependencias de esta manera son los siguientes:

No necesita preocuparse por buscar, descargar y agregar el resto de las dependencias al classpath. Los beneficios de mantener las dependencias de esta manera son los siguientes:

Las dependencias no irán a su repositorio de control de versiones (se almacenarán en caché en ~/). gradle/predeterminado).

Es muy conveniente descargar y cargar dependencias (es solo una dependencia de coordenadas, no es necesario eliminarla).

Gestión de versiones cómoda. Como se muestra en la imagen de arriba, 2.3.3 es el número de versión de Picasso. Si se cambia a +, significa descargar la última versión del almacén central.

No habrá copias duplicadas de la misma dependencia en diferentes proyectos (solo existe una copia en ~/). Gradle).

Implementación del proyecto

No sé mucho sobre esto, pero hasta donde yo sé, a través de algunos complementos, puedes cargar automáticamente tu salida (jar, apk, war ... ) al almacén designado para su despliegue automático. ...

Li Luo ha dicho tantas cosas que no sé si lo entiendes o no.

En resumen:

Gradle es una herramienta de compilación que puede ayudarte a gestionar diferencias, dependencias, compilación, empaquetado e implementación.... ................................................. ................ .................................... ................................. .................... ...........

Gradle no es un lenguaje de programación, no puede ayudarle a implementar ninguna función práctica en el software.

Las explicaciones populares ciertamente no son rigurosas y las discusiones son bienvenidas si son inapropiadas.

###

Estoy de acuerdo con el punto de vista de Bai Bai y muestro las diapositivas que compartí antes.

###

Hasta ahora (1432311622353)* *Se han recibido 342 aprobaciones y agradecimientos. ¡Gracias de nuevo por su apoyo! Si crees que lo que comparto te resulta útil, ¡sígueme! Compartiré más y mejor contenido contigo en el futuro.

Las diapositivas acordadas están aquí.

(Es una diapositiva que compartí internamente cuando estaba en LeTV. El contenido ha sido eliminado (la parte que involucra los proyectos específicos de la empresa). Esta diapositiva hace referencia a muchos otros materiales, y los enlaces internos son vale la pena abrirlo.)

Editado el 2017-02-27 ¿53 comentarios? ¿Gracias?

Fracasado

Dijiste que necesitas entenderlo de una manera sencilla y no necesitas aprender ninguna teoría. Simplemente siga el entendimiento popular.

En términos sencillos: gradle se utiliza para embalaje.

¿Crees que tu problema se ha solucionado? Si no funciona es porque hiciste mal la pregunta. Por ejemplo, supongo que deberías preguntar: por qué empaquetar y lanzar, cuántos métodos comunes existen para empaquetar y lanzar, por qué elegir gradle entre estos métodos comunes, etc.

Según mi suposición, el dicho popular es este:

Tome el uso de eclipse para escribir programas Java como ejemplo.

Por qué es necesario el empaquetado:

Cuando termine de escribir, haga clic derecho en ejecutar. Pero después de todo, el programa debe publicarse en el servidor o ser utilizado por otros. Una es que todos los que quieran ejecutarlo no pueden instalar eclipse y la otra es que el código fuente no se puede publicar para todos.

Por lo tanto, necesita publicar su código en formato binario para que otros entornos puedan ejecutarlo. Este es el embalaje.

¿Por qué hormigas?

Hay muchas cosas que hacer al empaquetar, como el nombre de usuario y la contraseña en el archivo de configuración. Su desarrollo local y la ejecución real del programa son definitivamente inconsistentes, por lo que necesita tener dos archivos, uno para el desarrollo y otro para la ejecución real. De esta manera, tendrás que hacer estas cosas repetidamente cada vez que empaques. Ant te permite escribir estas cosas en scripts en formato xml y luego ejecutarlos automáticamente.

¿Por qué maven?

Tu proyecto requiere muchos paquetes jar. Por ejemplo, deberías usar log4j para registros y un conector para bases de datos. Estos días me da vergüenza salir sin escribir programas usando Spring. Abra el paquete de primavera descargado, hay docenas de frascos y no sé cuál es mejor usar y cuál no. Además, incluso si coloca todos estos paquetes jar, es muy probable que no se ejecute porque depende de otros paquetes jar. Si algún día desea actualizar una versión pequeña de Spring, todos los paquetes jar se duplicarán y no podrá recordar qué paquetes jar se importaron de Spring.

Entonces, con maven, todo lo que tienes que hacer es configurar, digamos que quiero usar Spring 3, todos los paquetes jar se descargan y puedes simplemente ejecutarlo. Si desea actualizar la versión, simplemente cambie 3 a 4 y se descargará el nuevo paquete jar.

¿Y luego qué?

Usar Maven y empaquetar en frascos es conveniente, pero todavía quedan muchas cosas por hacer cuando empaqueto, y luego descubrirá que Maven realmente no sabe cómo hacer estas cosas, por lo que comienza a perderse. hormiga.

Gradle puede trabajar tanto con maven como con ant. Utiliza un lenguaje groove para escribir guiones y tiene una mayor capacidad expresiva.

Eso es lo que quiero decir.

===

Solo he visto a Greer durante dos días y no sé mucho sobre él. La versión simplificada es la siguiente:

Ant puede empaquetar lógica automáticamente.

Maven también puede empaquetar automáticamente. Hace más para ayudarle a descargar paquetes jar que ant.

Sin embargo, la lógica de empaquetado de Maven es demasiado rígida, la personalización es demasiado problemática y no es tan fácil de usar como ant. Gradle es una herramienta que puede descargar automáticamente paquetes jar y escribir scripts usted mismo, y los scripts son más fáciles de escribir que ant.