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

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.

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.

  • Cambiar a Gradle: ¿por qué tengo que mantener las vistas personalizadas de ser ofuscada?
  • Cómo detener ProGuard de eliminar la interfaz Serializable de una clase
  • ProGuard no compiló con Joda Time utilizado en Windows
  • La eliminación del registro con ProGuard no elimina las cadenas que se están registrando
  • Proyecto Android: Problema de exportación Lanzamiento cancelado! Proguard devuelto con el código de error 1. Consulte consola
  • Ofuscación Clases parcelables con proguard
  • ¿Cómo hacer que runProguard funcione para el plugin Gradle de android-library?
  • AppCompat V7 falla al usar shrinkResources
  • La exportación de Eclipse firmada APK falla con SDK 12 y LÍMITE DE COMPATIBILIDAD
  • Problemas con ProGuard para Android con Parse 1.3.5 jar
  • Problemas con ProGuard y AdMob
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.