2011-10-17 24 views
5

Desde hoy, algo extraño sucede con mi aplicación. Cada vez que haga clic en un botón que ha establecido el atributo android: onClick, consigo un IllegalStateException : No se pudo encontrar un método ...android: onClick no funciona con ProGuard

me di cuenta de que sólo sucede cuando activo Proguard en el archivo: default.properties

Esta es mi proguard.cfg:

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-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>; 
} 

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

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

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

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

lo que pasa es que no sucedió la semana pasada .. (yo estaba utilizando Proguard también). ¿Algunas ideas?

EDITAR he encontrado otra solución a este problema: El proyecto con problemas fue creado con una versión antigua del plugin ADT (Eclipse). Creé un nuevo proyecto con los mismos parámetros y copié el src/, res/ y Manifiesto, y el problema fue resuelto!

+0

En su publicación, ha comentado accidentalmente la mayor parte del código, no estoy seguro si es solo un error tipográfico o no. –

+0

Ese es el archivo proguard, tiene/* y stackoverflow lo detecta como un comentario. – SERPRO

Respuesta

4

Necesita decirle a proguard que no mute el método asociado con su etiqueta .

Aquí es una regla de ejemplo (tomado de the proguard website):

-keep class mypackage.MyCallbackClass { 
    void myCallbackMethod(java.lang.String); 
} 
+0

Eso es todo ... ¡Gracias! Todavía no entiendo por qué eso no sucedió antes. – SERPRO

+0

Acabo de comprobar y el android: onClick funciona en algunos xml pero no en otros .. ¿Sabes por qué sucede eso? – SERPRO

6

en el archivo de ejemplo, en las herramientas de marco androide (YOUR_ANDROID_DIR/herramientas/Proguard/Proguard-android.txt), se puede encontrar la siguiente regla:

# We want to keep methods in Activity that could be used in the XML attribute onClick 
-keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
} 

Con el comentario es bastante explícito.