android - 初始化 ACRA 时出现 java.lang ExceptionInInitializerError

标签 android exception acra

我将 ACRA 集成到我的应用程序中,以便从我在 beta stadium 中的应用程序获取崩溃报告,这样我就能够修复错误、查找代码中的错误等。如果我在模拟器上运行它,一切正常,ACRA 已启动并且正在运行,但如果我使用 Android 工具导出我的应用程序的签名包,我会收到 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 一切正常!!

最佳答案

因此,为了用我自己找到的答案结束这个问题,以下是我为解决这个特定问题所做的工作:)(摘 self 的问题帖):

经过一些研究和重新思考我的问题后,我找到了问题的解决方案,它确实在我的 proguard.cfg 文件中遗漏了一些东西!

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

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

我的 proguard.cfg 一切正常!!

关于android - 初始化 ACRA 时出现 java.lang ExceptionInInitializerError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9158609/

相关文章:

java - fragment 中的画廊

Java 类泛型导致类扩展该类型?

java - 如何忽略 PDFBox 2.0.7 使用的字体中缺失的字形

android - ReportContent 在 acra 中无法正常工作

java - 启动应用程序时在 Android 上找不到类异常

java - 安卓 + SSL : Error Not Trusted Server Certificate

android - 如何使用 "CookieManager::removeAllCookies(ValueCallback<Boolean> callback)"

c++ - 抛出异常时是否创建 std::exception 对象?

c++ - 异常未在辅助线程中捕获,从而导致段错误

tomcat - 现有Tomcat(Hostgator)中的Tomcat设置