¿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.

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?

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.

  • Cómo configurar Proguard para mantener los métodos estáticos con diferentes tiempos de retorno
  • Proguard obfusca nombres de actividad en un manifiesto de biblioteca fusionada
  • RestTemplate, Jackson y proguard
  • Android: ¿Cuáles son las configuraciones recomendadas para Proguard?
  • Error: Error de ejecución para la tarea ': app: transformClassesAndResourcesWithProguardForRelease
  • transformClassesAndResourcesWithProguardForRelease 'en Android
  • No se puede obtener jar biblioteca para trabajar con Android y Proguard
  • ¿Por qué ProGuard mantiene el método onCreate ()?
  • Proguard ParseException: "Esperando que la palabra clave 'allowhrinting', 'allowoptimization' o 'allowobfuscation' antes de 'includedescriptorclasses'" on -Keep
  • proguard no mantener clase anónima
  • Uso de Proguard para eliminar clases no utilizadas en la biblioteca de Servicios de Google Play
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.