Nhiều người dường như đề xuất -keep class com.myapp.customcomponents.** { *; }
như một cách để loại trừ một đường dẫn đang được xử lý. Xem tại đây:
- loại trừ các gói khỏi proguard
- Làm cho Proguard hoàn toàn bỏ qua gói
- Ngăn chặn một thư mục khỏi sự xáo trộn proguard
Vấn đề với giải pháp này là vẫn có một số mức độ xáo trộn xảy ra, có thể phá vỡ mã của bạn. Bạn có thể thấy ánh xạ trong bản in bản đồ:
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
Giải pháp tôi đã chọn là một quy trình hai bước. Đầu tiên, sử dụng injars
với một bộ lọc để chọn đường dẫn gói mà tôi muốn xử lý. Có thể thêm các gói khác làm thư viện.
-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)
Thứ hai, hợp nhất jar đã xử lý với jar ban đầu, nhưng chỉ những đường dẫn đã bị bỏ qua.
-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
Kết quả là một jar hợp nhất là sự kết hợp của đường dẫn gói đã xử lý và các đường dẫn bị bỏ qua. Bài tập này không hợp lệ, nếu ai đó có thể cung cấp một cách để bỏ qua hoàn toàn việc xử lý các đường dẫn nhất định (mà tôi chưa tìm thấy).