내 앱에는 Serializable/Externalizable
인터페이스를 구현하는 클래스가 있습니다.ProGuard는 Serializable 클래스를 완전히 난독 화하지 않습니다.
Serializable
또는 Externalizable
을 구현하는 디 컴파일 링 클래스 뒤에는 a, b
과 같은 이름이 흐릿하지만 필드와 메소드의 이름은 동일하게 유지됩니다. 방법의 본문도 난독 화됩니다.
동일한 문제는 메서드 및 필드 (자체 인스턴스 제외)가있는 Enum
에 영향을줍니다.
내 proguard-rules.pro
파일은 옆에
-optimizationpasses 5
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String, int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
-dontwarn android.support.**
-keepclasseswithmembernames, includedescriptorclasses class * {
native <methods>;
}
-keep public class android.support.v7.widget.** { *; }
-keep public class android.support.v7.internal.widget.** { *; }
-keep public class android.support.v7.internal.view.menu.** { *; }
-keep public class * extends android.support.v4.view.ActionProvider {
public <init>(android.context.Context);
}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
-keepclassmembers, allowoptimization enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
하나 더 상세 : -keepclassmembers class * implements java.io.Serializable {...}
부분을 추가하기 전에 내 애플 직렬화 단계에 실패했습니다. 나는 ProGuard의 사이트에서 examples을 시도했지만 마지막 하나만 작동합니다.
그럼이 경우 어떻게해야합니까? Serializable/Externalizable
을 완전히 구현하는 클래스를 난독 화하는 구성이 있습니까?
내게 수치스러워, 지금 시도해보고 최대한 빨리 답변 해 주셔서 감사합니다.) –