Javascript console.log() на устройствах HTC Android и adb logcat

Я разрабатываю приложение в HTML, которое вызывает console.log() из Javascript, чтобы предоставить мне журналы во время разработки о том, что происходит в коде веб-страницы.

К сожалению, когда я использую команду adb logcat для проверки журналов, я могу видеть вывод из всех других приложений, но не вывод из моего кода JavaScript. Я вижу даже журнал из веб-браузера, что страница загружена, но не console.log() вывод из моего кода JavaScript, выполняемого в веб-браузере.

Согласно информации эта страница (http://developer.android.com/guide/webapps/debugging.html), он должен работать.

Я тестирую HTC WildFire и HTC Desire HD.


Отредактировано более 6 месяцев

После некоторого времени и опыта работы с различными устройствами (телефоны, телевизоры, телевизионные приставки, WebViews, UIWebViews...) мой совет - сделать удаленную регистрацию из JavaScript и не полагаться на console.log() или другие методы - см. хороший трюк с загрузкой изображения здесь.

Не пропустите презентацию здесь Надеюсь это поможет! Стен

Ответ 1

В браузере по умолчанию на Android 2.3.3 (и предположительно с этого момента) вы можете просто использовать встроенную консоль javascript:

  • откройте браузер
  • перейдите на веб-страницу
  • введите about:debug в адресную строку и нажмите enter
  • вы увидите раздел для параметров отладки, если вы перейдете в настройки браузера.
  • отметьте "Показать консоль JavaScript", если она еще не включена.
  • обновите свою веб-страницу.

В верхней части вы увидите панель с надписью "Консоль JavaScript".

Ответ 2

Я использую три разных телефона HTC, почти исключительно, и у меня никогда не было этой проблемы. Вот несколько вещей, которые нужно проверить:

  • Убедитесь, что отладка USB включена.
  • Убедитесь, что в Webview установлен набор WebChromeClient. Браузер, используемый в Webview, не реализует console.log().
  • Должно быть легко увидеть результат работы adb logcat, но чтобы упростить его, отфильтруйте вывод.

Включить отладку USB:

  • Отключите устройство от компьютера.
  • Перейдите в Настройки → Приложения → Разработка → Выберите "Включить отладку USB"
  • Плагин для компьютера. (Убедитесь, что у вас установлены правильные драйверы для использования ADB - подробнее здесь: http://developer.android.com/guide/developing/device.html)

Установите WebChromeClient, который переопределяет onConsoleMessage():

//Set the output prefix so you can filter adb logcat results later
public static final String TAG = "Your-Application-Name";

myWebView = (WebView) findViewById(R.id.webview);

//Not going to have much luck running JS without this:
myWebView.getSettings().setJavaScriptEnabled(true);

//Override onConsoleMessage() to output to the Log.
myWebView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onConsoleMessage(ConsoleMessage cm) {
        Log.d(TAG, cm.message() + " -- From line "
        + cm.lineNumber() + " of "
        + cm.sourceId() );
        return true;
    }
});

Дополнительная информация о onConsoleMessage() здесь: http://developer.android.com/reference/android/webkit/WebChromeClient.html#onConsoleMessage(java.lang.String, int, java.lang.String)

Дополнительная информация об отладке в целом здесь: http://developer.android.com/guide/webapps/debugging.html

Отфильтровать вывод лог файла adb:

adb logcat tag-name:log-level *:S

tag-name соответствует строке, указанной в Log.x log-level соответствует уровню журнала, который вы указали при вызове Log.x < ---

Пример, связанный с приведенным выше кодом:

adb logcat Your-Application-Name:D *:S

Это покажет все журналы уровня d для соответствующего тега, Your-Application-Name и все молчание.

Подробнее о фильтрации adb здесь: http://developer.android.com/guide/developing/tools/adb.html#logcat

Надеюсь, это поможет! Я знаю, что это было немного обобщение других ответов, но, на самом деле, все шаги предпринимаются, чтобы заставить его работать.:)

Ответ 3

У меня была та же проблема, я решаю ее, выполняя следующие действия:

1/когда вы инициализируете свой веб-просмотр, добавьте класс моста javascript:

appView.addJavascriptInterface(new JSBridge(), "JSBridge");

2/создайте класс JSBridge с функцией журнала

class JSBridge {
  public void log(String msg){
   Log.d(msg);
  }
}

3/в вашем javascript вы теперь можете позвонить

JSBridge.log("my log message");

Возможно, это будет слишком сложно для вашей проблемы, но вы также можете сделать LOT больше с этим решением

Ответ 4

Logcat генерирует много вещей на устройствах в дополнение к вашим, поэтому вам может потребоваться отфильтровать это.

Вы можете попытаться "grep" сделать вывод журнала, если вы отметили его. Например: согласно вашей статье вывод должен выглядеть так:

Console: Hello World http://www.example.com/hello.html :82

Если вы используете команду (если вы используете Linux, Mac OS или что-то еще с командой grep)

adb logcat | grep -i "console"

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

[ctrl]+c

остановит этот процесс logcat.

Ответ 6

Попробуйте следующее:

1) Откройте вкладку "Устройства" и убедитесь, что выбранное вами устройство выделено/выделено.

2) Убедитесь, что на вашем устройстве включена USB-отладка. Вот что вам нужно сделать для этого:

2a) На главном экране нажмите MENU, а затем нажмите "Настройки" > "Приложения" > "Разработка".

2b) Убедитесь, что установлен флажок USB debugging.