Получение java.lang ExceptionInInitializerError при инициализации ACRA - PullRequest
2 голосов
/ 06 февраля 2012

Я интегрировал ACRA в свое приложение, чтобы получать отчеты о сбоях из своего приложения на бета-стадионе, чтобы я мог исправлять ошибки, находить ошибки в коде и т. Д. Если я запускаю это на эмуляторе, все работает нормально, и 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-processing.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 голосов
/ 02 февраля 2014

Теперь есть вики, посвященная использованию ACRA с ProGuard

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

0 голосов
/ 02 июля 2012

Итак, чтобы закрыть этот вопрос ответом, который я нашел, вот что я сделал, чтобы решить эту конкретную проблему :) (взято из моего поста с вопросом):

После некоторых усилий по исследованию и переосмыслению моей проблемы, я нашел решение проблемы, и это было действительно в моем файле proguard.cfg, где я что-то пропустил!

как-то мне удалось не сохранять перечисления, теперь я добавил

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

на мой proguard.cfg и все работает отлично !!

...