1

ここや他の場所で何千ものスレッドを読んだことがありますが、まだうまくいきません。参照されたクラスsun.misc.Unsafeが見つからないなどのエラー、またはそれらにdontwarnを使用すると、コンパイルされますが、gson部分はある時点でClassCastExecptionを返します。

今-シリアル化されたクラスはプロガード設定で-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 の例のプロガード設定も確認しました

4

1 に答える 1

0

どうやら -keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,Annotation,EnclosingMethod が役に立ちました。理由はわかりませんが、ログが出力から切り取られていないため、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> );
*/
于 2013-10-11T11:02:23.230 に答える