Participe do evento ⁠#Android11: apresentação de lançamento da versão Beta no dia 3 de junho.

Como depurar apps da Web

Se estiver testando seu app da Web com um dispositivo com Android 4.4 ou versões posteriores, você poderá depurar remotamente suas páginas da Web na WebView com as Ferramentas para Desenvolvedores do Chrome, sem perder a compatibilidade com versões anteriores do Android. Para saber mais, consulte Depuração remota no Android.

Se não tiver um dispositivo com o Android 4.4 ou versão posterior, você poderá depurar o JavaScript usando as APIsconsole JavaScript e ver as mensagens de saída no logcat. Se você já conhece a depuração de páginas da Web com o Firebug ou o Web Inspector, provavelmente você sabe como usar o console (como console.log()). O framework WebKit do Android é compatível basicamente com as mesmas APIs. Assim, você pode receber registros da sua página da Web ao depurar no navegador do Android ou na sua própria WebView. Este documento descreve como usar as APIs Console para depuração.

Confira os seguintes recursos relacionados:

Como usar APIs Console no navegador do Android

Quando você chama uma função console (no objeto window.console do DOM), a saída aparece no logcat. Por exemplo, se a página da Web executar o seguinte JavaScript:

    console.log("Hello World");
    

A mensagem do logcat terá esta aparência:

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

O formato da mensagem pode ser diferente, dependendo da versão do Android que você está usando. No Android 2.1 e versões posteriores, as mensagens do console no navegador do Android são marcadas com o nome "navegador". No Android 1.6 e versões posteriores, as mensagens do navegador do Android são marcadas com o nome “WebCore”.

O WebKit do Android não implementa todas as APIs Console disponíveis em outros navegadores para computador. No entanto, você pode usar as funções básicas de registro de texto:

  • console.log(String)
  • console.info(String)
  • console.warn(String)
  • console.error(String)

Outras funções do console não geram erros, mas podem não se comportar da mesma forma que você espera de outros navegadores da Web.

Como usar APIs Console na WebView

Todas as APIs Console mostradas acima também são compatíveis durante a depuração em WebView. Se você estiver desenvolvendo para o Android 2.1 (API de nível 7) ou versões posteriores, você precisará fornecer um WebChromeClient que implemente o método onConsoleMessage() para que as mensagens do console apareçam no logcat. Em seguida, aplique WebChromeClient à WebView com o setWebChromeClient().

Por exemplo, para oferecer compatibilidade com a API de nível 7, seu código para onConsoleMessage(String, int, String) pode ter esta aparência:

Kotlin

    val myWebView: WebView = findViewById(R.id.webview)
    myWebView.webChromeClient = object : WebChromeClient() {

        override fun onConsoleMessage(message: String, lineNumber: Int, sourceID: String) {
            Log.d("MyApplication", "$message -- From line $lineNumber of $sourceID")
        }
    }
    

Java

    WebView myWebView = (WebView) findViewById(R.id.webview);
    myWebView.setWebChromeClient(new WebChromeClient() {
      public void onConsoleMessage(String message, int lineNumber, String sourceID) {
        Log.d("MyApplication", message + " -- From line "
                             + lineNumber + " of "
                             + sourceID);
      }
    });
    

No entanto, se a versão mais antiga compatível for a API de nível 8 ou posterior, implemente onConsoleMessage(ConsoleMessage). Exemplo:

Kotlin

    val myWebView: WebView = findViewById(R.id.webview)
    myWebView.webChromeClient = object : WebChromeClient() {

        override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean {
            consoleMessage?.apply {
                Log.d("MyApplication", "${message()} -- From line ${lineNumber()} of ${sourceId()}")
            }
            return true
        }
    }
    

Java

    WebView myWebView = (WebView) findViewById(R.id.webview);
    myWebView.setWebChromeClient(new WebChromeClient() {
      public boolean onConsoleMessage(ConsoleMessage cm) {
        Log.d("MyApplication", cm.message() + " -- From line "
                             + cm.lineNumber() + " of "
                             + cm.sourceId() );
        return true;
      }
    });
    

A ConsoleMessage também inclui um objeto MessageLevel para indicar o tipo de mensagem do console que está sendo entregue. Você pode consultar o nível da mensagem com messageLevel() para determinar a gravidade dela. Depois disso, use o método Log apropriado ou tome outras medidas adequadas.

Se você estiver usando onConsoleMessage(String, int, String) ou onConsoleMessage(ConsoleMessage) quando executar um método de console na sua página da Web, o Android chamará o método onConsoleMessage() adequado para que você informe o erro. Com o código acima, por exemplo, será impressa uma mensagem de logcat parecida com esta:

    Hello World -- From line 82 of http://www.example.com/hello.html
    

Logcat

O logcat é uma ferramenta que despeja um registro de mensagens do sistema. As mensagens incluem um stack trace quando o dispositivo gera um erro, assim como mensagens de registro escritas por meio do aplicativo e as mensagens escritas usando APIs console do JavaScript.

Para executar o logcat e ver as mensagens no Android Studio, selecione View > Tool Windows > Logcat.

Para saber mais, consulte Gravar e visualizar registros com o Logcat.