Многие люди, кажется, рекомендуют -keep class com.myapp.customcomponents.** { *; }
как способ исключить путь из обработки. Посмотреть здесь:
- исключить пакеты из proguard
- Заставить 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
В результате получается объединенный jar, представляющий собой комбинацию обработанного пути пакета и пропущенных путей. Это упражнение недопустимо, если кто-то может предоставить способ полностью пропустить обработку определенных путей (чего я не нашел).