2012-04-23 4 views
8

Возможно ли установить уровни журнала на устройстве, которое не внедрено? , поэтому я хочу как-то изменить уровень журнала устройства на «debug». это что-то, что можно сделать?Настройка уровней журнала Android

С тех пор, как он не укоренился, я не думаю, что setprop будет работать. Я также не могу изменить файл local.prop, так как у меня нет прав на это.

кроме, может быть, повезет и найдет скрытое меню, в котором есть уровни журнала. Есть ли способ улучшить уровень журнала другим способом?

благодарит за помощь.

+0

Что такое «уровень журнала устройства»? И setprop не ограничивается корневыми телефонами afaik (минус свойства, доступные только для чтения) – zapl

+0

Что я замечаю на неуправляемых устройствах, есть свойства, которые либо отсутствуют в свойствах системы Android, либо один не разрешен использовать setprop для изменения этих свойств , другими словами, команда setprop работает, но изменения не помещаются. Таким образом, есть ли другой способ установить уровень журнала на этом конкретном устройстве Android? в целом, если у обычного Android-устройства есть уровни журналов, чтобы сказать «информация», я могу изменить эти уровни журналов, чтобы сказать «debug»? –

ответ

12

setprop:

  • временно до перезагрузки устройства, даже на укорененных телефонах.
  • вы можете сохранить свойства через перезагрузки, если вы напишете их в local.prop, что возможно только на корневых телефонах.
  • Некоторые свойства доступны только для чтения и могут быть изменены только при изменении некоторых файлов init. Это может быть даже невозможно на корневых телефонах.
  • каждое устройство (или прошивка) может иметь другой набор свойств. У корневого телефона больше не будет автоматически.

уровнях протоколирования:

  • Если код, который печатает журнал говорит Log.d(), то это будет на уровне «отладки» и вы не можете изменить, что если не изменить код и перекомпилировать его. Нет ничего, что скрывает сообщения журнала, если вы выполняете Log.? независимо от уровня.
  • фреймворк Android скрывает некоторые сообщения журнала, если у вас есть сводная версия прошивки. Чтобы показать их, вы должны перекомпилировать свою прошивку как сборку отладки. Нет шансов получить их, чтобы показать их на корневом телефоне.
  • некоторые сообщения контролируются локальной переменной в коде, например if (LOCAL_LOGV) Log.v(.... Вам нужно также изменить код, чтобы увидеть их.
  • некоторые сообщения регулируются по Config.LOGV (= всегда false) см. Config. Здесь нет способа изменить нарушенное поведение. Вам нужно перекомпилировать.
  • некоторые другие logmessages скрыты, пока вы не включите свойство:

пример

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!"); 
} 

если вы adb shell setprop log.tag.SQLiteCompiledSql VERBOSE вы должны увидеть эти сообщения появляются. Log#isLoggable()

Нет глобального глобального уровня, о котором я знаю.

+0

Прежде всего спасибо за 411. Я очень ценю это. Я думаю, есть ли способ узнать, на каком уровне журнала установлен? для конкретного приложения на устройстве, например того, что производитель использует для вызова меню пользовательского интерфейса. Затем используйте setprop в этом вызове меню пользовательского интерфейса, чтобы задать его подробный? наконец, используя logcat, чтобы увидеть все условия ошибки для этого конкретного меню пользовательского интерфейса? –

+0

Если у вас есть доступ к исходному коду приложения (или apk + a [decompiler] (http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode)), то вы можете проверить, есть ли это регистрация, которая может быть включена, например через 'setprop'. Вы даже можете попытаться отредактировать исходный код с помощью [apktool] (http://code.google.com/p/dex2jar/wiki/ModifyApkWithDexTool) и добавить некоторые записи самостоятельно. Или вы можете использовать DDMS (вам может понадобиться сделать приложение [debuggable] (http://developer.android.com/guide/topics/manifest/application-element.html#debug) с помощью apktool). Но нет общего подхода для включения журнала – zapl

+0

, даже если бы я смог сделать это, я не смог получить это приложение в устройстве, так как оно не было внедрено. я знаю, что производители приложений оставляют уровни отладочного журнала на своем устройстве для устранения проблем с сетевым полевым тестированием, и я предполагаю, что, поскольку они используют log.d повсюду, когда они включают ведение журнала, это только этот уровень отладки, который включен. я думаю, мне было бы не повезло с точки зрения даже проверки состояния, чтобы узнать, какой уровень журналов будет доступен, если я не пойду в каждый apk, как вы сказали, и не проверите его индивидуально, что сильно сосать. –

2

Позволь мне предложить крошечную замену стандартного класса журнала (я автор)

https://github.com/zserge/log

Это обратная совместимость, так что вам нужно только изменить параметры импорта.Затем вы можете установить минимальный уровень журнала для своего приложения через Log.level(Log.D) или Log.level(Log.W) и т. Д., Или вы можете отключить журналы, используя Log.useLog(false). Не нужно изменять существующий код ведения журнала.

Несмотря на небольшие размеры, этот регистратор работает как с JVM, так и с Android, позволяет пропустить параметр «тег», упрощает ведение журнала нескольких значений, разделенных запятыми или используя строку формата. Таким образом, это действительно удобно, легко переносится и добавляет ~ 4 килобайта к вашему размеру APK.

Смежные вопросы