2014-04-19 7 views
13

In Android Kitkat, URLConnection-Implementierung wurde von OkHttp ersetzt, Wie kann es debuggen?Wie Debuggen "com.android.okhttp"

Die OkHttp in diesem Verzeichnis ist: external/okhttp/android/main/java/com/squareup/okhttp

Wenn ich rufen Sie die UrlInstance.openConnection().getClass().getName(), es vorhanden com.android.okhttp.internal.http.HttpURLConnectionImpl

Wie kann ich debuggen die es? Es scheint, dass ich nicht die /android/main/java/com/squareup/okhttp/* zum com.android.okhttp.*

zuordnen können, wenn der Code excute zum return streamHandler.openConnection(this);

/** 
* Returns a new connection to the resource referred to by this URL. 
* 
* @throws IOException if an error occurs while opening the connection. 
*/ 
public URLConnection openConnection() throws IOException { 
    return streamHandler.openConnection(this); 
} 

Go vorwärts weiter, kann aber in den nicht graben com.squareup.okhttp.HttpHandler#openConnection

The hervorgehoben Thread Debugger im Bild unten ist grau.

package com.squareup.okhttp; 

import java.io.IOException; 
import java.net.Proxy; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.URLStreamHandler; 

public class HttpHandler extends URLStreamHandler { 
    @Override protected URLConnection openConnection(URL url) throws IOException { 
     return newOkHttpClient(null /* proxy */).open(url); 
    } 

    @Override protected URLConnection openConnection(URL url, Proxy proxy) throws IOException { 
     if (url == null || proxy == null) { 
      throw new IllegalArgumentException("url == null || proxy == null"); 
     } 
     return newOkHttpClient(proxy).open(url); 
    } 

    @Override protected int getDefaultPort() { 
     return 80; 
    } 

    protected OkHttpClient newOkHttpClient(Proxy proxy) { 
     OkHttpClient client = new OkHttpClient(); 
     client.setFollowProtocolRedirects(false); 
     if (proxy != null) { 
      client.setProxy(proxy); 
     } 

     return client; 
    } 
} 

enter image description here

+0

Was möchten Sie genau machen? – eleven

+0

@ Foxinsocks die OkHttp ist in AOSP-Quellen 'external/okhttp/android/main/java/com/quadrat/okhttp', aber die Laufzeitklasse ist' com.android.okhttp.internal.http.HttpURLConnectionImpl'. Ich möchte den Code Schritt für Schritt folgen, aber jetzt kann ich – log1000

+0

@Foxinsocks ich möchte die Codeausführung folgen. Aber, ich weiß nicht, wie man die OkHttp Quellen zu 'com.android.okhttp' verbindet – log1000

Antwort

2

Es ab Version 0.8.x die Option ab von Android Studio scheint spezifische Quellen im Android SDK befestigen entfernt wurde (Kommentare, lesen Sie hier https://plus.google.com/+CyrilMottier/posts/GNcGL6xVth1).

Ich denke, wenn Sie debuggen möchten, könnten Sie eine ältere Version oder Android Studio versuchen, oder (und ich würde mit dieser Lösung gehen) einen Teil Ihrer Anwendung in Eclipse (Android SDK Version) exportieren, vielleicht nur die Teil der problematischen Verbindung, und da Sie Quellen für eine Klasse, die keine Quellen während des Debuggen sehr leicht anhängen können, sollten Sie eine Seite mit nur den Signaturen der Methoden in der Quellcodeansicht sehen, mit der Schaltfläche "Quelle anhängen "

http://4.bp.blogspot.com/-a2EnbC4wP6g/UN2Z7QzFlyI/AAAAAAAAAg0/D2tFh6AgRrM/s1600/Eclipse_String_Class_File.PNG