versiones pie oreo developer descargar android

oreo - android pie



Proguard causa la excepción RuntimeException(descifrar el código de tipo desconocido) en la clase Parcelable (2)

Recibo esta excepción si dejo mi aplicación y la abro después de un tiempo. Mi actividad principal consiste en un ViewPager con tres fragmentos diferentes. También hago algunas cosas en la clase de aplicación que no creo que se relaciona con el problema.

Esta es la excepción:

RuntimeException (@Parcel: readValue: 2065) {No se puede iniciar la actividad ComponentInfo {com.emu / com.emu.ActivityMain}: java.lang.RuntimeException: Parcel android.os.Parcel@419526d0: Desasignación del código de tipo desconocido 2131361816 en el desplazamiento 332 }

Veo mucha de esta excepción sucediendo en los teléfonos de los usuarios en Google Analytics. Todos ellos son iguales excepto el número después de readValue y el número hexadecimal después de @ que son 2065 y 419526d0 en la excepción anterior.

La excepción no señala ninguna línea de código. Busqué sobre esto y parece que se relaciona con la escritura incorrecta en el paquete. Aunque no tengo ningún paquete en mi MainActivity. No sé qué puede causar esto.

--- EDITAR ---------------------------------------------- --------------------------

Reproduje la excepción. Sucede cuando la aplicación sale con el botón de inicio y se borra de la memoria después de abrir otra aplicación que consume memoria. Al volver a comenzar, ocurre una excepción. Hasta ahora estaba pensando que cerrar la aplicación de una tarea reciente o de DDMS tiene el mismo efecto, pero aparentemente no es así.

@EricWoodruf me ayudó a encontrar que el paquete está en algún lugar de la biblioteca importada. Encuentro el paquete en PagerSlidingTabStrip que descargué de la web. Este es el código relacionado con el paquete, pero realmente no sé qué está mal aquí:

public class PagerSlidingTabStrip extends HorizontalScrollView { @Override public void onRestoreInstanceState(Parcelable state) { SavedState savedState = (SavedState) state; super.onRestoreInstanceState(savedState.getSuperState()); currentPosition = savedState.currentPosition; requestLayout(); } @Override public Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); SavedState savedState = new SavedState(superState); savedState.currentPosition = currentPosition; return savedState; } static class SavedState extends BaseSavedState { int currentPosition; public SavedState(Parcelable superState) { super(superState); } private SavedState(Parcel in) { super(in); currentPosition = in.readInt(); } @Override public void writeToParcel(Parcel parcel, int flags) { super.writeToParcel(parcel, flags); parcel.writeInt(currentPosition); } public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { @Override public SavedState createFromParcel(Parcel in) { return new SavedState(in); } @Override public SavedState[] newArray(int size) { return new SavedState[size]; } }; } }

---- EDIT 2 -------------------------------------------- ---------------------

¡Después de que pude reproducir el problema, descubrí que esto solo ocurre en Artifact, que está firmado por mi llave y lo procuro! ¡La depuración no tiene el problema!

Inhabilité proguard en artefacto y funciona como un amuleto sin excepción. Pero, ¿qué proguardismo resulta en este problema?

Intenté agregar esto a proguard pero no funcionó:

-keep class toolfa.android.base.ui.PagerSlidingTabStrip { *; } -dontwarn toolfa.android.base.ui.PagerSlidingTabStrip

esta es mi configuración actual de proguard:

-keep class com.nineoldandroids.** { *; } -dontwarn com.nineoldandroids.** -keep class ir.adad.** { *; } -dontwarn ir.adad.** -keep class android.support.v4.** { *; } -dontwarn android.support.v4.** -keep class toolfa.android.base.ui.PagerSlidingTabStrip { *; } -dontwarn toolfa.android.base.ui.PagerSlidingTabStrip -keep class toolfa.android.sega.ActivityEmulator { *; } -keep class toolfa.android.sega.Zip { *; }


Como descubrimos en los comentarios, la excepción fue el resultado de que ProGuard ofusque las clases Parcelable. La solución es incluir este fragmento en el archivo de configuración de ProGuard:

-keepclassmembers class * implements android.os.Parcelable { static ** CREATOR; }

Supongo que el problema específico aquí fue que ProGuard PagerSlidingTabStrip miembro de PagerSlidingTabStrip de PagerSlidingTabStrip , pero como SavedState es una subclase de View.BaseSavedState , el miembro de la superclase todavía estaba disponible (es por eso que no arrojó una BadParcelableException ), pero que usa una estructura de datos diferente y no escribió los atributos personalizados en la salida de Parcel .

Hay una configuración recomendada para las aplicaciones de Android disponible en el Manual de ProGuard , con una explicación detallada de las entradas. Por ejemplo, incluye que debe mantener todos los nombres de clase utilizados en el manifiesto u otros archivos XML.


Creo que sé por qué está pasando esto. No estoy seguro de esto así que podría estar equivocado.

Entonces, en mi caso, también estoy usando un viewpager en mi aplicación para mostrar algunos datos de la base de datos (usando el cursor). Ahora, si dejo la aplicación en segundo plano y la reanudo después de un largo período de tiempo (algunas horas), Android decide matar mi aplicación. Al reanudar la aplicación, reconstruye mi actividad. Sin embargo, los datos subyacentes establecidos en mi adaptador no se restauran.

Para resolver este problema, estoy requiriendo datos en onResume() SI getCount() devuelve 0.

A tu lado, creo que lo mismo le está sucediendo a tu aplicación. Intente colocar un Log en su onResume y vea si este es el caso?