Google http client android

Google HTTP Client for Java

If you are developing for Android and the Google API you want to use is included in the Google Play Services library, use that library for the best performance and experience. If the Google API you want to use with Android is not part of the Google Play Services library, you can use the Google HTTP Client Library for Java, which supports Android 1.5 (or higher), and which is described here.

Android support for the Google HTTP Client Library for Java is @Beta .

Installation

Follow the download instructions on the setup page, and pay special attention to the Android instructions for ProGuard. Using ProGuard or a similar tool to remove unused code and compress it is critical for minimizing application size. For example, for the tasks-android-sample, ProGuard reduces the application size

88%, from 777KB to 93KB.

Note that ProGuard only runs when preparing your application for release; it does not run when preparing it for debugging, to make it easier to develop. However, be sure to test your application in release mode, because if ProGuard is misconfigured it can cause problems that are sometimes a challenge to debug.

Warning: For Android, you MUST place the jar files in a directory named “libs” so that the APK packager can find them. Otherwise, you will get a NoClassDefFoundError error at runtime.

Data models

You have a choice of three pluggable streaming JSON libraries. Options include JacksonFactory for maximum efficiency, or AndroidJsonFactory for the smallest application size on Honeycomb (SDK 3.0) or higher.

XML ( @Beta )

The XML data model ( @Beta ) is optimized for efficient memory usage that minimizes parsing and serialization time. Only the fields you need are actually parsed when processing an XML response.

Android already has an efficient, native, built-in XML full parser implementation, so no separate library is needed or advised.

Authentication

The best practice on Android (since the 2.1 SDK) is to use the AccountManager class (@Beta) for centralized identity management and credential token storage. We recommend against using your own solution for storing user identities and credentials.

For details about using the AccountManager with the HTTP service that you need, read the documentation for that service.

HTTP transport

If your application is targeted at Android 2.3 (Gingerbread) or higher, use the NetHttpTransport class. This class isbased on HttpURLConnection , which is built into the Android SDK and is found in all Java SDKs.

In prior Android SDKs, however, the implementation of HttpURLConnection was buggy, and the Apache HTTP client was preferred. For those SDKs, use the ApacheHttpTransport class.

If your Android application needs to work with all Android SDKs, call AndroidHttp.newCompatibleTransport() (@Beta), and it will decide which of the two HTTP transport classes to use, based on the Android SDK level.

Logging

To enable logging of HTTP requests and responses, including URL, headers, and content:

When you use Level.CONFIG , the value of the Authorization header is not shown. To show the Authorization header, use Level.ALL .

Читайте также:  Delphi xe5 and android

Furthermore, you must enable logging on your device as follows:

Источник

Какую библиотеку работы с HTTP в Android выбрать?

Представляю вашему вниманию перевод статьи «Which Android HTTP library to use?».

Для чего это вообще?

Немного истории

До Froyo HttpURLConnection имел некоторые не очень приятные баги. В частности, вызов close() у читаемого InputStream мог испортить пул соединений.

… большой размер их API мешает нам улучшать эту библиотеку без потери обратной совместимости. Команда Android не работает активно над Apache HTTP Client.

Apache HTTP client имеет мало багов на Eclair и Froyo, поэтому он является лучшим выбором для этих версий. А для Gingerbread и младше лучше подходит HttpURLConnection. Простота API и небольшой вес хорошо подходят для Android. Прозрачное сжатие и кэширование ответов помогают увеличить скорость и сохранить батарею. Новые приложения должны использовать HttpURLConnection.

Даже сегодня, если вы загляните в исходники Volley от Google (о ней я расскажу чуть попозже), вы сможете найти такое наследие:

Это классический пример фрагментации Android, которая заставляет страдать разработчиков. В 2013 году Square обратила внимание на эту проблему, когда выпускала OkHttp. OkHttp была создана для прямой работы с верхним уровнем сокетов Java, при этом не используя какие-либо дополнительные зависимости. Она поставляется в виде JAR-файла, так что разработчики могут использовать ее на любых устройствах с JVM (куда мы включаем, конечно, и Android). Для упрощения перехода на их библиотеку, Square имплементировали OkHttp используя интерфейсы HttpUrlConnection и Apache client.

OkHttp получила большое распространение и поддержку сообществом, и, в конце-концов, Google решили использовать версию 1.5 в Android 4.4 (KitKat). В июле 2015 Google официально признала AndroidHttpClient, основанный на Apache, устаревшим, вместе с выходом Android 5.1 (Lolipop).

Сегодня OkHttp поставляется со следующим огромным набором функций:

  1. Поддержка HTTP/2 и SPDY позволяет всем запросам, идущим к одному хосту, делиться сокетом
  2. Объединение запросов уменьшает время ожидания (если SPDY не доступен)
  3. Прозрачный GZIP позволяет уменьшить вес загружаемой информации
  4. Кэширование ответов позволяет избежать работу с сетью при повторных запросах.
  5. Поддержка как и синхронизированных блокирующих вызовов, так и асинхронных вызовов с обратным вызовом (callback)

Моя самая любимая часть OkHttp – как красиво и аккуратно можно работать с асинхронными запросами:

Это очень удобно, так как работа с сетью не должна быть в UI потоке. По-факту, начиная с Android 3.0 (Honeycomb, API 11), работа с сетью в отдельном потоке стала обязательной. Для того, чтобы воплотить что-то похожее с HtttpUrlConnection, вам потребуется построить большую (а может и монструозную) конструкцию с использованием AsyncTask или отдельного потока. Это будет еще более сложным, если вы захотите добавить отмену загрузки, объединение соединений и т.п.

Кстати, не осталась у обочины и HTTP библиотека от Google под названием Volley, которая предоставляет нам следующие бонусы:

  1. Автоматическое планирование сетевых запросов
  2. Множество параллельных сетевых соединений
  3. Прозрачное кэширование в памяти и на диске, в соответствии со стандартной кэш-согласованностью.
  4. Поддержка приоритизации запросов.
  5. Отмена API запросов. Вы можете отменить как один запрос, так и целый блок.
  6. Простота настройки, например, для повторов и отсрочек.
  7. Строгая очередность, которая делает легким корректное заполнение данными, полученными асинхронно из сети, интерфейса пользователя.
  8. Инструменты отладки и трассировки

Все, что ни есть в Volley, находится на вершине HttpUrlConnection. Если вы хотите получить JSON или изображение, то Volley имеет на это специальный абстракции, такие как ImageRequest и JsonObjectRequest, которые помогают вам в автоматическом режиме конвертировать полезную нагрузку HTTP. Так же достойно внимания то, что Volley использует жестко запрограммированный размер сетевого пула:

Читайте также:  Запрет фоновых процессов андроид

Когда OkHttp использует поток для каждого вызова с ThreadPoolExecutor с максимальным значением Integer.MAX_VALUE:

В результате, в большинстве случаев OkHttp будет действовать быстрее за счет использования бОльшего количества потоков. Если по каким-то причинам вы захотите использовать OkHttp вместе Volley, то есть реализация HttpStack, которая использует API запросов/ответов из OkHttp заместо HttpURLConnection.

HTTP клиенты продолжили развиваться для поддержки приложений с большим количеством картинок, особенно тех, кто поддерживает бесконечную прокрутку и трансформацию изображений. В то же время, REST API стал стандартом в индустрии, и каждый разработчик имел дело с такими типовыми задачами как сериализация в/из JSON и преобразование REST-вызовов в интерфейсы Java. Не прошло много времени, как появились библиотеки, решающие эти задачи:

  1. Retrofit – типобезопасный HTTP Android клиент для взаимодействия с REST-интерфейсами
  2. Picasso – мощная библиотека для загрузки и кэширования изображений под Android

Retrofit предоставляет некий мост между Java кодом и REST-интерфейсом. Он позволяет быстро включить в ваш проект HTTP API интерфейсы, и генерирует самодокументирующуюся реализацию.

В дополнение ко всему, Retrofit поддерживает конвертацию в JSON, XML, протокол буферов (protocol buffers).

Picasso, с другой стороны, предоставляет HTTP библиотеку, ориентированную на работу с изображениями. Например, вы можете загрузить изображение в свой View с помощью одной строчки:

Picasso и Retrofi настроены так, чтобы использовать OkHttpClient как стандартный HTTP клиент. Однако, если хотите, вы можете указать клиентом HttpURLConnection.

Glide – что-то похожее на Picasso. Он предоставляет некоторые дополнительные функции, такие как GIF-анимация, генерация миниатюрных эскизов изображения и неподвижные видео. Полное сравнение можно найти здесь.

Facebook недавно открыли общественности исходный код библиотеки Fresco, которую они используют в своем мобильном приложении. Одна из ключевых функций, которая выделяет ее, — кастомная стратегия выделения памяти для bitmap’ов, чтобы избежать работы долгого GC (сборщик мусора). Fresco выделяет память в регионе, который называется ashmem. Используются некие трюки, чтобы иметь доступ к этому региону памяти доступ как из части, написанной на C++, так и из части на Java. Чтобы уменьшить потребление CPU и данных из сети, эта библиотека использует 3 уровня кэша: 2 в ОЗУ, третий во внутреннем хранилище.

Я нашел необходимым показать отношения между библиотеками на одной схеме. Как вы можете увидеть, HTTP всегда остается внизу у высокоуровневых библиотек. Вы можете выбирать между простым HttpUrlConnection или последним OkHttpClient. Мы используем эту совместимость при разработке PacketZoom Android SDK, о котором мы поговорим в следующем посте.

Недавно мы сравнивали между собой HTTP библиотеки по производительности, но эта тема заслужила отдельного рассмотрения. Мы надеемся, что этот обзор дал вам основные идеи о плюсах и минусах каждой библиотеки, и мы помогли вам сделать правильный выбор. Следите за выходом более интересных постов о сетевой работе в Android от нас.

Источник

Setup Instructions

If you are not using a generated library, you can download the Google API Client Library for Java and its dependencies in a zip file, or you can use Maven.

Also see the ProGuard setup instructions that are part of the Google HTTP Client Library for Java documentation.

Download the library with dependencies

Download the latest zip file, which you can find on the downloads page, and extract it on your computer. This zip file contains the client library class jar files and the associated source jar files for each artifact and its dependencies. You can find dependency graphs and licenses for the different libraries in the dependencies folder. For more details about the contents of the download, see the readme.html file.

Читайте также:  Top android studio apps

Android

If you are developing for Android, and the Google API you want to use is included in the Google Play Services library, use the Google Play Services library for the best performance and experience.

If you are using the Google API Client Library for Java with Android, it is important to know which dependencies are compatible with Android, specifically which Android SDK level. Android applications require the following jar files, or newer compatible versions, from the libs folder:

Google App Engine

Google App Engine applications require the following jar files, or newer compatible versions, from the libs folder:

  • google-api-client-1.32.1.jar
  • google-api-client-appengine-1.32.1.jar
  • google-api-client-servlet-1.32.1.jar
  • google-oauth-client-1.31.5.jar
  • google-oauth-client-appengine-1.31.5.jar
  • google-oauth-client-servlet-1.31.5.jar
  • google-http-client-1.39.2.jar
  • google-http-client-appengine-1.39.2.jar
  • gson-2.8.7.jar
  • jackson-core-2.12.4.jar
  • jdo2-api-2.3-eb.jar
  • jsr305-3.0.2.jar
  • protobuf-java-3.17.2.jar
  • transaction-api-1.1.jar
  • xpp3-1.1.4c.jar

Servlet

Servlet applications require the following jar files, or newer compatible versions, from the libs folder:

  • google-api-client-1.32.1.jar
  • google-api-client-servlet-1.32.1.jar
  • google-oauth-client-1.31.5.jar
  • google-oauth-client-servlet-1.31.5.jar
  • google-http-client-1.39.2.jar
  • commons-logging-1.2.jar
  • gson-2.8.7.jar
  • httpclient-4.5.13.jar
  • httpcore-4.4.12.jar
  • jackson-core-2.12.4.jar
  • jdo2-api-2.3-eb.jar
  • jsr305-3.0.2.jar
  • protobuf-java-3.17.2.jar
  • transaction-api-1.1.jar
  • xpp3-1.1.4c.jar

Generic Java

General purpose Java applications require the following jar files, or newer compatible versions, from the libs folder:

  • google-api-client-1.32.1.jar
  • google-oauth-client-1.31.5.jar
  • google-http-client-1.39.2.jar
  • google-http-client-jackson2-1.39.2.jar
  • commons-logging-1.2.jar
  • gson-2.8.7.jar
  • httpclient-4.5.13.jar
  • httpcore-4.4.12.jar
  • jackson-core-2.12.4.jar
  • jsr305-3.0.2.jar
  • protobuf-java-3.17.2.jar
  • xpp3-1.1.4c.jar

Generated libraries for Google APIs

Maven

The Google API Client Library for Java is in the central Maven repository. The Maven groupId for all artifacts for this library is com.google.api-client . Specific Maven instructions are given for each module (below).

Modules

This library is composed of nine modules:

google-api-client

The Google API Client Library for Java (google-api-client) is designed to be compatible with all supported Java platforms, including Android.

On Android, you will need to explicitly exclude unused dependencies:

google-api-client-android

Extensions to the Google API Client Library for Java (google-api-client-android) support Java Google Android (only for SDK >= 2.1) applications. This module depends on google-api-client and google-http-client-android.

google-api-client-servlet

Servlet and JDO extensions to the Google API Client Library for Java (google-api-client-servlet) support Java servlet web applications. This module depends on google-api-client and google-oauth-client-servlet.

google-api-client-appengine

Google App Engine extensions to the Google API Client Library for Java (google-api-client-appengine) support Java Google App Engine applications. This module depends on google-api-client, google-api-client-servlet, google-oauth-client-appengine and google-http-client-appengine.

google-api-client-gson

GSON extensions to the Google API Client Library for Java (google-api-client-gson). This module depends on google-api-client and google-http-client-gson.

google-api-client-jackson2

Jackson2 extensions to the Google API Client Library for Java (google-api-client-jackson2). This module depends on google-api-client and google-http-client-jackson2.

google-api-client-java6

Java 6 (and higher) extensions to the Google API Client Library for Java (google-api-client-java6). This module depends on google-api-client and google-oauth-client-java6.

google-api-client-protobuf

Protocol buffer extensions to the Google API Client Library for Java (google-api-client-protobuf). This module depends on google-http-client-protobuf and google-api-client.

google-api-client-xml

XML extensions to the Google API Client Library for Java (google-api-client-xml). This module depends on google-api-client and google-http-client-xml.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Источник

Оцените статью