Эволюция разработки под Android

—

от автора

Отправной точкой истории разработки Android считается начало 2000-х. Энди Рубин, Рич Майнер, Ник Сирс, Крис Уайт основывают Android Inc. Уже в 2005 Google выкупает их. Поначалу первый смартфон на базе Android планировался больше быть похожим на Blackberry.

BlackBerry 8820, BlackBerry Bold 9900 и BlackBerry Classic (источник)

BlackBerry 8820, BlackBerry Bold 9900 и BlackBerry Classic (источник)

Но в 2007 выходит первый iPhone, который имел сенсорный экран. Конечно, в то время такой экран был в новинку, но людям понравилось, и данная технология обрела популярность. Из-за этого Google сместила акцент на сенсорные экраны. И уже в 2008 Google запустила свою ОС — Android. Первым смартфоном на её базе стал HTC Dream.

Источник

Так началась история самой популярной ОС. Постоянные обновления, отличная поддержка — некоторые причины её массовости. Ещё не стоит забывать, что Android опирается на ядро Linux — систему с открытым исходным кодом. Более того, Android сам является системой с открытым исходным кодом. Вдобавок, возможность реализовывать приложения на Java сделало данную ОС очень популярным среди разработчиков. Но сегодня приоритетным языком программирования для Android-разработки является Kotlin. Это лишь малая часть того, что поменялось с 2008. В данной статье представлена история разработки под Android. Остановлюсь на знаковых технологиях, библиотеках, архитектурах и т.д.

Отправная точка

Как уже было указано выше, поначалу разрабатывали Android-приложения с помощью Java. Google решила использовать этот язык из-за его популярности. Ведь Java имеет огромное сообщество разработчиков и сегодня. Также стоит упомянуть, что Android-приложения можно писать на С++. Но он не стал таким же популярным.

Ещё для создания Android-приложений использовали Android

Для вёрстки экрана применяли XML. Очень удачное решение со стороны Google, так как XML используется в передаче данных и потому знаком большинству разработчиков. Всё это выстраивается на основе layout. Layout — способ организации пользовательского интерфейса в приложении. Существуют различные типы layout. В то время стандартным layout в разработке был RelativeLayout или LinearLayout. RelativeLayout позволяет разработчикам определять расположение элементов UI относительно друг друга или относительно родительского контейнера. LinearLayout используется для организации элементов пользовательского интерфейса  в виде линейного списка по горизонтали или вертикали.

Для прокручиваемого списка элементов использовался компонент ListView. Однако сейчас ListView считается устаревшим и его заменил RecyclerView. Но об этом будет рассказано далее. Большой недостаток ListView — проблемы производительности при безграничном списке.

Общепринятой архитектуры в те времена не было. Поэтому каждый сам выбирал, как ему лучше структурировать свой код.

Для выполнения короткой (не более нескольких секунд) трудоёмкой работы в фоновом режиме использовали абстрактный класс AsyncTask, от которого нужно наследоваться. С Android 11 он считается устаревшим. Для выполнения более продолжительной работы была возможность применять различные API пакета java.util.concurrent (Executor, ThreadPoolExecutor, FutureTask). Для сетевого запроса было достаточно и AsyncTask.

И что дальше? А дальше Android Studio

В 2013 году на смену Eclipse с плагином Android Development Tools приходит более удобная среда разработки Android Studio, которая включается в состав Android

Период MVP (Model-View-Presenter)

И вот сообщество разработчиков решило ввести свою архитектуру — MVP.

Model — это классы для взаимодействия с сервером и базой данных. View — то, что видит пользователь. В Android-разработке View может быть, например, Activity. Ну а Presenter — это посредник между View и Model.

View обращается к Presenter, если на экране пользователь что-то сделал. Presenter обрабатывает эти действия, вызывает соответствующие методы Model для получения данных и обновляет View.

Разработчики решили стандартизировать архитектуру Android-приложений, что, безусловно, стало большим шагом вперёд.

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

Также стоит упомянуть XML-макеты. Google начал рекомендовать ConstraintLayout. На таком макете у каждого элемента есть ограничения (constraints), которые позволяют его гибко настраивать относительно других элементов. Например, layout_constraintLeft_toLeftOf, layout_constraintBaseline_toBaselineOf. Также, в отличие от RelativeLayout и LinearLayout, в ConstraintLayout во многих случаях не нужно вкладывать несколько макетов, что ускоряет производительность рендеринга.

Также на замену ListView пришёл RecyclerView, который более эффективен и имеет больше возможностей для кастомизации списка и прокрутки. Также исчезла проблема, связанная с бесконечным списком, так как RecyclerView повторно использует ранее созданные контейнеры (в одном контейнере хранится один элемент списка). Но RecyclerView более сложный в использовании, чем ListView.

Dagger 2

В 2015 году разработчики из Google представили Dagger 2. Если существует Dagger 2, то должен быть и Dagger 1, верно? Верно. Dagger 1 был представлен в 2012 г. компанией Square (они же, кстати, выпустили такие библиотеки, как Retrofit и Picasso. Ну и множество других прекрасных библиотек). В чём же суть Dagger 2? Это фреймворк для внедрения зависимостей, который генерирует код, тем самым облегчая жизнь разработчикам. Основное отличие Dagger 1 от Dagger 2 заключается в механизме работы. Dagger 2 использует генерацию на этапе компиляции, а Dagger 1 основана на рефлексии. Такое нововведение улучшает эффективность. А ещё ошибки, связанные с Dagger 2, будут выявлены на этапе компиляции.

Flutter

В 2015 г. выходит первая версия Flutter от Google. Это новый фреймворк, с помощью которого можно реализовывать приложения как для iOS, так и для Android. Но вначале была поддержка только Android, а возможность реализации для мобильной ОС Apple появилась позже. Также позже можно будет делать веб-приложения, настольные приложения под Windows, macOS и Linux. Вместо Kotlin используется язык Dart, который не сильно отличается от Kotlin и Java. На сегодняшний день Flutter сосуществует с нативной разработкой под Android и имеет более высокий порог вхождения.

Instant Apps

В 2016 году были анонсированы Instant Apps, а первые приложения появились уже в 2017. Благодаря этой технологии пользователь может нажать на специальную ссылку или кнопку, что позволяет открыть определенный раздел приложения, не загружая и не устанавливая приложение полностью. Instant Apps также позволяют пользователям попробовать приложение перед его установкой в Google Play.

Всё это достигается благодаря модульному подходу при разработке приложений и Deep Link’ам.

Появление Kotlin

Вообще Kotlin появился раньше, но именно в 2017 году Google объявляет Kotlin основным языком программирования для Android-разработки. Модный, стильный, молодёжный. И что немаловажно — более безопасный (привет, NullPointerException). К тому же синтаксис похож на Java. А ещё Kotlin работает поверх

Для хранения данных Google представила LiveData, который реализует принцип паттерна Observer. Таким образом, из View идёт подписка к LiveData. Когда ViewModel получает данные из Model, эти значения отображаются на экране.

На смену RxJava пришли корутины (Coroutines). Они представляют собой вычисления, работающие в контексте реальных потоков, но при этом данные вычисления выполняются асинхронно и являются более легковесными по сравнению с обычными потоками . Всё работает примерно таким образом: корутина может быть приостановлена и возобновлена в любой момент выполнения. Когда она приостанавливается, выполнение передается обратно в вызывающий код, который затем через какое-то время продолжит её работу. В случае возобновления корутины выполнение начинается с того места, где она была приостановлено. И благодаря тому, что корутины позволяют писать последовательный код, в отличие от RxJava, код стало легче читать. Это всё дало корутинам популярность в Android-разработке. Например, чтобы указать, что функция будет выполняться асинхронно, достаточно добавить модификатор ‘suspend’ этой функции.

Иcточник

Не APK, а AAB

В 2018 Google представляет миру

Ещё стоит упомянуть Android Jetpack — набор компонентов и инструментов для разработки Android приложений, представленный Google в том же 2018 году. Android Jetpack включает библиотеки, предлагающие готовые решения для задач, с которыми обычно сталкиваются Android-разработчики, такие как работа с жизненным циклом приложения, обработка данных, навигация и т.д.

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

Рукоять кинжала

В июне 2020 выходит альфа-версия Dagger Hilt. Это новая библиотека для внедрения зависимостей. Отличается от Dagger 2 тем, что позволяет использовать возможности Dagger 2 упрощённым способом, так как Dagger Hilt автоматически генерирует код для DI, что упрощает процесс настройки и уменьшает объем написания необходимого кода.

Наши дни

От XML к Compose

В 2019 году компания Google анонсирует Jetpack Compose. А в 2021 сначала выпускает бета-версию, а затем и версию 1.0. Это ещё один большой шаг к изменению созданию приложений под Android. Теперь вместо XML-макетов разработчик может использовать библиотеку Compose и создавать UI с помощью декларативного подхода на языке Kotlin.

Что интересно, также существует Compose Multiplatform. Благодаря этой технологии создавать UI на Compose можно также для iOS, macOS, Windows, Linux и веба.

Flow

Ещё одним изменением нынешнего этапа можно считать замену LiveData на Flow, представленный в библиотеке Kotlin Coroutines. Flow является потоком значений, работающим асинхронно на основе корутин.

AI и ML

С развитием искусственного интеллекта и машинного обучения Android приложения также стали предоставлять функции, связанные с ИИ и машинным обучением. TensorFlow и другие ML-фреймворки имеют поддержку Android, что позволяет разработчикам добавлять такие функции, как распознавание голоса, систему рекомендаций и т.п.

Заключение

Конечно, не всё в этой статье рассказано. Можно было бы написать про базы данных, отличия Android API, разработку для Android TV и Wear OS и многое другое. Не уверен, что получится всё перечислить. Я только хотел провести ретроспективу, показать как изменилась Android-разработка за эти неполные 16 лет. Ведь изменилось многое. И мне кажется, что как Android, так и вся мобильная разработка будут продолжать динамично меняться и развиваться.


ссылка на оригинал статьи https://habr.com/ru/articles/810881/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *