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:
- android internet no funciona
- Aplicación de filtros de Android Market - ¿Telefonía?
- XML Lista de permisos de Android completa
- Android M permiso de la prueba READ_PHONE_STATE (permisos peligrosos)
- Permiso personalizado para la aplicación
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.
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.
- Cómo compilar la aplicación de Android con permisos del sistema
- De android - CHANGE_COMPONENT_ENABLED_STATE
- ¿Cómo inhabilitar a Google para solicitar permiso para revisar regularmente las aplicaciones instaladas en mi teléfono?
- ¿Hay alguna herramienta para proteger una aplicación de malware aún más que los permisos otorgados en Android?
- Android - ¿Cómo puedo guardar un archivo legible por otra aplicación?
- ¿Puedo activar el modo de desarrollo para un usuario que no sea el propietario en una tableta Android?
- Android permission.INTERACT_ACROSS_USERS_FULL
- Android: adb: copia el archivo a / system (Permiso denegado)
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 .
- Subir una foto tomada por la cámara a un servidor con tamaño limitado
- Vista superficial + glsurfaceview + framelayout