Tampaknya banyak orang merekomendasikan -keep class com.myapp.customcomponents.** { *; }
sebagai cara untuk mengecualikan jalur agar tidak diproses. Lihat disini:
- kecualikan paket dari proguard
- Buat Proguard mengabaikan paket sepenuhnya
- Cegah direktori dari obfuscation proguard
Masalah dengan solusi ini adalah masih ada beberapa tingkat kebingungan yang terjadi, yang dapat merusak kode Anda. Anda dapat melihat pemetaan di cetakan pemetaan:
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
Solusi yang saya pilih adalah proses dua langkah. Pertama, gunakan injars
dengan filter untuk memilih jalur paket yang ingin saya proses. Dimungkinkan untuk menambahkan jalur paket lain sebagai perpustakaan.
-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)
Kedua, gabungkan toples yang sudah diproses dengan toples asli, tetapi hanya jalur yang dilewati.
-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
Hasilnya adalah jar gabungan yang merupakan kombinasi dari jalur paket yang diproses dan jalur yang dilewati. Latihan ini tidak valid, jika seseorang dapat memberikan cara untuk melewati pemrosesan jalur tertentu sepenuhnya (yang belum saya temukan).