Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 初始化ACRA时获取java.lang ExceptionInInitializerError_Android_Exception_Acra - Fatal编程技术网

Android 初始化ACRA时获取java.lang ExceptionInInitializerError

Android 初始化ACRA时获取java.lang ExceptionInInitializerError,android,exception,acra,Android,Exception,Acra,我将ACRA集成到我的应用程序中,以便在beta stadium中从我的应用程序中获取崩溃报告,这样我就能够修复错误、查找代码中的错误等。如果我在模拟器上运行此程序,一切正常,ACRA已启动并运行,但是如果我用Android工具导出我的应用程序的签名包,我会得到一个ExceptionInInitializeError,应用程序在设备上被强制关闭。如果我发现这个错误,没有ACRA继续运行,应用程序本身就会像一个魔咒一样运行 这里有人和ACRA有同样的问题吗?这可能与ProGuard有关吗?我在AC

我将ACRA集成到我的应用程序中,以便在beta stadium中从我的应用程序中获取崩溃报告,这样我就能够修复错误、查找代码中的错误等。如果我在模拟器上运行此程序,一切正常,ACRA已启动并运行,但是如果我用Android工具导出我的应用程序的签名包,我会得到一个ExceptionInInitializeError,应用程序在设备上被强制关闭。如果我发现这个错误,没有ACRA继续运行,应用程序本身就会像一个魔咒一样运行

这里有人和ACRA有同样的问题吗?这可能与ProGuard有关吗?我在ACRA主页上关注了ProGuard how to,但也许我在这方面遗漏了什么

下面是我的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
来说,一切都很完美

所以,用我自己找到的答案来结束这个问题,下面是我为解决这个特殊问题所做的工作:)(摘自我的发帖):

经过一些研究和反思,我找到了解决问题的方法,确实是在proguard.cfg文件中,我遗漏了一些东西

不知何故,我设法不保留枚举,现在我补充道

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

祝我的proguard.cfg一切都很顺利

所以,用我自己找到的答案来结束这个问题,下面是我为解决这个特殊问题所做的工作:)(摘自我的发帖):

经过一些研究和反思,我找到了解决问题的方法,确实是在proguard.cfg文件中,我遗漏了一些东西

不知何故,我设法不保留枚举,现在我补充道

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

祝我的proguard.cfg一切都很顺利

现在有一个关于将ACRA与ProGuard一起使用的wiki


现在有一个关于将ACRA与ProGuard一起使用的wiki


为什么调用
ErrorReporter.getInstance().init(this)第一个?我已经有一段时间没有自己设置ACRA了,但我只使用
ACRA.init(这个)
在我的应用程序中,一切正常。我尝试这样做是因为问题表上的code.google.com/p/acra上记录了一个bug,有人提到他在
ErrorReporter
类中遇到了几乎相同的错误,直到他像这样初始化它。我可能会将其更改回去,因为现在我自己在代码中发现了错误,并且它确实与我的
proguard.cfg
文件相连接……好的,请不要在您的问题中包含解决方案,因为这样您的问题状态将保持“未回答”。如果您将您的解决方案作为答案发布并接受,则问题将被标记为“已回答”。谢谢@THelper,但它说我没有机会在不到8小时内回答我自己的问题,因为我是会员,所以我得不到分数。。。我试着明天用答案来回答;)为什么调用
ErrorReporter.getInstance().init(this)第一个?我已经有一段时间没有自己设置ACRA了,但我只使用
ACRA.init(这个)
在我的应用程序中,一切正常。我尝试这样做是因为问题表上的code.google.com/p/acra上记录了一个bug,有人提到他在
ErrorReporter
类中遇到了几乎相同的错误,直到他像这样初始化它。我可能会将其更改回去,因为现在我自己在代码中发现了错误,并且它确实与我的
proguard.cfg
文件相连接……好的,请不要在您的问题中包含解决方案,因为这样您的问题状态将保持“未回答”。如果您将您的解决方案作为答案发布并接受,则问题将被标记为“已回答”。谢谢@THelper,但它说我没有机会在不到8小时内回答我自己的问题,因为我是会员,所以我得不到分数。。。我试着明天用答案来回答;)