¿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 hace reflexionar con la clase R en la aplicación android ya no funciona
- Android: configurar Proguard
- Proguard ignora el archivo de configuración de la biblioteca
- Howto in eclipse depura el archivo apk ofuscado por Proguard
- ¿Tiene Android SDK intencionalmente utilizar una versión antigua de ProGuard
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.
- Mantener los métodos Java llamados desde Android JNI
- Eliminar las clases no utilizadas con proguard para Android
- Proguard elimina el código no utilizado (en Android)
- Android-Studio-1.2.RC Advertencias de Proguard en la referencia de la biblioteca de Square Okio
- Google Analytics vuelve a consultar Proguard
- Las cadenas de card.io no cambian con proguard
- Generar firmado APK: Errores mientras se construye APK Android Studio
- Android: Errores de clase duplicados en proguard
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