Протоколирование начала и завершения HTTP-запроса из встроенного Android WebView

Я ищу способ зарегистрировать запросы и время начала / окончания, сделанное встроенным webview. Я не могу найти способ сделать это до сих пор, кроме укоренения телефона и запуска tcpdump. Это работает для меня, но мне нужно запустить это в поле, так что это не реально. Существует много способов регистрации URL-адреса и времени начала, но я не вижу конца (или, бонуса, метаданных полного ответа).

ShouldLoadResource мог бы работать, если бы я мог обернуть текущий запрос, но я должен сам его получить с поддержкой HTTP, чтобы вернуть его в массовом порядке, потому что API недостаточно, чтобы полностью переходить к внутреннему запросу. (Я не хочу делать это по ряду причин, в том числе, что веб-просмотр на устройствах не использует тот же сетевой стек, что и классы HTTP, и потому, что он изменит время субресурсов.)

Я пытался найти способы включения флагов отладки chromium_net для этого, но я не могу понять, как это сделать в контексте свойств WebView или системы.

Я бы предпочел не отправлять свой собственный веб-сайт, чтобы сделать это, но если потребности должны …

Метод override shouldInterceptRequest()

 @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { Log.d(LOG_TAG, "shouldInterceptRequest: " + url); return super.shouldInterceptRequest(view, url); } 

В этом случае вы также можете добавить WebViewClient (см. http://developer.android.com/reference/android/webkit/WebViewClient.html). Что бы выглядело примерно так

 WebView webView.setWebViewClient(new MyWebViewClient()); . . . public class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // Note time // Return false to say we want the WebView to handle the url. return false; } @Override public void onPageFinished (WebView view, String url) { super.onPageFinished(view, url); // Note time } } 

Обратите внимание, что оба значения должны выполняться только для основного фрейма: они не будут вызываться для iframes или framesets. Но это должно дать вам то, что вам нужно.