- PVSM.RU - https://www.pvsm.ru -

10 библиотек, о которых должен знать каждый Android-разработчик

10 библиотек, о которых должен знать каждый Android-разработчик

В 2015 году мы уже публиковали статью [1] о пяти лучших библиотеках, которые мы использовали в то время. Однако платформа Android значительно выросла с тех пор. Как вы знаете, в такой быстро развивающейся области, как разработка программного обеспечения, всё меняется и развивается с молниеносной скоростью. Именно поэтому мы решили, что пришло время обновить список наиболее эффективных Android-библиотек.

Давайте без долгих предисловий перейдем прямо к нашему списку. Сначала мы рассмотрим одну из самых старых, но, по моему убеждению, и одну из самых эффективных Android-библиотек.

1. Retrofit [2]

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

interface ApiService {
  @GET("movie/{id}")
  fun getMovieDetails(@Path("id") id: String) : Call<MovieDetails>
}

Ко всему прочему, Retrofit предоставляет отдельный Rx-модуль. Если вы используете Rx, этот модуль вернёт Observable при обращении к API, что позволит связать его с остальной частью вашего приложения. И это лишь некоторые из множества причин, по которым мы по-прежнему любим и используем Retrofit.

2. Moshi [3]

Moshi — это библиотека для конвертации JSON в Java и Kotlin-объекты. Многие воспринимают Moshi как GSON 3.0. Однако эта библиотека превосходит GSON в нескольких аспектах: она быстрее [4], она поддерживает Kotlin, она обновляется, генерирует предсказуемые исключения и не использует испорченный адаптер DateTime по умолчанию. Кроме того, используя Moshi, процесс конвертации JSON в Java-объекты (и наоборот) становится максимально простым и понятым.

val moshi = Moshi.Builder().build()
val jsonAdapter = moshi.adapter(Model::class.java)

/* JSON to Model */
val model = jsonAdapter.fromJson(json)

/* Model to JSON */
val json = jsonAdapter.toJson(model)

Мы также любим Moshi за поддержку JSON API. JSON API — это спецификация построения API, и многие API, с которыми мы работаем, написаны с использованием этой спецификации. Moshi JSON API [5] облегчает нашу жизнь, поскольку JSON API ответ преобразуется в значимые Java-объекты. Retrofit ещё поддерживает Moshi, и вместе они просто отлично работают.

3. Chuck [6]

Chuck — это HTTP-инспектор для Android, позволяющий «покопаться» в HTTP-истории вашего приложения на мобильном телефоне. HTTP-лог отображается в виде уведомления, которое можно развернуть, чтобы зайти в Chuck и посмотреть детальную информацию. Использование Chuck невероятно обрадует специалистов QA-отдела, поскольку они смогут увидеть, где находится проблема: на стороне Android или на стороне сервера. Эта библиотека иногда может помочь вам больше, чем logcat. Это связано с тем, что ваша HTTP-история сохранится даже в случае непредвиденного закрытия приложения, в то время как logcat время от времени самоочищается после перезапуска.

Chuck

4. Glide [7]

Вы скорее всего знаете, что загрузка изображений в Android вызывает большие трудности. Даже изменение размера изображения может обернуться катастрофой с OutOfMemoryException. Glide — это библиотека загрузки изображений, которая предоставляет качественный API, позволяющий изменять изображение как вам угодно.

GlideApp.with(context)
  .load(url)
  .centerCrop()
  .placeholder(R.drawable.ic_placeholder)
  .into(imageView)

Библиотека позволит вам легко загрузить удалённое изображение в ImageView, определить стабовые изображения, кэшировать и масштабировать изображения и т.д. Просто попробуйте проделать всё это без помощи Glide, и вы сразу поймёте, почему он находится в нашем списке ключевых библиотек. Glide даже поддерживает некоторые распространённые изменения по умолчанию, например, создание изображения круглой формы.

5. ThreeTen [8]

ThreeTen — это библиотека для работы с датой и временем в Android. Это портированная версия JSR-310, который был включен в Java 8 в качестве стандартного пакета java.time.*. Мы любим эту библиотеку, потому что стандартный Android Calendar API превращает работу в сущий кошмар.

/* Current DateTime */
LocalDateTime.now()

/* String to DateTime */
val localDateTimeString = "2011-12-03T10:15:30"
val localDateTime = LocalDateTime.parse(localDateTimeString)

ThreeTen сильно уступает JodaTime с точки зрения количества методов и бинарного размера. API данной библиотеки также меньше, чем API JodaTime. Если вы уже используете JodaTime, то, вероятно, вам не стоит переходить на ThreeTen. Тем не менее, я настоятельно рекомендую попробовать ThreeTen, если вы только начинаете работать над новым проектом.

6. Timber [9]

Timber — мощная, но простая библиотека логирования, построенная на базе Android-класса Log. С её помощью вы сможете легко включать и выключать отображение логов. Также библиотека предлагает отличную поддержку логирования форматированных строк и исключений. Благодаря этим преимуществам Timber и входит в наш список ключевых библиотек, которые мы используем практически на всех Android проектах.

/* Log error */
Timber.e("Error happened")

/* Log warning with params */
Timber.w("Your variable value is %s", variable)

/* Log exception */
try {
  ...
} catch (e: Exception) {
  Timber.e(e)
}

7. Room [10]

Room — это официальный ORM для Android, и этот статус оправдывается рядом причин. Эта библиотека отличается удобным API, похожим на Retrofit. Room также в значительной степени опирается на аннотации и стандартный SQL-синтаксис.

@Dao
interface MovieDao {
  @Query("SELECT details FROM movies WHERE id = :id")
  fun getMovieDetails(id: String): MovieDetails
}

Кроме того, Room по умолчанию включает в себя поддержку Rx и LiveData, поэтому вы сможете использовать его, как вам захочется. Основное преимущество Room перед различными ORM — простота. Многие ORM имеют гораздо более сложный API, для использования которого вам потребуется тщательно изучить всю документацию. Благодаря стандартному SQL-синтаксису Room предельно доступен для понимания, что позволяет приступить к работе сразу, не тратя много времени на чтение документации.

8. RxJava [11]

RxJava — это Java-реализация ReactiveX API, которая позволяет связывать асинхронные задачи и события в наблюдаемые (англ. observable) последовательности. Пользователи рассчитывают на то, что современные приложения способны отображать данные в режиме реального времени. Другими словами, они хотят, чтобы информация обновлялась автоматически. Именно в этом аспекте вам и пригодится RxJava.

При получении данных в реальном времени становится чрезвычайно сложно объединить несколько запросов API, переключать потоки и обрабатывать ошибки. Именно здесь RxJava отменно проявляет себя, и именно по этой причине мы начали пользоваться этой библиотекой. Я согласен, что RxJava может показаться запутанной и трудной для изучения, но эта библиотека однозначно заслуживает вашего времени. Даже после перехода на Kotlin, мы продолжили использовать RxJava из-за её преимуществ. В сочетании с Kotlin API она становится ещё лучше благодаря дополнительным функциям-расширениям.

Single.zip(
  /* Execute first API call and retry twice if it fails */
  apiService.getMovieActors(id).retry(2),
  /* Execute second API call and retry twice if it fails */
  apiService.getMovieDetails(id).retry(2),
  /* Receive successful results and merge them into single model */
  BiFunction<List<Actor>, MovieDetails, Movie> { actors, details -> Movie(details, actors) }
)
  /* Execute API calls on IO thread */
  .subscribeOn(Schedulers.io())
  /* Receive results on MainThread */
  .observeOn(AndroidSchedulers.mainThread())
  .subscribeBy(
    onError = { /* Handle error */ },
    onSuccess = { /* Handle full movie data */ }
  )

Попробуйте сделать что-то похожее на приведённый выше фрагмент с помощью простой Java. Ну же.

9. Android KTX [12]

Android KTX — это набор расширений-обёрток для Android API в Kotlin, которые делают его более дружелюбным. Главная цель этой библиотеки — сделать Android API более удобным в использовании. Она содержит множество методов и отличных новых функций Kotlin, таких как именованные параметры, лямбда-функции и параметры по умолчанию.

/* Display View */
view.isVisible = true

/* Apply padding to all sides */
view.setPadding(padding)

/* Update padding on any side */
view.updatePadding(left = newPadding, right = newPadding)

/* Quick Toast */
toast("Display test toast")

/* New way to create bundle */
bundleOf {
  "key1" to item1
  "key2" to item2
}

/* Better way to use SharedPreferences */
sharedPreferences.edit {
  putString("key1", "value1")
  putString("key2", "value2")
}

Android KTX отличается наличием множества функций-расширений, и единственный способ узнать о них — погрузиться в код библиотеки, чтобы увидеть, каким образом функции улучшили Android API. Android KTX упрощает способ использования Android API, и по этой причине эта библиотека должна стать основой каждого Android приложения, написанного на Kotlin.

10. Dagger [13]

Наш список 10 лучших библиотек был бы неполным без Dagger. Эта библиотека представляет собой полностью статичный фреймворк внедрения зависимостей во время компиляции. Dagger, так же как и RxJava, действительно сложен для понимания (мне пришлось потратить некоторое время, чтобы понять их пример CoffeeMaker), но определённо заслуживает потраченного времени и усилий.

Внедрение зависимостей (англ. dependency injection) — это способ, позволяющий добавлять небольшие компоненты к другим моделям с минимальными усилиями. Например, если у вас есть модель автомобиля, вы можете добавить к ней шины и с лёгкостью подменить имплементацию шин в будущем — не изменив при этом ни единой строчки кода в моделе автомобиля.

При разработке более сложных приложений вы точно не захотите самостоятельно выполнять задачи по внедрению зависимостей, потому что объём кода быстро увеличивается и становится слишком сложным для поддержки. Dagger избавит вас от этой проблемы, потому что он создает граф внедрения зависимостей во время компиляции посредством обработки аннотаций.

В прошлом году Google добавил отдельный модуль Android Dagger, который позволяет писать меньше шаблонного кода и упрощает внедрение зависимостей.

Заключение

Итак, вот и он: наш список 10 лучших Android-библиотек в 2018 году. Десять отличных библиотек, которые сделают процесс Android-разработки более приятным для каждого, кто решит их использовать. Хотите больше библиотек? Так вышло, что мы в нашей компании разработали несколько собственных Android-библиотек. Можете ознакомиться с ними:

  • MjolnirRecyclerView [14] — добавляет в RecyclerView поддержку header, footer, пустых view-компонентов и DiffUtils;
  • Goldfinger [15] — упрощает реализацию аутентификации по отпечаткам пальцев;
  • DBInspector [16] — просматривает и обеспечивает доступ к базам данных приложения;
  • Complexify [17] — простой способ проверить качество пароля пользователя;
  • Prince of Versions [18] — обрабатывает обновления приложения внутри приложения.

Автор: Devcolibri

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/android-development/295488

Ссылки в тексте:

[1] статью: https://infinum.co/the-capsized-eight/top-5-android-libraries-every-android-developer-should-know-about

[2] Retrofit: http://square.github.io/retrofit/

[3] Moshi: https://github.com/square/moshi

[4] она быстрее: https://stackoverflow.com/a/43578738/3920456

[5] Moshi JSON API: https://github.com/kamikat/moshi-jsonapi

[6] Chuck: https://github.com/jgilfelt/chuck

[7] Glide: https://bumptech.github.io/glide/

[8] ThreeTen: https://github.com/JakeWharton/ThreeTenABP

[9] Timber: https://github.com/JakeWharton/timber

[10] Room: https://developer.android.com/training/data-storage/room/

[11] RxJava: https://github.com/ReactiveX/RxJava

[12] Android KTX: https://github.com/android/android-ktx

[13] Dagger: https://google.github.io/dagger/

[14] MjolnirRecyclerView: https://github.com/infinum/MjolnirRecyclerView

[15] Goldfinger: https://github.com/infinum/Android-Goldfinger

[16] DBInspector: https://github.com/infinum/android_dbinspector

[17] Complexify: https://github.com/infinum/android-complexify

[18] Prince of Versions: https://github.com/infinum/Android-Prince-of-Versions

[19] Источник: https://habr.com/post/425397/?utm_campaign=425397