Iniciar sesión con el SDK de Android de Facebook y Proguard
He creado una aplicación de Android con el SDK de Android de Facebook 3.0.
He creado una aplicación de trabajo (cuando se ejecuta desde Eclipse). Se creará una sesión de Facebook (con com.facebook.UiLifecycleHelper) y un botón de inicio de sesión (con com.facebook.LoginButton) para que el usuario pueda iniciar sesión en Facebook. El cuadro de diálogo de autenticación de Facebook se muestra y después de rellenar las credenciales, el botón de inicio de sesión mostrará que el usuario está conectado a Facebook.
- Android - Cómo deshabilitar el botón Buscar, cómo implementar onSearchRequested ()?
- Restaurar la pila posterior de Android después de cerrar la aplicación
- Los puntos de interrupción del método pueden reducir drásticamente la depuración
- ¿Cómo usar una clase de contrato en android?
- findViewByID () sigue devolviendo null en la clase de vista personalizada
Por lo tanto, todo funciona bien, pero cuando estoy haciendo una compilación de liberación (con Proguard habilitado) recibo la siguiente excepción:
E/AndroidRuntime(14690): FATAL EXCEPTION: main E/AndroidRuntime(14690): com.facebook.FacebookException: Unable to save session. E/AndroidRuntime(14690): at com.facebook.Session.saveSession(Session.java:673) E/AndroidRuntime(14690): at com.facebook.UiLifecycleHelper.onSaveInstanceState(UiLifecycleHelper.java:124) E/AndroidRuntime(14690): at com.peerkesoftware.blockcrusher.MorburActivity.onSaveInstanceState(MorburActivity.java:175) E/AndroidRuntime(14690): at android.app.Activity.performSaveInstanceState(Activity.java:1147) E/AndroidRuntime(14690): at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1216) E/AndroidRuntime(14690): at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3253) E/AndroidRuntime(14690): at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3312) E/AndroidRuntime(14690): at android.app.ActivityThread.access$900(ActivityThread.java:150) E/AndroidRuntime(14690): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1271) E/AndroidRuntime(14690): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(14690): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(14690): at android.app.ActivityThread.main(ActivityThread.java:5191) E/AndroidRuntime(14690): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(14690): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(14690): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) E/AndroidRuntime(14690): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) E/AndroidRuntime(14690): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(14690): Caused by: java.io.NotSerializableException: com.facebook.internal.SessionTracker$CallbackWrapper E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) E/AndroidRuntime(14690): at java.util.ArrayList.writeObject(ArrayList.java:644) E/AndroidRuntime(14690): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(14690): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) E/AndroidRuntime(14690): at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) E/AndroidRuntime(14690): at com.facebook.Session.saveSession(Session.java:671) E/AndroidRuntime(14690): ... 16 more
Ya he intentado agregar algunas reglas Proguard, pero no hay suerte para resolver este problema:
-keep class com.facebook.* -keep class com.facebook.android.* -keep class android.webkit.WebViewClient -keep class * extends android.webkit.WebViewClient -keepclassmembers class * extends android.webkit.WebViewClient { <methods>; }
¿Alguien tiene alguna idea de cómo resolver este problema?
- RelativeLayout refresh after view.setVisibility (View.GONE) y view.setVisibility (View.VISIBLE)
- Obtener el valor de la barra de búsqueda de android y mostrarlo en la pantalla
- Gson deserializando objetos anidados con InstanceCreator
- ¿Es el tamaño de Layered Drawable?
- ¿Cuáles son los 37 paquetes de Java API posiblemente gravados por la decisión de Oracle v de mayo de 2014?
- Cómo devolver array int de Java a JNI
- ¿Cómo crear un directorio en Android?
- Aparece la tecla "nameValuePairs" extraña cuando se utiliza Gson
Es probable que la clave sea NotSerializableException en el seguimiento de la pila.
Ya está en la línea correcta con el conjunto de reglas. Eche un vistazo a esta documentación de Proguard , en particular la sección 'Procesamiento de clases serializables'.
El ejemplo más simple que puedes probar desde allí es:
-keepclassmembers class * implements java.io.Serializable { 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(); }
pero amplían esto y agregan más complejidad.
He visto algo similar con la AIDL de Android y la interfaz Parcelable, que es una instancia diferente de serialización (pasar objetos a través de una API remota). Proguard cambia los nombres de clase, lo que significa que ya no puede encontrar las clases esperadas para construir.
- Soporte log4j en Android
- La vista web de Android no puede convertir el video de youtube incrustado a través de iframe