初始化ACRA时获取java.lang ExceptionInInitializerError

时间:2012-02-06 10:18:57

标签: android exception acra

我将ACRA集成到我的应用程序中,以便从我的应用程序在beta体育场获取崩溃报告,这样我就能修复错误,在代码中找到错误等等。如果我在模拟器上运行这一切,一切正常,ACRA正常运行正在运行,但如果我使用Android Tools导出我的应用程序的已签名包,我会得到ExceptionInInitializeError,并且应用程序在设备上强行关闭。如果我发现此错误并在没有ACRA的情况下继续运行应用程序本身就像魅力......

这里有人和ACRA有同样的问题吗?它可能与ProGuard有关吗?我跟随ProGuard如何在ACRA主页上,但也许我对此缺少一些东西?

这是我的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,一切都运转良好!!

2 个答案:

答案 0 :(得分:0)

所以,用我发现自己的答案来结束这个问题,这就是我为解决这个特殊问题而采取的措施:)(摘自我的问题帖子):

经过一番努力研究并重新思考我的问题后,我找到了问题的解决方案,而且确实在我的proguard.cfg文件中,我错过了一些东西!

不知怎的,我设法不保留枚举,现在我添加了

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

到我的proguard.cfg,一切都很完美!

答案 1 :(得分:0)

现在这是关于将ACRA与ProGuard一起使用的维基

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