¿Muchos modules pequeños o pocos modules grandes para get el mejor performance de compilation?

Hace unos años, cuando adopté gradle para Android (antes de Gradle 2.0), descubrí que había un gasto excesivo para usar y depender de un module, así que me he mantenido alejado de dividir mi proyecto en modules más pequeños, y en su lugar he creado modules muy grandes. Después de probar algunos otros sistemas de compilation (como Buck, por ejemplo), el performance se obtiene al dividir el código en varios modules pequeños. Algunos de los lenguajes de progtwigción modernos como Kotlin incluso tienen modificadores de visibilidad específicamente construidos alnetworkingedor del concepto de dividir su código en modules.

Actualmente estamos en Gradle 2.14.1 (casi 3.0), y en las últimas versiones, han citado incrementos de performance masivos. Con los cambios en el complemento de Gradle / Android en los últimos años, ¿ahora produce comstackciones más rápidas para dividir el código en modules más pequeños o para usar less modules grandes?

Tanto para Gradle como para Kotlin ha habido grandes avances recientes en el performance de compilation para una construcción general. Incluyendo bajar la sobrecarga de múltiples modules en una construcción.

Puede ver algunos ejemplos de estos aumentos en este artículo reciente: Velocidades de compilation Kotlin vs. Java

La sobrecarga entre múltiples modules se networkinguce mediante una combinación del paso de configuration de Gradle para que los modules tengan order de magnitudes más rápido y manteniendo más en memory para que no tenga que volver a cargarse en cada compilation y no comstackr cosas tan finas la comprobación de dependencia considera que no es necesario volver a comstackrla.

Aquí hay algunos consejos:

  • asegúrese de que el demonio Gradle esté habilitado (por defecto ahora, así que a less que lo haya apagado, todo está bien)
  • actualice a Kotlin 1.0.3 (y esté atento a la versión 1.0.4 próximamente)
  • habilitar la compilation incremental de Kotlin :

    Para habilitar la compilation incremental para Gradle, debe establecer la propiedad kotlin.incremental en verdadero (por ejemplo, agregando la línea kotlin.incremental = true al file gradle.properties en el directory raíz de su proyecto).

  • usa Android studio 2.1 o posterior y habilita DEX en process

    Android Studio 2.1 habilita una nueva característica: Dex In Process, que puede boost drásticamente la velocidad de construcciones de limpieza completa, así como mejorar el performance de ejecución instantánea.

  • asegúrese de que cualquier tarea que utilice sea compatible con la ejecución incremental en Gradle, otras no y puede ralentizar sus times de compilation (por ejemplo, las tareas de Dokka se ejecutan sin importar qué cambio haya), puede deshabilitar tareas que no necesita todo el time usando -x<task> parámetro a Gradle.

Ahora bien, si es más rápido para comstackciones de varios modules o comstackciones de un solo module, ahora veo que la sobrecarga de los modules que no han cambiado es insignificante. Y para aquellos que tienen, es el costo normal de compilation.

Tenga en count que la compilation incremental no siempre funciona entre comstackciones de Android en Gradle debido al complemento de Android para que Gradle cambie el order de las routes de class entre comstackciones . Aunque esto tiende a ser coherente entre comstackciones, existe la posibilidad de que si vuelve a calcular la ruta de class será un order diferente y cause una nueva compilation completa. Pero esto sería un problema ya sea que esté construyendo modules de forma individual o múltiple.

Las respuestas generales a su pregunta probablemente difieran radicalmente en los proyectos, el hardware, las diferentes configuraciones y las percepciones de las personas, e incluso el uso indebido y la configuration incorrecta de las construcciones. Dadas las mejoras mencionadas anteriormente, debe decidir tomarse el time para probar el estado actual de su proyecto real, ¡y compruébelo usted mismo!

  • ¿Cuál es el lugar en la jerarquía de types de types anulables?
  • Función Kotlin: Unidad requerida? Encontrado Int
  • ¿Es posible especificar una function estática en una interfaz de Kotlin?
  • ¿Cómo crear una instancia de Singleton solo una vez en mi aplicación y sus bibliotecas?
  • Propiedad de Kotlin: "El parámetro de tipo de una propiedad debe usarse en su tipo de receptor"
  • ¿Cómo diferenciar entre una reference de miembro llamable encuadernada y una function del mismo tipo en kotlin?
  • java.lang.NoClassDefFoundError $$ inlined $ forEach $ lambda $ 1 en Kotlin
  • Interoperabilidad Java: ¿cómo declarar una constante de matriz en time de compilation en Kotlin?
  • Mutadores de Kotlin
  • Llamar a una function en un fragment de un buscapersonas de la actividad
  • Proguard y Kotlin-Reflect / Kotlin Anotaciones