¿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.
- TransformClassesAndResourcesWithProguardForRelease FALLA
- Cómo decir Proguard para ofuscar nombres de clase
- El uso de ProGuard causa NoSuchFieldError para ACRA
- Proguard-project.txt no se encuentra en android studio
- Configuración de Android ProGuard para Facebook
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 usar -dontwarn en ProGuard?
- Error de android.support.v8.renderscript en ProGuard
- Error al usar proguard con Android Facebook sdk 3.0
- Eliminar los activos no utilizados de la biblioteca de terceros
- Excepción sobre la serialización de array usando proguard android
- Error Proguard Número de versión de clase no admitido
- Android Studio excluye clase o archivo de jar
- Eliminar todas las llamadas de registro de depuración antes de publicar: ¿hay herramientas para hacer esto?
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