Appcompat-v7 v21.0.0 causando bloqueo en dispositivos Samsung con Android v4.2.2

Acabamos de cambiar nuestra aplicación para usar la appcompat-v7 support para aprovechar la barra de acción de soporte y temas de Soporte Técnico. Con v21.0.0 of appcompat-v7 (y v21.0.0 of support-v4) , ahora vemos fallos en Google Play y Crashlytics sólo en dispositivos Samsung running Android v4.2.2 . Here is the stack trace from Google Play and the app appears to crash as soon as the . Here is the stack trace from Google Play and the app appears to crash as soon as the bloquea . Here is the stack trace from Google Play and the app appears to crash as soon as the se muestra . Here is the stack trace from Google Play and the app appears to crash as soon as the barra de acción y / o se invalida.

 java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:991) at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1041) at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259) at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:80) at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:116) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5299) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) at dalvik.system.NativeStart.main(Native Method) 

Otros dispositivos y emuladores que ejecutan v4.2.2 no muestran este comportamiento. Entiendo que muchas aplicaciones de Google ya están utilizando esta nueva versión de appcompat para mostrar la barra de acción. Si estas aplicaciones no informan sobre bloqueos en estos dispositivos, sería útil saber cómo se está evitando o solucionarlo.

Informé esto como un error a Google, pero se cerró con la razón de que es un problema de desarrollo. Aunque estoy de acuerdo en que esto puede ser el caso, me pregunto si / cómo alguien es capaz de utilizar appcompat-v7 v21.0.0 y no obtener accidentes en los Samsung 4.2.2 devices .

Actualización: Parece que Google está considerando al menos posibles soluciones para esto. Vea esto para más detalles.

He encontrado la solución adecuada aquí: https://stackoverflow.com/a/26641388/1266123

Mediante el uso

 -keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;} 

en lugar de

 -keep class android.support.v7.** {*;} 

Como # 150 de https://code.google.com/p/android/issues/detail?id=78377 dicho

¡Cuidado con la clase -weep! Android.support.v7.internal.view.menu. **. Hay un número de clases en que se hace referencia desde los recursos del appcompat.

La mejor solución es añadir las siguientes líneas:

 -keep class !android.support.v7.internal.view.menu.MenuBuilder, !android.support.v7.internal.view.menu.SubMenuBuilder, android.support.v7.** { *; } -keep interface android.support.v7.** { *; } 

Desde Appcompat 23.1.1 el paquete .internal en el jar AppCompat se eliminó.

Corrección actualizada mediante proguard:

 #FOR APPCOMPAT 23.1.1: -keep class !android.support.v7.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.* { *; } 

Para todos los que tienen este problema, sólo solución hasta ahora parece estar utilizando proguard. Debate de la compra en https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby=&sort=&id=78377

Si alguien está interesado en usar una solución sin progaurd.

Leer el enlace He intentado esto en una de mis aplicaciones que dio la excepción en setSupportActionBar (barra de herramientas) en onCreate ().

Su bastante simple simplemente agrega try catch bloque alrededor de la llamada

 try { setSupportActionBar(toolbar); } catch (Throwable t) { // WTF SAMSUNG! } 

Encontré el mismo problema en Tecno P9, pero después de usar las herramientas de compilación 24 y para mi biblioteca de soporte usé 24.2.0, se arregló.

Cambie la versión Compile Sdk de su proyecto a "API 18: (JellyBean)"

El valor predeterminado es "Lollipop"

Hasta ahora ha resuelto mi problema en Qmobile i9

PASOS

  1. Haga clic derecho en su proyecto y seleccione Abrir configuración de módulo (o presione F4)
  2. En la ficha Propiedades Compiled Sdk Version

Reemplazar AppCompatActivity con actividad

Esto me ayudó.

Reemplazar

 public class class_name extends AppCompatActivity { ......... } 

Con

 public class class_name extends Activity { ......... } 

Esto me ayudó.

  • Cubeta de pantalla samsung note 2 y note 3
  • Android: Samsung "Smart Manager" aplicación de elevar las advertencias
  • Samsung Smart Manager informa sobre la aplicación lenta pero muestra información sobre los errores
  • Colisiones nativas recibidas en dispositivos Samsung sólo con las versiones Lollipop 5.0 y 5.1
  • Desplome de la ventanilla múltiple de Samsung
  • Samsung Nota 2 no puede llegar onLocationChanged ()
  • MP3 streaming en C # .NET 4.5.1 MVC 5.2.2 en Samsung 6S
  • Adición del soporte de ventanas múltiples de Samsung a la aplicación de Android
  • ¿Apoyará Samsung la API de huellas dactilares de Google de Marshmallow?
  • Android Descargar Manager Issue en Samsung Tab GT-P3100
  • MediaPlayer error (1, -1004) también conocido como MEDIA_ERROR_IO intentando transmitir música en Samsung S3
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.