2013-10-01 155 views
1

所以我在这里和其他地方读了几千条线程,它仍然不适合我。 它的错误就像找不到引用类sun.misc.Unsafe,或者如果我在这些上使用了dontwarn,它会编译,但是gson部分在某个时候返回ClassCastExecption。gson obfuscation proguard错误

现在 - 我知道,序列化类shuold被标记为proguard的设置-keep,我知道-keepattributes 注释和签名,但我仍然无法正常混淆我的代码。

附上我的proguard的-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(...); 
} 

编辑1 我还检查了这个gson example proguard settings

+0

显然 -keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,* Annotation *,EnclosingMethod sorta帮助。我没有得到任何线索为什么虽然,我没有得到日志剪出输出以及,它只是改变成StringBuffer笑lol –

+0

您可以发表评论作为自己的答案.. – giampaolo

回答

0

显然-keepattributes例外,InnerClasses,签名,不推荐使用,的SourceFile,LineNumberTable,注释,EnclosingMethod八九不离十帮助。我没有得到任何线索,但为什么我没有从输出中取出Logs,它只是变成了StringBuffer lol。

编辑1 虽然香港专业教育学院增加了一个目标到蚂蚁的build.xml脚本,它是这样的,如果有人需要它

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

,并取消注释:

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

这样你就可以将其添加到像发布目标,所以它修复你的东西和日志精细地评论到

/*Log.<blablabla>); 
*/