Acabamos de cambiar nuestra aplicación para usar la appcompat-v7 support
biblioteca a fin de aprovechar la barra de acciones de soporte y los temas de materiales de soporte. Usando v21.0.0 of appcompat-v7
(y v21.0.0 of support-v4)
, ahora estamos viendo fallas Google Play
y Crashlytics solo desde dispositivos Samsung, la running
barra de . Here is the stack trace from Google Play and the app appears to crash as soon as the
acción Android v4.2.2 se muestra 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. Tengo entendido que muchas aplicaciones de Google ya están usando esta nueva versión de appcompat
para mostrar la barra de acciones. Si estas aplicaciones no informan fallas en estos dispositivos, sería útil saber cómo se está evitando / solucionando esto.
Informé de esto como un error a Google, pero se cerró con el motivo de que es un problema de desarrollo. Aunque estoy de acuerdo en que este puede ser el caso, me pregunto si / cómo alguien puede usar appcompat-v7 v21.0.0
y no bloquearse Samsung 4.2.2 devices
.
Actualización: Parece que Google al menos está considerando posibles soluciones para esto. Vea esto para más detalles.
fuente
Respuestas:
Encontré 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 vez de
-keep class android.support.v7.** {*;}
fuente
Como # 150 de https://code.google.com/p/android/issues/detail?id=78377 dicho
La mejor solución es agregar las siguientes líneas en su lugar:
-keep class !android.support.v7.internal.view.menu.MenuBuilder, !android.support.v7.internal.view.menu.SubMenuBuilder, android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
fuente
Dado que se eliminó
Appcompat 23.1.1
el.internal
paquete en el tarro de AppCompat.Corrección actualizada usando proguard:
#FOR APPCOMPAT 23.1.1: -keep class !android.support.v7.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.* { *; }
fuente
Para todos los que tienen este problema, la única solución alternativa hasta ahora parece ser usar proguard. Consulta la discusión 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
fuente
Si alguien interesado en utilizar una solución sin progaurd.
Lea el enlace que probé en una de mis aplicaciones que dio la excepción en setSupportActionBar (barra de herramientas) en onCreate ().
Es bastante simple, solo agregue el bloque try catch alrededor de la llamada
try { setSupportActionBar(toolbar); } catch (Throwable t) { // WTF SAMSUNG! }
fuente
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 solucionó.
fuente
Cambie la versión Compile Sdk de su proyecto a "API 18: (JellyBean)"
El valor predeterminado es "Lollipop".
Hasta ahora resolvió mi problema en Qmobile i9
PASOS
fuente
Reemplazar AppCompatActivity con actividad
Eso me ayudó.
fuente
Reemplazar
public class class_name extends AppCompatActivity { ......... }
Con
public class class_name extends Activity { ......... }
Eso me ayudó.
fuente