Viele Leute scheinen zu empfehlen -keep class com.myapp.customcomponents.** { *; }
, einen Pfad von der Verarbeitung auszuschließen. Siehe hier:
- Pakete von Proguard ausschließen
- Lassen Sie Proguard das Paket vollständig ignorieren
- Verhindern Sie die Verschleierung eines Verzeichnisses
Das Problem bei dieser Lösung ist, dass immer noch ein gewisses Maß an Verschleierung auftritt, das Ihren Code beschädigen kann. Sie können das Mapping im Mapping-Ausdruck sehen:
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
Die Lösung, für die ich mich entschieden habe, ist ein zweistufiger Prozess. Verwenden Sie zunächst injars
einen Filter, um den Paketpfad auszuwählen, den ich verarbeiten möchte. Es ist möglich, die anderen Paketpfade als Bibliotheken hinzuzufügen.
-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)
Zweitens führen Sie das verarbeitete Glas mit dem ursprünglichen Glas zusammen, aber nur die Pfade, die übersprungen wurden.
-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
Das Ergebnis ist ein zusammengeführtes Glas, das die Kombination aus dem verarbeiteten Paketpfad und den übersprungenen Pfaden darstellt. Diese Übung ist ungültig, wenn jemand die Möglichkeit bietet, die Verarbeitung bestimmter Pfade vollständig zu überspringen (was ich nicht gefunden habe).