Android Proguard Release causa no ejecutar for-loop
En mi aplicación de Android estoy construyendo en modo de lanzamiento. Con Proguard activado se produce un problema raro, no se ejecuta un loop for-loop específico:
List<MyClass> objectList = getObjectList(); Log.d("Step 1", String.valueOf(objectList.size())); //Print size > 0 for(MyClass object: objectList) { Log.d("Step 2", object.toString()); //Never printed ... }
El registro "Paso 1" se imprime correctamente y objectList.size() > 0
. No entiendo qué está causando el "paso 2" El registro nunca se imprime (y todo el código en para-lazo nunca ejecutado). Estoy usando el administrador de dispositivos Android Logcat.
- No se puede acceder a jarfile ./lib/proguardgui.jar
- ¿Cómo configurar PROGUARD para el procesador Jackson JSON?
- Android, javamail y proguard
- ¿Cómo hacer que org.apache.http.legacy funcione con ProGuard (azure mobile services)?
- Proguard error: opción desconocida '-optimizationpasses'
En modo de depuración o con Proguard desactivado, este fragmento funciona correctamente.
Gracias por adelantado.
Actualizar
Acabo de añadir -dontoptimize
pero el problema no fue resuelto. Este es mi archivo proguard-rules:
-dontoptimize -dontpreverify -repackageclasses '' -allowaccessmodification #-optimizations !code/simplification/arithmetic -keepattributes *Annotation*,EnclosingMethod,SourceFile,LineNumberTable -renamesourcefileattribute SourceFile -keepnames class com.androidplot.** { *; } -keepnames class com.fasterxml.jackson.** { *; } -keepnames class org.acra.** { *; } -keep,allowoptimization class com.mypackage.myapp.model.** { *; } -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.preference.PreferenceFragment -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 * implements android.os.Parcelable { static android.os.Parcelable$Creator CREATOR; } -keepclassmembers class **.R$* { public static <fields>; } -dontwarn com.mypackage.myapp.** -dontwarn com.fasterxml.jackson.databind.ext.** -dontwarn com.google.common.** -dontwarn android.support.**
- Proguard config para facebook sdk. Eliminar todo excepto el análisis
- Hora de Joda y error de ProGuard al exportar .apk
- Exportación de un proyecto de Android durante el uso de proguard en adt & sdk 20
- Eliminar actividad de apk a través de Proguard
- ProGuard causa error de handshake SSL en Android
- Excepción al dexar archivos: Se ha interrumpido la traducción
- ProGuard para Android y GSON
- Implementación de Proguard Security con mi APK
Loops que desaparecen
Si su código contiene bucles ocupados en espera vacíos, el paso de optimización de ProGuard puede eliminarlos. Más específicamente, esto sucede si un bucle comprueba continuamente el valor de un campo no volátil que se cambia en un hilo diferente. Las especificaciones de la Máquina Virtual Java requieren que siempre se marquen los campos a los que se accede a través de diferentes subprocesos sin sincronización adicional como volátil. Si esto no es posible por alguna razón, tendrá que desactivar la optimización mediante la opción -dontoptimize.
- Android SharedPreferences Error de IOException
- GetIntent () en onResume () siempre devuelve la misma acción, ¿cómo consumirla?