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.