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.
- La actividad no se reproducirá al azar, muestra sólo la pantalla en blanco en Samsung
- El dispositivo Samsung con Android 5.0 cambia el color de la barra de progreso
- ¿Qué navegador utiliza el Samsung Galaxy?
- Apk es rechazado de Samsung Apps
- Color de estilo CSS ineficaz en estrellas (& # 9733;) en Samsung con Android 4.4 KitKat
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.
- Número de serie del dispositivo Samsung que ejecuta Android
- Cómo saber si Samsung Game Tuner está cambiando la relación de resolución
- El menú de opciones se bloquea en la galaxia s4
- Android ADB Shell no activa los paquetes
- Toma la foto falla en los teléfonos Samsung
- Cómo diseñar diseño para S4
- Teclado suave de Samsung pierde las pulsaciones de teclado después del cambio de enfoque
- Cómo habilitar la consola javascript en Android 4.2.2
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
- Haga clic derecho en su proyecto y seleccione Abrir configuración de módulo (o presione F4)
- 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ó.