Muitas pessoas parecem recomendar -keep class com.myapp.customcomponents.** { *; }
uma forma de impedir que um caminho seja processado. Veja aqui:
- excluir pacotes do proguard
- Faça o Proguard ignorar completamente o pacote
- Impedir que um diretório seja ofuscado por proguard
O problema com essa solução é que ainda há algum nível de ofuscação acontecendo, o que pode quebrar seu código. Você pode ver o mapeamento na impressão do mapeamento:
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
A solução que optei é um processo de duas etapas. Primeiro, use injars
com um filtro para selecionar o caminho do pacote que gostaria de processar. É possível adicionar outros caminhos de pacote 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)
Em segundo lugar, mescle o jar processado com o jar original, mas apenas os caminhos que foram ignorados.
-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
O resultado é um jar mesclado que é a combinação do caminho do pacote processado e dos caminhos ignorados. Este exercício é inválido se alguém puder fornecer uma maneira de pular completamente o processamento de certos caminhos (que eu não encontrei).