appcompat-v7 v21.0. 0 causando bloqueo en dispositivos Samsung con Android v4.2.2


Acabamos de cambiar nuestra aplicación para usar la biblioteca appcompat-v7 support con el fin de aprovechar los temas de support actionbar y support Material. Usando v21.0.0 of appcompat-v7 (yv21.0.0 of support-v4), ahora estamos viendo bloqueos en Google Play y Crashlytics solo desde dispositivos SamsungrunningAndroid v4.2.2. Here is the stack trace from Google Play and the app appears to crash as soon as theactionbar` se muestra y/o 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 utilizando esta nueva versión de appcompat para muestra la barra de acciones. Si estas aplicaciones no son informes de accidentes en estos dispositivos, sería útil saber cómo es ser evitadas/fijo.

Reporté 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 este puede ser el caso, me pregunto si/cómo alguien es actualmente capaz de usar appcompat-v7 v21.0.0 y no obtener bloqueos en Samsung 4.2.2 devices.

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

Author: Eric Nordvik, 2014-10-30

9 answers

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

Usando

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

En lugar de

-keep class android.support.v7.** {*;}
 15
Author: robUx4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:35

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

Porque cuidado con-mantener la clase !androide.apoyo.v7.interno.vista.menu.**. Hay una serie de clases allí que se hace referencia desde los recursos de appcompat.

La mejor solución es añadir 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.** { *; }
 7
Author: Pongpat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-25 05:56:10

Desde que Appcompat 23.1.1 se eliminó el paquete .internal en el jar 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.* { *; }
 6
Author: RWIL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-20 09:33:05

Para todos los que tienen este problema, solo la solución hasta ahora parece estar usando proguard. Checkout 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

 2
Author: vandzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-12 14:53:41

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

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

Es bastante simple simplemente agregue el bloque try catch alrededor de la llamada

try {

 setSupportActionBar(toolbar);

} catch (Throwable t) {

 // WTF SAMSUNG!

}
 1
Author: Ravi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-04 08:34:41

Me encontré con el mismo problema en Tecno P9, pero después de usar build tools 24 y para mi biblioteca de soporte utilicé 24.2.0, se solucionó.

 0
Author: Ikechukwu Kalu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-10 20:15:10

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

El valor predeterminado es "Lollipop"

Hasta ahora se resolvió mi problema en Qmobile i9

PASOS

  1. Haga clic derecho en su proyecto y seleccione Abrir configuración del módulo (o presione F4)
  2. En la pestaña propiedades Versión compilada del Sdk
 -2
Author: Jazib Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-04 05:44:28

Reemplazar AppCompatActivity Con Actividad

Esto me ayudó.
 -2
Author: Sachin Waghmare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-06 17:13:28

Sustitúyase

public class class_name extends AppCompatActivity
{

.........

}

Con

public class class_name extends Activity
{

.........

}

Esto me ayudó.

 -2
Author: Sachin Waghmare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-08 16:56:53