Здається, багато людей рекомендують -keep class com.myapp.customcomponents.** { *; }
як спосіб виключити шлях від обробки. Дивіться тут:
- виключити пакети з proguard
- Зробіть Proguard повністю ігнорувати пакет
- Захистіть каталог від запуску захисника
Проблема цього рішення полягає в тому, що все ще відбувається деякий рівень затухання, який може порушити ваш код. Ви можете бачити відображення у роздруківці карти:
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
Я вибрав таке рішення - це процес у два етапи. Спочатку injars
за допомогою фільтра виберіть шлях пакета, який я хотів би обробити. Можна додати інші патчі пакунків як бібліотеки.
-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)
По-друге, об'єднайте оброблену банку з оригінальною баночкою, але лише ті шляхи, які були пропущені.
-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
В результаті виходить злита банка, яка є поєднанням обробленого шляху пакета та пропущених шляхів. Ця вправа недійсна, якщо хтось може запропонувати спосіб повністю пропустити обробку певних шляхів (чого я не знайшов).