2012-04-13 8 views
7

Sto sviluppando un'applicazione Android che utilizza un jar di terze parti. Voglio monitorare e possibilmente modificare le richieste HTTP emesse da quella libreria. In iOS, posso farlo registrando una classe personalizzata NSURLProtocol in grado di ispezionare e manipolare le richieste di rete che si verificano nel processo dell'applicazione.Qual è l'equivalente di Android per NSURLProtocol dall'SDK iOS?

C'è qualcosa di simile per Android? Lo ammetto, sono nuovo nello sviluppo di Android, ma non sono riuscito a trovare una soluzione funzionante a questo problema.

Non ho il codice sorgente per questo jar e non posso fare affidamento sulla sua decompilazione.

Un paio di cose che ho esplorato:

  • Android ContentProvider. Non funziona, poiché la soluzione deve supportare richieste "http: //", non "content: //".
  • Creazione di una classe personalizzata org.apache.http.impl.client.DefaultHTTPClient. (Questa è la classe di rete sottostante utilizzata per le richieste che desidero.) Sembra che questo non funzioni, poiché Android ha memorizzato nella cache la versione di sistema di questa classe e carica sempre quella invece della mia, anche se è impostata più in alto nell'ordine di caricamento.

Ho guardato oltre la libreria HTTP Apache abbastanza bene, e anche se ha tutti i tipi di cose come HttpRequestInterceptor, HttpResponseInterceptor classi, che non fa di me molto bene, dal momento che la libreria creata un'istanza di DefaultHTTPClient e cessionari a un membro privato all'interno di un metodo privato a cui non ho accesso.

Il mio obiettivo finale qui è quello di monitorare e modificare queste richieste per scopi di test unitari. Non voglio che vengano emesse le vere richieste; Voglio fornire una risposta finta.

risposta

2

Sei sfortunatamente sfortunato: non esiste un framework di intercettazione su tutto l'app di quel tipo disponibile per le app Android.

Il mio suggerimento sarebbe quello di configurare un proxy che intercetta le richieste e fornisce la vostra risposta finta.