2016-08-17 2 views
0

내 앱에는 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을 완전히 구현하는 클래스를 난독 화하는 구성이 있습니까?

답변

0

-keepclassmembers이있는 행은 실제로 대부분의 필드와 메소드의 이름을 유지합니다. ProGuard 설명서> 예제>Processing serializable classes에서 설명한대로 serialVersionUID 필드가없는 클래스를 직렬화하는 경우이 줄이 필요할 수 있습니다. 이 필드를 추가하면 더 적은 방법으로 난독 화하는 덜 보수적 인 구성을 사용할 수 있습니다.

+0

내게 수치스러워, 지금 시도해보고 최대한 빨리 답변 해 주셔서 감사합니다.) –

관련 문제