Mucha gente parece recomendar -keep class com.myapp.customcomponents.** { *; }
como una forma de excluir una ruta de ser procesada. Mira aquí:
- excluir paquetes de proguard
- Hacer que Proguard ignore completamente el paquete
- Evitar que un directorio se ofusque proguard
El problema con esta solución es que todavía hay cierto nivel de ofuscación, lo que puede romper su código. Puede ver el mapeo en la impresión del mapeo:
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
La solución por la que he optado es un proceso de dos pasos. Primero, utilícelo injars
con un filtro para seleccionar la ruta del paquete que me gustaría procesar. Es posible agregar los otros parches de paquetes como bibliotecas.
-injars artifacts/in.jar(org/toprocess/**.class)
-outjars out/processed.jar
-libraryjars artifacts/in.jar(org/skipped/**.class)
-libraryjars artifacts/in.jar(org/moreskipped/**.class)
En segundo lugar, combine el frasco procesado con el frasco original, pero solo las rutas que se omitieron.
-injars out/processed.jar
-injars artifacts/in.jar(org/skipped/**.class)
-injars artifacts/in.jar(org/moreskipped/**.class)
-outjars out/merged.jar
-dontshrink
-dontoptimize
-dontobfuscate
El resultado es un contenedor combinado que es la combinación de la ruta del paquete procesado y las rutas omitidas. Este ejercicio no es válido si alguien puede proporcionar una manera de omitir el procesamiento de ciertas rutas por completo (que no he encontrado).