Android Marshmallow ART "No se pudo encontrar el offset nativo para dex" crash

desde diciembre de 2015, estamos experimentando un accidente extraño sólo en un número limitado de dispositivos con Android 6.0 y 6.0.1. La mayoría de ellos son Nexus 5.

Primero el registro del accidente extraído de la Play Store. Buscando int art_method.cc, parece que la asignación de un determinado método a código nativo falla. Tal vez es la compilación inducida?

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'google/hammerhead/hammerhead:6.0.1/MMB29Q/2480792:user/release-keys' Revision: '0' ABI: 'arm' pid: 18737, tid: 18737, name: omittedapp >>> com.omitteddomain.omittedapp <<< signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr -------- Abort message: 'art/runtime/art_method.cc:245] Failed to find native offset for dex pc 0x58 in android.view.View com.omitteddomain.omittedapp.PlotWidget.a(android.view.ViewGroup, android.view.LayoutInflater, java.util.List)' r0 00000000 r1 00004931 r2 00000006 r3 b6f24b7c r4 b6f24b84 r5 b6f24b34 r6 00000001 r7 0000010c r8 b4c3f800 r9 b4c3de44 sl b361d3db fp b4c23450 ip 00000006 sp beb2ca90 lr b6c93b61 pc b6c95f50 cpsr 40070010 backtrace: #00 pc 00041f50 /system/lib/libc.so (tgkill+12) #01 pc 0003fb5d /system/lib/libc.so (pthread_kill+32) #02 pc 0001c30f /system/lib/libc.so (raise+10) #03 pc 000194c1 /system/lib/libc.so (__libc_android_abort+34) #04 pc 000174ac /system/lib/libc.so (abort+4) #05 pc 00333971 /system/lib/libart.so (art::Runtime::Abort()+228) #06 pc 000f45fb /system/lib/libart.so (art::LogMessage::~LogMessage()+2226) #07 pc 000f08d1 /system/lib/libart.so (art::Barrier::~Barrier()+216) #08 pc 0035b473 /system/lib/libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)+162) #09 pc 00333a35 /system/lib/libart.so (art::Runtime::Abort()+424) #10 pc 000f45fb /system/lib/libart.so (art::LogMessage::~LogMessage()+2226) #11 pc 000ef88b /system/lib/libart.so (art::ArtMethod::ToNativeQuickPc(unsigned int, bool)+918) #12 pc 00329055 /system/lib/libart.so (art::CatchBlockStackVisitor::VisitFrame()+180) #13 pc 0033ccbd /system/lib/libart.so (art::StackVisitor::WalkStack(bool)+224) #14 pc 0032910d /system/lib/libart.so (art::QuickExceptionHandler::FindCatch(art::mirror::Throwable*)+92) #15 pc 0034a61d /system/lib/libart.so (art::Thread::QuickDeliverException()+140) #16 pc 003fb7d9 /system/lib/libart.so (artThrowNullPointerExceptionFromCode+20) #17 pc 00a15f01 /data/app/com.omitteddomain.omittedapp-1/oat/arm/base.odex (offset 0x59d000) 

La única otra ocurrencia de un bloqueo similar (aquí Android ART: "Falló encontrar Dex offset para PC offset …" ) se ha informado que está potencialmente relacionado con un problema de recursión infinita. Aunque tuvimos un problema de recursión infinita en el mismo método "a", ya ha sido arreglado.

Algunas informaciones adicionales:

  1. La clase PlotWidget en cuestión muestra un gráfico para el usuario a través de una biblioteca de terceros. La vista del carro se configura dentro del método anterior "a". Hemos cambiado la biblioteca varias veces sin diferencias en el resultado.

  2. Todas las bibliotecas de terceros están actualizadas.

  3. Hemos sido capaces de probar la aplicación con los mismos datos mostrados a uno de los usuarios afectados, sin poder reproducir el problema (siendo información sensible, se nos proporcionó sólo los datos estrictamente necesarios para procesar el gráfico).

  4. Los intentos de reproducir el problema han fallado con cada combinación de configuración / sabor, proguard habilitado / deshabilitado, zipalign sí / no, etc.

La aplicación se compila con Android Studio 1.5, con el último SDK, orientado a la API 23. Antes de establecer una API de destino más baja y lanzar una actualización inútil por enésima vez, me gustaría saber es alguien experimentado y resuelto problemas similares.

Cualquier consejo es bienvenido.

  • Desafortunadamente, Package Installer se ha detenido mientras solicitaba permiso en Marshmellow
  • El permiso de manifiesto no funciona en Android 6
  • Android M - comprobar el permiso de ejecución - cómo determinar si el usuario marcó "Nunca preguntar de nuevo"?
  • ¿Cómo cambiamos MTP más fácilmente en un dispositivo Debug-Enabled Android 6.0?
  • Problema de permiso de Android 6 (M) (el directorio de creación no funciona)
  • Ni el usuario 10102 ni el proceso actual tienen android.permission.READ_PHONE_STATE
  • Cambio de comportamiento de SimpleDateFormat en Android Marshmallow
  • Cómo dar permiso de superposición de pantalla en mi actividad
  • Androide: la cámara no se abre en el malvavisco
  • Android M: VoIP, JAINSIP, SipStack; Inconsistent SipProvider Excepción al crear un punto de escucha con tls habilitado
  • Android M está escuchando android.os.action.DEVICE_IDLE_MODE_CHANGED
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.