Что такое Android-эквивалент NSURLProtocol из iOS SDK?

Я разрабатываю приложение для Android, в котором используется сторонний jar-файл. Я хочу отслеживать и, возможно, изменять HTTP-запросы, выдаваемые этой библиотекой. Под iOS я могу сделать это, зарегистрировав пользовательский класс NSURLProtocol, который может проверять и управлять любыми сетевыми запросами, которые происходят в процессе приложения.

Есть ли что-нибудь подобное для Android? Признаюсь, я новичок в разработке Android, но не смог найти работающее решение этой проблемы.

У меня нет исходного кода для этого jar-файла, и я не могу полагаться на его декомпиляцию.

Несколько вещей, которые я изучил:

  • Android ContentProvider. Не будет работать, так как решение должно поддерживать запросы "http://", а не "content://".
  • Создание пользовательского класса org.apache.http.impl.client.DefaultHTTPClient. (Это базовый сетевой класс, используемый для запросов, которые я ищу.) Похоже, это не сработает, поскольку Android кэширует системную версию этого класса и всегда загружает ее вместо моей, даже если она установить выше в порядке загрузки.

Я достаточно хорошо изучил HTTP-библиотеку Apache, и хотя в ней есть множество вещей, таких как классы HttpRequestInterceptor, HttpResponseInterceptor, это не приносит мне особой пользы, поскольку библиотека создает экземпляр DefaultHTTPClientи назначает его частному члену в частном методе, к которому у меня нет доступа.

Моя конечная цель здесь — отслеживать и изменять эти запросы для целей модульного тестирования. Я не хочу, чтобы выдавались настоящие запросы; Я хочу предоставить фиктивный ответ.

8
задан Brad Choate 13 April 2012 в 22:07
поделиться