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?
- Clase de Kotlin NoClassDefFoundError falla
- Kotlin - lateinit VS ¿Alguna? = Nulo
- ArrayAdapter utiliza Kotlin android
- Cómo setOnEditorActionListener con Kotlin
- Asociar la certificación para desarrolladores de android
- NoSuchMethodError: java.lang.Long.hashCode
- Kotlin lateinit propiedades, NPE peligro?
- Sala de pruebas de unidad y LiveData
- Kotlin en android: No se puede encontrar el manifiesto fusionado principal. ¿Qué está causando este error?
- Kotlin uso perezoso
- ¿Deberían los archivos de Kotlin ser puestos en un directorio de fuentes separado en Android?
- La propiedad lateinit no se ha inicializado
- Controles de pelusa de Kotlin y android
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!
- ¿Cómo heredar el atributo de estilo de Android?
- OnStop () no se llama cuando presiono el botón de retroceso