Görünüşe göre birçok insan -keep class com.myapp.customcomponents.** { *; }
, bir yolu işlenmekten hariç tutmanın bir yolu olarak tavsiye ediyor. Buraya bakın:
- paketleri proguard'dan hariç tut
- Proguard'ın paketi tamamen yok saymasını sağlayın
- Bir dizinin proguard gizlemesini önleyin
Bu çözümle ilgili sorun, hala kodunuzu kırabilecek bir miktar şaşırtma olması. Haritalama çıktısında eşleştirmeyi görebilirsiniz:
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
Seçtiğim çözüm iki aşamalı bir süreçtir. Öncelikle, injars
işlemek istediğim paket yolunu seçmek için bir filtre ile kullanın. Diğer paket yollarını kitaplıklar olarak eklemek mümkündür.
-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)
İkinci olarak, işlenmiş kavanozu orijinal kavanozla, ancak yalnızca atlanan yolları birleştirin.
-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
Sonuç, işlenen paket yolu ile atlanan yolların birleşimi olan birleştirilmiş bir kavanozdur. Birisi belirli yolların işlenmesini tamamen atlamanın bir yolunu sağlayabilirse (bulamadığım) bu alıştırma geçersizdir.