Muchos módulos pequeños, o pocos módulos grandes para el mejor rendimiento de la construcción?

Hace unos años, al adoptar gradle para Android (antes de Gradle 2.0), descubrí que había algo de gastos generales para usar y dependiendo de un módulo, así que me he mantenido alejado de dividir mi proyecto en módulos más pequeños, Módulos muy grandes. Después de probar algunos otros sistemas de compilación (como Buck por ejemplo), el rendimiento se obtiene dividiendo su código en varios módulos pequeños. Algunos de los lenguajes de programación modernos como Kotlin incluso tienen modificadores de visibilidad específicamente construidos alrededor del concepto de dividir su código en módulos.

Actualmente estamos en Gradle 2.14.1 (casi 3.0), y para los últimos lanzamientos, han citado enormes ganancias de rendimiento. Con los cambios a Gradle / el complemento Android en los últimos años, ¿ahora produce compilaciones más rápidas para dividir su código en módulos más pequeños o para utilizar menos módulos grandes?

Tanto para Gradle como para Kotlin ha habido grandes ganancias recientes en el rendimiento de la compilación para una compilación general. Incluyendo la reducción de la sobrecarga de varios módulos en una compilación.

Puedes ver algunos ejemplos de estos aumentos en este reciente artículo: Kotlin vs. Java Compilation Speeds

La sobrecarga entre varios módulos se reduce mediante una combinación del paso de configuración de Gradle para que los módulos sean de orden de magnitud más rápido y manteniendo más memoria para que no tenga que volver a cargarse en cada compilación y no compilar cosas de granulación fina La comprobación de la dependencia considera no necesitar ser recompilada.

Estos son algunos consejos:

  • Asegúrese de que el daemon Gradle esté habilitado (es por defecto ahora, así que a menos que lo apague, todo bien)
  • Actualice a Kotlin 1.0.3 (y mantenga un ojo hacia fuera para la versión 1.0.4 pronto)
  • Habilitar la compilación incremental de Kotlin :

    Para habilitar la compilación incremental para Gradle, debe establecer la propiedad kotlin.incremental en true (por ejemplo, agregando la línea kotlin.incremental = true al archivo gradle.properties en el directorio raíz de su proyecto).

  • Utilice Android studio 2.1 o posterior y habilite DEX en proceso

    Android Studio 2.1 permite una nueva característica: Dex In Process, que puede aumentar drásticamente la velocidad de las compilaciones completas limpias, así como mejorar el rendimiento de ejecución instantánea.

  • Asegúrese de que las tareas que utilice soportan la ejecución incremental en Gradle, otras no y pueden ralentizar los tiempos de compilación (por ejemplo, la tarea de Dokka se ejecuta sin importar lo que haya cambiado), puede deshabilitar tareas que no necesita todo el tiempo utilizando -x<task> parámetro -x<task> a Gradle.

Ahora bien, si es más rápido para las compilaciones de varios módulos o las creaciones de módulos individuales, ahora veo que la sobrecarga de los módulos que no han cambiado es insignificante. Y para los que tienen, es el costo normal de la compilación.

Tenga en cuenta que la compilación incremental no siempre funciona entre las versiones de Android en Gradle debido al complemento de Android para Gradle que cambia el orden de classpath entre las compilaciones . Aunque esto tiende a ser consistente entre las compilaciones hay una posibilidad de que si recalcula el classpath será un orden diferente y causará una nueva compilación completa. Pero esto sería un problema si usted es edificio de módulo único o múltiple.

Respuestas generales a su pregunta probablemente difieren radicalmente entre proyectos, hardware, configuraciones diferentes, y las percepciones de las personas e incluso mal uso y configuración errónea de las compilaciones. Dadas las mejoras mencionadas anteriormente usted tiene que decidir tomar el tiempo para probar el estado actual de su proyecto real – y ver por ti mismo!

  • Kotlin palabra clave en línea que causa IntelliJ IDEA Reporte de cobertura 0%
  • ¿Cuáles son las clases comunes de la plataforma en Kotlin?
  • Error al ejecutar el proyecto de Android (escrito en Kotlin) compilado con el complemento Gradle2.0.0-alpha
  • Problemas al intentar generar aplicaciones de Kotlin con Android Studio
  • Kotlin - equivalencia a la combinación de Swift de "if let + cast"
  • Uso de Kotlin en un módulo de biblioteca sin utilizarlo en el módulo de aplicaciones
  • La aplicación se bloquea en la pila posterior del edificio
  • Convierta GsonBuilder en Kotlin
  • La propiedad debe ser inicializada o ser abstracta
  • ¿Cuál es la diferencia básica entre doblar y reducir en Kotlin? ¿Cuándo usar qué?
  • ¿Tiene Kotlin personalizado obtener la llamada al método de ejecución
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.