【问题标题】:gson obfuscation proguard errorsgson混淆proguard错误
【发布时间】:2013-10-07 09:08:23
【问题描述】:

所以我在这里和其他地方已经阅读了数千个线程,但它仍然不适合我。 它要么是找不到引用的类 sun.misc.Unsafe 之类的错误,要么是我对它们使用 dontwarn,它会编译,但 gson 部分会在某个时候返回 ClassCastExecption。

现在 - 我知道序列化类应该在 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

【问题讨论】:

  • 显然 -keepattributes Exceptions、InnerClasses、Signature、Deprecated、SourceFile、LineNumberTable、Annotation、EnclosureMethod 有点帮助。我不知道为什么,而且我也没有从输出中删除日志,它只是变成了 StringBuffer 大声笑
  • 您可以发表此评论作为您自己的答案..

标签: android gson obfuscation proguard classcastexception


【解决方案1】:

显然-keepattributes Exceptions、InnerClasses、Signature、Deprecated、SourceFile、LineNumberTable、Annotation、EnclosureMethod 有点帮助。我不知道为什么,而且我也没有从输出中删除日志,它只是变成了 StringBuffer 哈哈。

编辑 1 虽然我在 ant 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> );
*/

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2015-12-27
    • 2013-03-10
    • 1970-01-01
    • 2019-07-20
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多