Básicamente, eso es lo que Google está haciendo ahora con la cadena de herramientas Jack y Jill que están creando para reemplazar la cadena de herramientas Javac que es la predeterminada al convertir el código fuente de Java al código de bytes Dalvik.
Jack es una abreviatura de Java Android Compiler Kit. Jack es un compilador que toma el código fuente de Java y lo compila directamente en el formato de archivo Dex para Android. Mirando el código fuente, en realidad compila el código fuente de Java directamente a lo que se llama “Jack IR”, que luego se alimenta a través de una representación AST (Árbol de sintaxis abstracta) del Jack IR y luego genera una forma de código de bytes Dalvik.
Tiene razón sobre el proceso actual del compilador JAVAC que al tener dos pasos en el proceso de convertir la fuente Java, se pierde MUCHA información sobre el programa. Lo que eso significa es que las optimizaciones progresivas para el IR no son tan eficientes porque en Javac va desde:
- ¿Dónde se descarga la aplicación de Android de forma permanente?
- Cómo agregar un efecto de desenfoque a una imagen en el desarrollo de Android
- ¿Cuál es el costo del desarrollo de aplicaciones de Android para restaurantes en India?
- ¿Qué es un servicio de intención en Android?
- Cómo entender el significado de extender e implementar en el desarrollo de Java / Android
Código fuente Java ——> Java Bytecode ——-> (Herramienta Dex) —— Dalvik Bytecode.
Al eliminar por completo el paso Java Bytecode y la herramienta Dex utilizada para convertir el bytecode de Java a dalvik bytecode, tiene un lenguaje fuente completamente representado (en este caso, Java) dentro del “Jack IR” que luego puede optimizarse progresivamente mediante la aplicación (Tres transformaciones de código de dirección), y tal. En términos simples, el código de bytes de Dalvik que es generado por Jack es mucho más eficiente y rápido que lo que actualmente hace el compilador estándar de Oraclec Javac.
Entonces viene Jill! Jill representa el enlazador de biblioteca intermedio Jack. Básicamente, Jill tiene dos cosas MUY importantes que tiene. Primero, compila los archivos de recursos utilizados en su código fuente en su propio archivo de biblioteca .jack.
Jayce es un HIR que significa un código de representación intermedia alta. Es la parte de alto nivel del “Jack IR”. Una vez que los archivos de clase de bytecode de Java se convierten de archivos JAR, se transforman en formato JAYCE que luego se alimenta al compilador Jack y luego se reduce a tres códigos de dirección, luego a dalvik bytecode.
PD: Tuve que volver a editar mi publicación de hace un año porque contenía más especulaciones que hechos en el momento actual. La información anterior ahora se basa en lo que hace actualmente Jack.
Además, al contrario de lo que la mayoría de la gente dice actualmente, Jack hace optimizaciones, pero lo hace en la representación del código de tres direcciones del Jack IR y NO usa proguard para las optimizaciones. Solo usa proguard para reducir y ofuscar una aplicación.
Las optimizaciones que realiza Jack se enmarcan en lo que se llama “optimizaciones de mirilla”, que son básicamente optimizaciones que reemplazan pequeños fragmentos de código Java por otros más eficientes durante el tiempo de compilación. Vea a continuación las optimizaciones que hace Jack.
Actualmente, Jack produce código que es entre un 8 y un 9% más rápido que lo que el compilador Javac produce a partir de diciembre de 2015. También tenga en cuenta que las cifras se tomaron de la combinación de Jack con el compilador optimizador ART, cuyo rendimiento es acumulativo. Probablemente sea más bajo para el compilador rápido de androides en versiones anteriores de ART y dalvik.
Aquí están mis referencias:
Nueva cadena de herramientas Android experimental – Jack and Jill – Sitio de proyecto de herramientas de Android
Optimizaciones que Jack realiza en Jack IR … https: //android.googlesource.com….
Instantánea de rendimiento de Jack a diciembre de 2015
https://www.slideshare.net/mobil…