tutorial studio minifyenabled features android proguard obfuscation

android - studio - proguard tutorial



advertencia de progreso: la configuraciĆ³n mantiene el punto de entrada... pero no la clase descriptora (4)

De los docuemnts :

allowhrinking Especifica que los puntos de entrada especificados en la opción -keep pueden reducirse, incluso si deben conservarse de otra manera. Es decir, los puntos de entrada pueden eliminarse en el paso de reducción, pero si son necesarios después de todo, pueden no estar optimizados u ofuscados.

Así que parece que necesitas eliminar el modificador de allowshrinking .

He configurado:

-keep ,allowoptimization,allowobfuscation,allowshrinking public class org.jf.dexlib2.dexbacked.** { *; }

pero sigue recibiendo la advertencia:

Note: the configuration keeps the entry point ''com.trusteer.trf.dex_parser { int get_strings_count(org.jf.dexlib2.dexbacked.DexBackedDexFile); }'', but not the descriptor class ''org.jf.dexlib2.dexbacked.DexBackedDexFile''

Estoy usando la versión 4.7 de proguard (en Android SDK)

¿Qué tengo que hacer?


Hice algunas excavaciones en los docs . No ha suministrado todo el archivo de configuración, pero supongo que ese com.trusteer.trf.dex_parser está configurado para mantener y no para ofuscar.

Esto significa que hay una referencia de com.trusteer.trf.dex_parser a una clase llamada org.jf.dexlib2.dexbacked.DexBackedDexFile que se ha reducido o ofuscado. Esto significa que el enlace ahora está roto, dex_parser no puede importar DexBackedDexFile .

Por lo tanto, deshabilite la reducción y la ofuscación para DexBackedDexFile , o permita la optimización y la ofuscación en dex_parser .


Nota: la configuración mantiene el punto de entrada ''...'', pero no la clase del descriptor ''...'' Su configuración contiene una opción de mantenimiento para conservar el método (o campo) dado, pero la opción de no mantenimiento para la clase dada es un tipo de argumento o tipo de retorno en el descriptor del método. Es posible que desee mantener la clase también. De lo contrario, ProGuard ocultará su nombre, cambiando así la firma del método. El método podría convertirse en un elemento de cotejo no válido, por ejemplo, si forma parte de una API pública. Puede mantener automáticamente dichas clases de descriptores con el modificador de opción -keep incluidoescriptorclasses (-keep, includedescriptorclasses ...). Puede desactivar estas notas especificando la opción -dontnote.


Usted le ha dicho a Proguard que mantenga un cierto método void foo(Bar bar); pero para ofuscar la clase descriptor Bar .

Esto es solo un problema si va a invocar el método desde una fuente externa, ya que la ofuscación cambiará la firma (si usa Proguard para ofuscar una biblioteca y luego usa esa biblioteca en otra aplicación).

Así que ten las siguientes opciones:

  • Configurar Proguard para mantener también la Bar .

  • Use la directiva -dontnote para decirle a Proguard que no imprima notas como esta.