2

ACRAをアプリケーションに統合して、ベータスタジアムのアプリからクラッシュレポートを取得したので、バグを修正したり、コードのエラーを見つけたりできます。これをエミュレーターで実行すると、すべてが正常に機能し、ACRAは稼働していますが、 Android Toolsを使用してアプリケーションの署名付きパッケージをエクスポートすると、ExceptionInInitializeErrorが発生し、アプリケーションはデバイス上で強制的に閉じられます。このエラーをキャッチしてACRAなしで続行すると、アプリ自体が魅力のように実行されます...

ここの誰かがACRAで同じ問題を抱えていますか?それはProGuardと関係があるのでしょうか?私はACRAのホームページでProGuardの方法に従いましたが、おそらくこれに何かが欠けていますか?

私のproguard.cfgは次のようになります。-injars'C:\ Workspaces \ motodevWs \ gp2012 \ bin \ classes' -injars'C:\ Workspaces \ motodevWs \ gp2012 \ libs' -outjars'C:\ Workspaces \ motodevWs \ gp2012 \ bin \ classes-processed.jar '

-libraryjars 'C:\android\android-sdk\platforms\android-7\android.jar'
-libraryjars 'C:\android\android-sdk\add-ons\addon_google_apis_google_inc_7    \libs\maps.jar'

-optimizations !code/simplification/arithmetic
-allowaccessmodification
-repackageclasses ''
-keepattributes *Annotation*,SourceFile,LineNumberTable,*Annotation*
-renamesourcefileattribute SourceFile
-dontpreverify
-dontwarn java.awt.**,javax.security.**,java.beans.**,com.sun.**


-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*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context,android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context,android.util.AttributeSet,int);
}

-keepclassmembers class * extends android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}

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

# keep this class so that logging will show 'ACRA' and not a obfuscated name like 'a'.
# Note: if you are removing log messages elsewhere in this file then this isn't necessary
-keep class org.acra.ACRA {
    <fields>;
    <methods>;
}

# keep this around for some enums that ACRA needs
-keep class org.acra.ReportingInteractionMode {
    <fields>;
    <methods>;
}

# keep this otherwise it is removed by ProGuard
-keep public class org.acra.ErrorReporter {
    public void addCustomData(java.lang.String,java.lang.String);
}

# keep this otherwise it is removed by ProGuard
-keep public class org.acra.ErrorReporter {
    public org.acra.ErrorReporter$ReportsSenderWorker handleSilentException(java.lang.Throwable);
}

問題が解決しました! 調査と問題の再考にいくらか努力した後、私は問題の解決策を見つけました、そしてそれは確かに私proguard.cfgが何かを逃した私のファイルにありました!

どういうわけか私は列挙型を保持することができませんでした、今私は追加しました

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

proguard.cfgとすべてが完璧に機能しています!

4

2 に答える 2

0

だから、私が自分で見つけた答えでこの質問を閉じるために、これがこの特定の問題を解決するために私がしたことです:)(私の質問投稿から取られました):

調査と問題の再考にいくらか努力した後、問題の解決策を見つけました。それは確かに私のproguard.cfgファイルにあり、何かを見逃していました。

どういうわけか私は列挙型を保持することができませんでした、今私は追加しました

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

私のproguard.cfgに、すべてが完全に機能しています!!

于 2012-07-02T09:54:42.197 に答える
0

これで、ProGuardでのACRAの使用に関するWikiになりました。

https://github.com/ACRA/acra/wiki/Proguard

于 2014-02-02T14:30:48.420 に答える