Cómo recopilar stacktrace nativo sin un permiso de lectura READ_LOGS desde el principio?

Tengo una aplicación que es en su mayoría código nativo escrito en C: Simon Tatham's Puzzles . Cuando captura un fallo (con un manejador de señal), un backtrace Java solo me dirá el área vaga del problema:

W System.err: at name.boyle.chris.sgtpuzzles.SGTPuzzles.resizeEvent(Native Method) W System.err: at name.boyle.chris.sgtpuzzles.SGTPuzzles$1.handleMessage(SGTPuzzles.java:126) W System.err: at android.os.Handler.dispatchMessage(Handler.java:99) 

Lo que necesito para tener alguna esperanza de diagnóstico es el backtrack nativo que el framework de Android escribe en el registro:

 I DEBUG : #02 pc 0003e8ae /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so I DEBUG : #03 pc 0003ed62 /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so I DEBUG : #04 pc 00059060 /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so 

Por lo que sé, los informes de fallos de Android Market no incluyen trazas nativas … ¿no?

Por lo tanto, actualmente tengo mi propio catcher de accidentes y reportero, descrito en esta pregunta anterior , que ofrecerá que lo deje en un correo electrónico componer ventana con su registro en él. Eso funciona bastante bien, con un problema: los usuarios no leen (o no creen) la explicación en la descripción del paquete y se asustan por la solicitud de permiso.

Solicitud de permiso para leer registros; Comentarios de los usuarios

No son estos pocos comentarios que me molestan, es el número desconocido de personas que huyeron sin siquiera instalarlo. Unesdoc.unesco.org

Entonces, ¿ cómo puedo obtener un backtrace nativo en un accidente sin hacer que el juego requiera un permiso de registro de miedo? Las soluciones posibles incluyen:

  • Estoy equivocado y Android Market realmente me dará trazas nativas en estos días?
  • ¿Recomendar cuando captura un accidente que la gente inmediatamente instalar y ejecutar Log Collector ? Esto es lo que estoy inclinando hacia actualmente. ¿Alguien tiene un buen ejemplo de ello, con un texto explicativo bien escrito?
  • Después de haber capturado el accidente con un manejador de señales (que puedo hacer), cualquier forma de leer mi propio stacktrace nativo? Más difícil en Android / Bionic que en las plataformas glibc, no hay backtrace() disponible. Editar: La mayoría de las cosas que aparecen aquí parecen ser necesarias: http://github.com/android/platform_system_core/tree/master/debuggerd – para incluir suficiente en el proyecto sería excesivo, hinchada, difícil, sin soporte, frágil en ABI Cambios / adiciones. No parece un buen uso del tiempo.

Edit: Desde Jelly Bean en adelante, ni usted ni Log Collector pueden leer la salida de debuggerd , porque READ_LOGS se fue . Unesdoc.unesco.org

Sin embargo, los informes de fallos de Play Console ahora incluyen rastros de pila nativos (al menos a finales de 2014), lo que hace que esto sea mucho menos necesario.

Previamente:

Daré mi respuesta en la forma de un compromiso git:

https://github.com/chrisboyle/sgtpuzzles/commit/e9917f1ffe93f9d9963463db849e3768beafccee

Esta es la delegación de Log Collector, como he sugerido anteriormente. Veo el bloqueo como antes (vea mi anterior explicación de cómo hacerlo ) muestra una pantalla "oops, I chocó" como antes, y si el usuario hace clic en Informe, entonces les pido que instalen Log Collector si aún no lo han hecho .

Si he enviado al usuario para instalarlo, tan pronto como finalice la instalación, atraparé el PACKAGE_ADDED Intent y lanzar Log Collector con las opciones apropiadas (advierto que voy a hacer esto). Esto es para que el usuario no se quede conjeturando que deben hacer clic en Abrir, que lo lanzaría sin mi destino, tema y filtros.

Los filtros valen la pena tener, ya que limitan lo que se envía en el correo electrónico a las líneas que podrían ser relevantes. Esto ahorra el ancho de banda del usuario y la capacidad de mi bandeja de entrada, y significa que el usuario puede comprobar más fácilmente que no hay nada sensible en el registro y, por tanto, es más probable que acepte enviarlo.

Hay otra forma de acceder a todos los registros sin ningún permiso especial, pero requiere habilitar la depuración remota en el teléfono. Echa un vistazo a la aplicación de código abierto de Logcat sin raíz .

  • sin permisos para samsung galaxy 2s
  • Protege y desprotege el archivo para evitar la eliminación accidental en Android mediante aplicaciones de limpieza con errores
  • Cómo obtener permisos de aplicaciones instaladas
  • StartBluetoothSco () lanza la excepción de seguridad (BROADCAST_STICKY) en ICS
  • Detección de la superposición de pantalla: cómo manejar esto en una aplicación de superposición de pantalla
  • Implicaciones de los permisos del paquete (Todos los desarrolladores de android invitados a contribuir)
  • HelloWebView Ejemplo: java.lang.SecurityException: Negación de permisos
  • ¿Es posible eliminar permisos de una aplicación de Android?
  • Definir un permiso para que aplicaciones de terceros se usen en Android
  • ¿Cómo obtener el icono de un permiso de Android?
  • ¿Cómo obtener la configuración del permiso de aplicación en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.