2013-10-01 2 views
1

그래서 나는 여기와 다른 곳에서 수천 개의 스레드를 읽으며 여전히 나를 위해 일하지 않는다. 해당 오류 중 하나는 참조 된 클래스 sun.misc.Unsafe를 찾을 수 없거나 해당 클래스에서 dontwarn을 사용하면 컴파일되지만 gson 부분은 어느 시점에서 ClassCastExecption을 반환합니다.gson obfuscation proguard errors

지금 - 나는 직렬화 된 클래스가 난독 설정에서 -keep로 표시 shuold 것을 알고있다, 그러나 나는 내가 여전히 제대로 내 코드를 당황하게하지, -keepattributes 주석 및 서명에 대해 알고.

내 난독 화 - project.txt 부착

-optimizationpasses 2 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic 

-allowaccessmodification 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 
-repackageclasses '' 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepattributes Signature 

-keepattributes *Annotation* 

# Gson specific classes 
-keep class sun.misc.Unsafe { *; } 
-keep class com.google.gson.stream.** { *; } 

# Application classes that will be serialized/deserialized over Gson 
-keep class my.package.model.** { *; } 

-keep class com.google.gson.** { *; } 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keep class net.sqlcipher.** { 
    *; 
} 

-assumenosideeffects class android.util.Log { 
    public static *** e(...); 
    public static *** w(...); 
    public static *** wtf(...); 
    public static *** d(...); 
    public static *** v(...); 
    public static *** i(...); 
} 

나는이 gson example proguard settings

+0

명백하게 -keepattributes 예외, 내부 클래스, 서명, 사용되지 않음, SourceFile, LineNumberTable, * Annotation *, EnclosingMethod sorta helped. 나는 어떤 단서를 얻었는지 모르겠지만, 로그가 출력을 차단하지 못하면 그냥 StringBuffer로 바뀐다. lol –

+0

당신은 당신 자신의 대답으로이 코멘트를 게시 할 수있다. – giampaolo

답변

0

는 분명히 예외, InnerClasses, 서명, 사용되지 않는,은 SourceFile이 LineNumberTable은, 주석, EnclosingMethod가 그렇다고 도움을 -keepattributes 확인 1 편집 . 나는 단서를 얻지 못했지만 Log가 출력에서 ​​잘리지 않는 이유는 StringBuffer Lol로 바뀌었다.

<target name="-uncommentlogsafter"> 
    <replaceregexp match="\/\*(Log\..*?;\s*\n)\*\/" replace="\1" flags="gs" byline="false"> 
     <fileset dir="src"> 
      <include name="**/*.java"/> 
     </fileset> 
    </replaceregexp> 
</target> 

그래서 당신에 추가 할 수 있습니다 :

편집 한 비록 필자는 누군가가 그것을 필요로

<target name="-commentoutlogs"> 
    <replaceregexp match="(Log\..*?;\s*\n)" replace="/*\1*/" flags="gs" byline="false"> 
     <fileset dir="src"> 
      <include name="**/*.java"/> 
     </fileset> 
    </replaceregexp> 
</target> 

및 주석을 해제 할 경우 이렇게되면 개미의 build.xml 스크립트에 대상을 추가 당신을 위해 물건을 고칠 수 있도록 공개 대상을 좋아합니다. 로그는 미세하게 주석 처리됩니다.

/*Log.<blablabla>); 
*/