¿Cómo puedo decir a proguard para asumir un paquete no se utiliza?
Estoy intentando configurar proguard para mi proyecto de Android. Utilizamos algunas piezas de una biblioteca neto en nuestro código y me gustaría usar Proguard para eliminar completamente los fragmentos de código que sé que no se utilizan.
¿Hay alguna manera de decir proguard para asumir un paquete (o clase) nunca se utiliza y por lo tanto no debe ser incluido en la salida JARs? Tenga en cuenta que no estoy hablando de excluir un código de ofuscación (que es lo que -keep
opciones de configuración -keep
), estoy hablando de eliminar completamente una clase de la salida.
- ProGuard falla después de actualizar Google Play Services a la versión 5.0 (revisión 18)
- Proguard Error / Dalvik Error 1 al firmar la aplicación para Android
- Uso de Spongycastle con Proguard
- Crash ORMLite en Android con proguard
- Uso de Proguard para eliminar clases no utilizadas en la biblioteca de Servicios de Google Play
Editar : Como sugerido por pst a continuación, he intentado utilizar el argumento -whyareyoukeeping
para determinar la ruta de código que proguard utiliza para determinar una clase se utiliza. No cambia la salida de decenas de advertencias.
También intenté utilizar un filtro de archivo en -outjars
como sugerido por pst. Esto también resultó en ningún cambio ya que el algoritmo sigue suponiendo que la clase se cargará y el filtro sólo se aplica después de que las clases "usadas" se determinan incorrectamente.
Para ser claro: las advertencias vienen de clases en bibliotecas de terceros que estamos incluyendo en nuestro proyecto de Android. No ejecutamos ningún código que cargue estas clases, y si proguard encuentra una ruta de código donde suponga que estas clases están cargadas, quisiera decir explícitamente que no usa esas clases.
- Eliminar localizaciones no utilizadas de APK
- Proguard: no se puede encontrar la clase referenciada
- Definición de Android Proguard Duplicate
- Firmado Exported Android App fallando con apache.commons.logging clase no se puede convertir en 'aaaac'
- Proguard y error
- Proguard devolvió error con la biblioteca de Servicios de Google Play
- Android Studio - ProGuard IOException Duplicate Zip Entry
- Dagger no puede crear el gráfico del objeto aunque puede producir el archivo del punto
Una alternativa a la especificación de un filtro en los outjars podría ser especificar un filtro en los injars:
-injars in.jar(!unwanted/package/**)
De esta manera, no arrastrará innecesariamente en ninguna clase a la que haga referencia este paquete, ya que el filtrado está ocurriendo antes de cualquier procesamiento.
ProGuard ahora advertirá sobre las clases que faltan, así que tienes que especificar que está bien:
-dontwarn unwanted.package.**
Debe tener cuidado con estas opciones, ya que suprimir las advertencias no necesariamente hace que los problemas desaparezcan. Como pst escribió, obtendrá NoClassDefFoundsErrors si filtra las clases que realmente son necesarias.
- ¿Por qué el registro de las actualizaciones de ubicación activa los contactos para actualizar?
- No se puede cambiar la etiqueta del fragmento