¿Se recomienda la combinación de clases con ProGuard en Android / Dalvik?
Se me ocurrió que una de las optimizaciones de código de ProGuard que usamos, es decir, la fusión de jerarquías de clases, tal vez no sea una buena opción en absoluto.
Mi intuición era que sería beneficioso combinar clases para reducir las invocaciones del ClassLoader, que al menos en una JVM es una operación particularmente lenta, y en nuestro código optamos por muchas clases más pequeñas (a menudo internas) en lugar de Grandes clases de objetos de Dios, por lo que el ClassLoader se ejecutará con relativa frecuencia.
- Firmado Exported Android App fallando con apache.commons.logging clase no se puede convertir en 'aaaac'
- Error: Error de ejecución para la tarea ': app: transformClassesAndResourcesWithProguardForDebug'
- Proguard Parse Error de excepción. Cómo resolverlo
- Android Proguard java.io.IOException: No se puede leer [proguard.ClassPathEntry
- Constructor no coincidente para la clase {proguard]
Sin embargo, dado el caso extremo (probablemente improbable) de que todas las clases se fusionarían en una sola, entonces aunque el cargador sólo se invocara una vez, terminaríamos cargando toneladas de código en memoria que muy probablemente nunca se usarán ( 80/20 regla se aplica aquí, así supongo).
Eso me deja pensando:
1) ¿Qué tan rápido es la clase de carga en Dalvik en realidad? ¿Es una operación que vale la pena reducir mediante el uso de la fusión de clase en absoluto?
2) Dicho esto, ¿recomendaría usar la fusión de clase en todo en Android?
- Cómo especificar lesiones para proguard dentro de android gradle archivos de compilación para las bibliotecas que se extraen de maven central
- Mover a construir herramientas 1.3.0 rompió nuestra construcción con proguard habilitado
- ¿Cómo encripta DexGuard las clases?
- Proguard con Autovalue
- Android: Proguard no compiló con el archivo jar de Joda Time
- ¿Proguard.cfg es necesario para proyectos de biblioteca?
- ¿Cómo configurar proguard para la aplicación de Android con Google Drive SDK?
- Android, Scala y Proguard
La combinación vertical de clases reduce las clases / interfaces con sus extensiones / implementaciones cuando éstas se dividen innecesariamente. Eso siempre debe ser una mejora (tamaño y rendimiento).
Para la fusión de clase horizontal, no puedo proporcionar una respuesta general. La base de código será más pequeña, pero algún código podría concebiblemente ser cargado pronto, o en el extremo, innecesariamente.
- Creación de una instancia de una interfaz propia en Android
- Android MP4 stream – El video no se puede reproducir