2012-02-06 5 views
2

J'ai intégré ACRA à mon application pour obtenir des rapports d'erreur de mon application dans le stade bêta afin que je puisse corriger les bogues, trouver des erreurs dans le code, etc. Si je l'exécute sur l'émulateur tout fonctionne bien et ACRA est opérationnel, mais si j'exporte un paquet signé de mon application avec Android Tools, j'obtiens un ExceptionInInitializeError et l'application est fermée de force sur le périphérique. Si j'attrape cette erreur et continue sans ACRA l'application elle-même fonctionne comme un charme ...Obtenir java.lang ExceptionInInitializerError lors de l'initialisation ACRA

Quelqu'un a-t-il eu le même problème avec ACRA? Se pourrait-il que cela ait quelque chose à voir avec ProGuard? J'ai suivi le ProGuard sur la page d'accueil de l'ACRA mais peut-être qu'il me manque quelque chose à ce sujet?

voici ce que mon proguard.cfg ressemble: -injars de C: \ Workspaces \ motodevWs \ gp2012 \ bin \ classes de -injars de 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); 
} 

Problem solved! Après quelques efforts sur la recherche et repenser mon problème j'ai trouvé la solution au problème et c'était en effet dans mon dossier proguard.cfg où j'ai raté quelque chose!

en quelque sorte je réussi à ne pas garder énumérations, maintenant j'ajouté

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

à mon proguard.cfg et tout fonctionne parfaitement !!

+0

Pourquoi appelez-vous 'ErrorReporter.getInstance() init (ce).' D'abord? Cela fait longtemps que je n'ai pas configuré ACRA, mais j'utilise uniquement ACRA.init (this) dans mon application et tout fonctionne correctement. – THelper

+0

J'ai essayé ceci en raison d'un bug documenté sur code.google.com/p/acra sur la table des problèmes où quelqu'un a mentionné qu'il avait l'habitude d'obtenir presque la même erreur dans la classe 'ErrorReporter' jusqu'à ce qu'il l'initialise comme ça. Je le change probablement parce que maintenant j'ai trouvé moi-même l'erreur dans mon code et il était en effet connecté avec mon fichier 'proguard.cfg' ... – herom

+0

Ok, n'incluez pas la solution dans votre question parce que votre statut de question restera "sans réponse". Si vous postez votre solution en réponse et que vous l'acceptez, la question sera marquée comme "répondue". – THelper

Répondre

0

Donc, pour clore cette question avec la réponse que je me suis retrouvé, voici ce que je l'ai fait pour résoudre ce problème particulier :) (pris de mon poste de question):

Après un certain effort de recherche et de repenser mon problème J'ai trouvé la solution au problème et c'est bien dans mon fichier proguard.cfg que j'ai raté quelque chose!

en quelque sorte je réussi à ne pas garder énumérations, maintenant j'ajouté

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

à mon proguard.cfg et tout fonctionne parfaitement !!

Questions connexes