En un artículo reciente, Facebook ha descrito su novedosa técnica para la compresión de aplicaciones de Android, Superpack, que combina el análisis del compilador con la compresión de datos. Si bien aún no está disponible para todos, Facebook espera abrirlo.
Según los ingenieros de Facebook, Superpack ha podido reducir el tamaño de sus aplicaciones de Android en más de un 20 por ciento con respecto a la compresión Zip predeterminada de Android APK durante los últimos dos años.
El enfoque subyacente a Superpack se basa en una idea de la medida algorítmica de complejidad de Kolmogorov , que define el contenido de información de un dato como la longitud del programa más corto que puede generar esos datos.
Por ejemplo, un programa que genera una secuencia de Fibonacci puede verse como una representación comprimida de una lista de números de Fibonacci. Reducir la complejidad de Kolmogorov no es un nuevo enfoque para la compresión de datos, dice Facebook, pero lo que distingue a Superpack es que combina métodos de compilación con técnicas de compresión modernas.
La compresión Superpack aprovecha las técnicas comunes de compilación, como el análisis sintáctico y la generación de código, así como las innovaciones más recientes, como los solucionadores de teorías de módulo de satisfacción (SMT) para encontrar los programas más pequeños.
El compilador aporta conocimiento semántico sobre el programa que se utiliza para mejorar de forma eficaz el paso de compresión, tanto ayudando a eliminar la redundancia como optimizando la representación de piezas frecuentes de información, es decir, reduciendo la codificación de entropía.
Este enfoque se utiliza para comprimir código ejecutable. Para los datos que no son de código, Superpack intentará transformarlos en programas que se pueden ejecutar en el momento de la descompresión para generar los datos originales.
Un ejemplo de esta técnica es la compresión de referencias Dex, que son etiquetas para valores conocidos en el código Dex. Las referencias dex tienen un alto grado de localidad. Para explotar esta localidad, transformamos las referencias en un lenguaje que almacena los valores recientes en un registro lógico y emite los valores futuros como deltas de los valores que se fijaron.
Una limitación de Superpack, dice Facebook, proviene de la falta de integración con las herramientas utilizadas para crear y distribuir actualizaciones de Android. De hecho, las actualizaciones de las aplicaciones comprimidas con Superpack terminan siendo más grandes que las actualizaciones de las aplicaciones comprimidas con Zip, básicamente debido al hecho de que las actualizaciones de las aplicaciones se distribuyen como archivos comprimidos, lo que requiere la capacidad de descomprimir el contenido de una aplicación, calcular su delta y luego comprímelo de nuevo.
Creemos que los problemas de este tipo podrían abordarse mediante interfaces más detalladas entre Superpack y las herramientas de Android, una mayor personalización en los mecanismos de distribución de Android y una documentación pública del formato de archivo y los métodos de compresión de Superpack.
Como se mencionó, Superpack no está disponible fuera de Facebook. Pero su enfoque también es replicable en otras plataformas, incluido iOS y otros. El propio Facebook está trabajando en esos puertos, con el objetivo de que esté disponible de manera más amplia.