2012-04-05 15 views
10

I ofuscado mi aplicación Android con ProGuard y al intentar ejecutar mi ofuscado .apk que arroja:Android ProGuard "java.lang.nosuchfielderror: Tostada" excepción

java.lang.nosuchfielderror: Toast

Este es mi archivo proguard.cfg:

<!-- language: lang-none --> 

    -injars  bin/classes //injars 
    -injars  libs //injars 
    -outjars  bin/classes-processed.jar 
    -optimizationpasses 1 
    -dontusemixedcaseclassnames 
    -dontskipnonpubliclibraryclasses 
    -dontpreverify 
    -verbose 
    -allowaccessmodification 
    -keepattributes *Annotation* 
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
    -printmapping D:/out.map 
    -renamesourcefileattribute ProGuard 
    -keepattributes Exceptions,InnerClasses,Signature,Deprecated, 
     SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 
    -libraryjars C:/Program Files/Android/android-sdk/platforms/android 
     12/android.jar  
    -dontwarn android.support.** 
    -dontwarn com.android.** 
    -dontwarn com.google.** 
    -dontwarn org.apache.** 
    -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.app.backup.BackupAgentHelper 
    -keep public class * extends android.preference.Preference 
    -keep public class com.android.vending.licensing.ILicensingService 
    -keepclasseswithmembernames class * { 
     native <methods>; 
    } 

    -keepclasseswithmembers class * { 
     public <init>(android.content.Context, android.util.AttributeSet); 
    } 

    -keepclasseswithmembers class * { 
     public <init>(android.content.Context, android.util.AttributeSet, int); 
    } 

    -keepclassmembers class *.R$ { 
     public static <fields>; 
    } 

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

    -keep class * implements android.os.Parcelable { 
     public static final android.os.Parcelable$Creator *; 
    } 

    -keepclassmembers class * extends android.app.Activity { 
     public void *On*Click(android.view.View); 
     public void *on*Click(android.view.View); 
    } 

    -keepclassmembers class * implements java.io.Serializable { 
     static final long serialVersionUID; 
     private static final java.io.ObjectStreamField[] serialPersistentFields; 
     private void writeObject(java.io.ObjectOutputStream); 
     private void readObject(java.io.ObjectInputStream); 
     java.lang.Object writeReplace(); 
     java.lang.Object readResolve(); 
    } 
+1

Se le olvidó su archivo proguard.cfg favor agregue antes otros menospreciaron esta pregunta. – rekire

Respuesta

4

Parece que está utilizando ACRA para informar de errores. Me encontré con el mismo problema, encontró la respuesta aquí: http://code.google.com/p/acra/issues/detail?id=22

la solución es añadir

-keep class org.acra.ReportingInteractionMode { *; }

a su archivo de configuración Proguard

+3

En el sitio web de Acra puede encontrar la explicación completa: https://github.com/ACRA/acra/wiki/ Proguard –

+0

Intenté la solución de la respuesta, pero no funcionó, así que seguí las instrucciones en el [enlace ] (http://github.com/ACRA/acra/wiki/Proguard) Yoann Hercouet proporcionó y funcionó. –

Cuestiones relacionadas