2012-04-23 31 views
8

¿Es posible establecer los niveles de registro en un dispositivo que no está rooteado? por lo que quiero cambiar el nivel de registro del dispositivo de alguna manera para "depurar". es esto algo que se puede hacer?Configuración de los niveles de registro de Android

ya que no está rooteado, no creo que setprop funcione. tampoco puedo cambiar el archivo local.prop ya que no tengo permisos para hacerlo.

aparte de tal vez tener suerte y encontrar un menú oculto que tenga los niveles de registro. ¿hay alguna forma de mejorar el nivel de registro de otra manera?

gracias por la ayuda.

+0

¿Qué "nivel de registro del dispositivo"? Y setprop no se limita a los teléfonos rooteados afaik (menos las propiedades de solo lectura) – zapl

+0

Lo que noto es que en los dispositivos no rooteados hay propiedades que faltan en las propiedades del sistema android o no se permite el uso de setprop para modificar esas propiedades . en otras palabras, el comando setprop funciona pero los cambios no se pegan. Por lo tanto, ¿hay alguna otra manera de establecer el nivel de registro en este dispositivo Android en particular? en definitiva, si un dispositivo Android normal tiene niveles de registro configurados para decir "información", ¿puedo cambiar esos niveles de registro para decir "depurar"? –

Respuesta

12

setprop:

  • es temporal hasta que se reinicie el dispositivo, incluso en teléfonos libres.
  • puede mantener las propiedades a través de reinicios si las escribe en local.prop, lo que solo es posible en teléfonos rooteados.
  • algunas propiedades son de solo lectura y solo se pueden cambiar si cambia algunos archivos de inicio. Eso podría ser incluso imposible en teléfonos rooteados.
  • cada dispositivo (o firmware) puede tener un conjunto diferente de propiedades. Un teléfono rooteado no tendría automáticamente más.

Loglevels:

  • Si el código que imprime el registro dice Log.d() entonces será el nivel de "depuración" y no se puede cambiar a menos que cambie el código y recompilarlo. No hay nada que oculte los mensajes de registro si ejecuta un Log.? independientemente del nivel.
  • Android Framework oculta algunos mensajes de registro si tiene una compilación de lanzamiento de su firmware. Para mostrar los que necesita para recompilar su firmware como compilación de depuración. No hay posibilidad de que los muestren en un teléfono rooteado tampoco.
  • algunos mensajes están controlados por una variable local en el código como if (LOCAL_LOGV) Log.v(... - necesita cambiar el código aquí para verlos también.
  • algunos mensajes están controlados por Config.LOGV (= siempre false) ver Config. No hay manera de cambiar el comportamiento roto aquí tampoco. Necesitas recompilar
  • algunos otros AnotarMensajes están ocultos hasta que habilite una propiedad:

ejemplo

public static final boolean DEBUG_SQL_CACHE = 
Log.isLoggable("SQLiteCompiledSql", Log.VERBOSE); 

// somewhere in code 
if (SQLiteDebug.DEBUG_SQL_CACHE) { 
    Log.d(TAG, "secret message!"); 
} 

si lo hace adb shell setprop log.tag.SQLiteCompiledSql VERBOSE debería ver esos mensajes apareciendo. Log#isLoggable()

No existe un nivel log global que conozca.

+0

en primer lugar, gracias por el 411. Realmente lo aprecio. Supongo que hay una forma de averiguar en qué está configurado el nivel de registro. para una aplicación particular en el dispositivo, por ejemplo, lo que utiliza el fabricante para llamar al menú de la interfaz de usuario. ¿Entonces usa setprop en esa llamada de menú de UI para configurarlo en verbose? finalmente usando logcat para ver todas las condiciones de error para ese menú de interfaz de usuario en particular? –

+0

Si tiene acceso al código fuente de la aplicación (o el apk + a [descompilador] (http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode)), entonces puede verificar si hay es el registro que se puede habilitar, por ejemplo a través de 'setprop'. Incluso podría intentar editar el código fuente con [apktool] (http://code.google.com/p/dex2jar/wiki/ModifyApkWithDexTool) y agregar algún registro usted mismo. O puede usar DDMS (puede que necesite hacer que la aplicación [depurable] (http://developer.android.com/guide/topics/manifest/application-element.html#debug) con apktool). Pero no hay un enfoque general para habilitar el registro – zapl

+0

, incluso si pude hacer eso, no pude obtener esa aplicación en el dispositivo ya que no está enraizada. Sé que en los casos venideros los fabricantes dejan los niveles de registro de depuración en su dispositivo para solucionar problemas de pruebas de campo de red y supongo que como utilizan log.d por todas partes cuando habilitan el registro, este nivel de depuración está habilitado. Supongo que no tendré suerte en términos de verificar el estado para ver qué nivel de registros están disponibles, a menos que vaya a cada apk como dijiste y lo revise individualmente, lo que sería muy difícil. –

2

Permítanme sugerir una pequeña reemplazo para la clase de registro estándar (yo soy el autor)

https://github.com/zserge/log

Es compatible hacia atrás, por lo que sólo necesita modificar sus importaciones.A continuación, puede establecer el nivel de registro mínimo para su aplicación a través de Log.level(Log.D) o Log.level(Log.W) etc., o puede desactivar los registros usando Log.useLog(false). No es necesario modificar su código de registro existente.

A pesar de su pequeño tamaño, este registrador funciona tanto con JVM como con Android, le permite omitir el parámetro "etiqueta", simplifica el registro de múltiples valores separados por comas o usando una cadena de formato. Por lo tanto, es muy conveniente, fácil de migrar y solo agrega ~ 4 kilobytes al tamaño de su APK.

Cuestiones relacionadas