Jack and Jill es la nueva herramienta de compilación, la cual viene en la reciente entrega del SDK de Android 21.1, pero hasta ahora Google ha decidido explicarnos qué hace y qué es exactamente. Jack es el Java Android Compiler Kit (a los norteamericanos les encantan los acrónimos) y Jill es Jack Intermediate Library Linker. Al momento de escribir esto son aún “experimentales”.
La idea es simple: Jack compila el código java directamente a .dex, un ejecutable en la máquina virtual Dalvik. El proceso de compilación toma el código fuente y usa el compilador de java estándar, javac, para convertir primero a bytecode de Java y la salida de éste pasa por el compilar dex para convertirlo en bytecode de Dalvik.
El nuevo compilador Jack hace este trabajo sin usar bytecode de Java. Aplica además alguna optimización y lo ofusca a través e Proguard. Este es un proceso simple de un solo paso y Google espera que tenga más ventajas en el futuro, con características como compilación incremental, por ejemplo. Uno podría entonces decir que al final de cuentas Android tiene su propio compilador.
Nótese que el código .dex resultante se puede alimentar al motor de Dalvik o al novísimo ART – Android Runtime engine, el cual usa compilación “Ahead of time”, lo cual es lo que siempre llamamos “compilación”, que es el convertir el código .dex a código nativo en tiempo de instalación del programa. Esto puede ser mucho más rápido así.
Jill por su parte protege a Jack de tener que ver y procesar bytecode de Java. Si se tiene una biblioteca en Java, Jill converrtirá la biblioteca .jar en una biblioteca .jack, con un formato que el propio Jack puede subir con el resto del código objeto.
Por el momento el usuario debe habilitar el soporte para Jack y Jill si se quiere usarlo. Esto significa añadir “useJack=true” para construir el archivo gradle. Hay más detalles al respecto en el sitio de desarrollo de Android.
Muchos se preguntan a cuenta de qué Google se está moviendo a Jack y Jill. La respuesta podría ser la de buscar tene run compilador optimizado que incluso pueda hacer, como hemos dicho, compilación incremental. Otra razón sería moverse de Dalvik y de la infraestructura de Java para hacer que las demandas de Oracle dejen de tener cabida y desde luego, dejen de ser un problema. El no usar javac y Dalvik bien podrían poner distancia entre la tecnología de Android las demandas de Java.
Sin embargo, Jack y Jill no soportan <java 8 y cualquier actualización tendría que ser hecha e implementada por Google. Cuando Android era nuevo, ser compatible con Java y su infraestructura era lo que se buscaba. Hoy en día parece ser que la tendencia es precisamente deshacerse de Java..
Referencias