что такое jetpack android

Jetpack Compose — как легко построить UI на Android

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

В июле этого года вместе с Android Studio Arctic Fox вышла одна из долгожданных библиотек — Jetpack Compose. Она позволяет создавать пользовательский интерфейс в декларативном стиле и обещает быть революцией в построении UI.

Разбираемся, так ли это на самом деле, какие у библиотеки преимущества и недостатки. Подробности — в статье.

Преимущества Jetpack Compose

Jetpack Compose — это набор инструментов для разработки UI в Android-приложении. Он призван ускорить и упростить разработку пользовательского интерфейса, избавить от лишнего кода и соединить модель реактивного программирования с лаконичностью Kotlin.

Сразу с места в карьер — какие есть преимущества у библиотеки:

1. Меньше кода. Jetpack Compose позволяет писать меньше кода, а значит разработчик может больше фокусироваться на проблеме, с меньшим количеством тестов и дебага, а значит и багов.

2. Интуитивно понятный. Compose использует декларативный API — разработчику нужно лишь сказать, что сделать, а все остальное ляжет на плечи библиотеки.

3. Удобство внедрения. Compose совместим с любым существующим кодом. Например, можно вызвать Compose-код из вьюх (view) и, наоборот, вьюхи из Compose. Многие библиотеки вроде Jetpack Navigation, ViewModel и Coroutines уже адаптированы под Compose, что позволяет сравнительно быстро внедрить его в свой код. Кроме того, Android Studio Arctic Fox поддерживает превью создаваемых вьюх.

4. Имеет обширный инструментарий. Jetpack Compose позволяет создавать красивые приложения с прямым доступом к Android Platform API и build-in поддержкой Material Design, тёмной темы, анимаций и других крутых штук.

Далее пройдёмся по основным аспектам библиотеки и посмотрим, как сильно повышается производительность приложения.

Подключение к проекту

Чтобы подключить Jetpack Compose к проекту, необходимо указать некоторые строки кода в своем build.gradle.

В рутовом объявим переменную с версией Compose:

Здесь мы указываем, что в проекте будем использовать Jetpack Compose и объявляем необходимые зависимости (подробнее про зависимости можно почитать в официальном гайде).

Дальше всё просто. В активити (activity) объявлем Composable-функцию, строим иерархию вьюх с указанием необходимых атрибутов и смотрим результат.

Пройдемся по коду. Я написал две реализации вёрсток различной сложности:

1. Простая реализация

Добавляет TextView в вёрстку с текстом с конкатенацией Hello и аргумента, переданного в Greeting.

Важно отметить, что имена Composable-функций начинаются с заглавной буквы. Это соглашение по наименованию функций, поэтому если писать со строчной, то студия будет подсвечивать неверный нейминг.

2. Более сложная реализация

Этот вариант представляет собой скролящийся экран, который содержит изображение, текст и кнопку. Рассмотрим некоторые особенности:

Необходимо объявить Scroll State. Только не обычный, а тот, который позволяет сохранять состояние скролла сквозь рекомпозицию — rememberScrollState().

Column представляет собой ViewGroup с вертикальным расположением элементов.

Modifier позволяет управлять атрибутами, добавлять декорации и поведение к вьюхам.

Остальное интуитивно понятно. И это как раз одна из ключевых особенностей Jetpack Compose — даже если вы не использовали библиотеку ранее, то всё равно с ней разберётесь.

Добавить вьюхи в активити можно через extension setContent <>, например:

В общем-то, создание UI выглядит действительно просто. Теперь определим, насколько сильно оптимизируется приложение и как быстро пользователь увидит окончательный экран.

Для тестирования воспользуемся библиотекой Jetpack Benchmark, о которой, кстати, тоже рассказывали в отдельной статье. Код теста выглядит так:

Протестируем три версии установки вьюхи в активити:

При передаче ресурса в setContentView.

При передаче вьюхи в setContentView.

Итоги тестирования можно посмотреть в таблице: левый столбец — название теста, правый — время на выполнение:

Источник

Введение в Jetpack Compose

Что такое Jetpack Compose

Jetpack Compose представляет современный тулкит от компании Google для создания приложений под ОС Android на языке программирования Kotlin. Jetpack Compose упрощает написание и обновление визуального интерфейса приложения, предоставляя декларативный подход.

Jetpack совместим с существующим набором библиотек Android, которые можно использовать в стандартных проектах на Java и Kotlin для написания приложений под Android. Отличительной же чертой Jetpack Compose является то, что он предлагает кардинально другой подход к созданию приложений.

Прежде всего, Jetpack Compose предлагает использовать язык Kotlin и все его преимущества. Соответственно для работы с тулкитом необходимо иметь базовые знания данного языка. Для этого можно обратиться к руководству по языку Kotlin на этом сайте.

Jetpack уменьшает объем кода.

Jetpack Compose предлагает декларативный API, который является более интуитивным.

Установка средств разработки

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

Здесь же мы можем указать место для установки Android SDK, если путь по умолчанию нас не устраивает.

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

Источник

Compose. Jetpack Compose

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

Благодаря стремительному развитию мобильной индустрии каждые несколько лет мы наблюдаем появления новых технических решений, призванных усложнить упростить жизнь разработчикам. Некоторые из них, не сыскав популярности у пользователей, остаются лишь частью истории, другие – плотно укореняются в повседневной разработке, становясь в определенной области стандартом де-факто.

Пожалуй, главным трендом мобильной разработки за последние несколько лет стал декларативный UI. Такое решение уже давно успешно применяется в веб и кроссплатформенных решениях и, наконец, добралось и до нативной разработки. На iOS существует SwiftUI (представленный на WWDC 2019), а на Android – Jetpack Compose (представленный месяцем ранее на Google I/O 2019). И именно о последнем мы сегодня и поговорим.

Примечание: в данной статье мы не будем рассматривать поэтапное создание первого проекта на Compose, так как этот процесс прекрасно описан в других материалах. Моя цель – лишь рассказать о преимуществах и недостатках, которые дает android-разработчикам переход на Jetpack Compose, а решение использовать или нет всегда остаётся за вами.

Появление

Официальная история Jetpack Compose начинается с мая 2019, когда он был представлен публике на конференции Google I/O. «Простой, реактивный и Kotlin-only» – новый декларативный фреймворк от Google выглядел как младший брат Flutter (который к тому моменту уже стремительно набирал популярность).

API design is building future regret

О недостатках текущего UI-фреймворка Android было сказано и написано уже достаточно большое количество раз. Проблемы с View-иерархией, зависимость от релизов платформы – наличие этих и множества других мелких недостатков в той или иной мере доставляли неудобства разработчикам, что и побудило компанию Google заняться разработкой нового фреймворка, способного решить все эти проблемы.

Преимущества

Итак, чем же хорош Jetpack Compose и, главное, чем он кардинально отличается от существующего на данный момент UI-фреймворка Android?

В то же время, при использовании Jetpack Compose, решение будет выглядеть следующим образом:

Ну и напоследок – сравнительный результат:

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

Недостатки

Декларативный стиль

Отдельное внимание стоит уделить главной особенности Jetpack Compose – декларативному стилю создания UI. Суть подхода заключается в описании интерфейса как совокупности composable-функций (они же виджеты), которые не используют «под капотом» view, а напрямую занимаются отрисовкой на canvas. Для кого-то это минус, для других – возможность попробовать что-то новое. Так или иначе, к концепции «верстать UI кодом» нативному разработчику, не работавшему ранее с аналогичными технологиями (к примеру, Flutter или React Native), придётся привыкать.

Что за Unidirectional Data Flow?

В современном android-приложении UI-состояние меняется в зависимости от приходящих событий (нажатие на кнопку, переворот экрана и т.д.). Мы нажимаем на компонент, тем самым формируя событие, а компонент меняет свой state и вызывает callback в ответ. Из-за довольно тесной связи UI-состояния с View это потенциально может привести к усложнению поддержки и тестирования такого кода. К примеру, возможна ситуация, когда помимо внутреннего state компонента, мы можем хранить его состояние в поле (например во viewmodel), что теоретически может привести к бесконечному циклу обновления этого самого state.

Что же касается Jetpack Compose, то здесь все компоненты по умолчанию являются stateless. Благодаря принципу однонаправленности нам достаточно «скормить» модель данных, а любое изменение состояния фреймворк обработает за нас. Таким образом, логика компонента упрощается, а инкапсуляция состояния позволяет избежать ошибок, связанных с его частичным обновлением. В качестве примера возьмем уже рассмотренный ранее composable-код. Перед описание компонентов были определены две переменные:

Мы создаем два текстовых объекта, значения которых будем устанавливать полям ввода (логина и пароля) в качестве value. А благодаря связке remember любое изменение значений этих объектов (из других частей кода) уведомит об этом соответствующее поле ввода, которое перерисует только значение value, вместо полной рекомпозиции всего компонента.

Источник

Что нового в Jetpack

Jun 25, 2020 · 8 min read

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

Android Jetpack — это набор библиотек, направленных на то, чтобы помочь вам легко писать высококачественные приложения, поддерживая более старые версии Android. Спустя два года после запуска Jetpack мы наблюдаем огромное внедрение приложений от крупных команд разработчиков и тех, кто только начал работать. И это только начало: сегодня мы запускаем новые библиотеки, а также основные обновления существующих, над которыми мы работали в течение последнего года. Здесь можно найти расширенный видео-обзор последних обновлений в Jetpack.

Новое в Альфе

Рекомендуемая библиотека Hilt от Jetpack для инъекции зависимостей

Hilt — это новая библиотека Android, которая упрощает внедрение зависимостей (DI) в приложении. Hilt позволяет сосредоточиться только на важных частях определения и инъекции связок, не беспокоясь об управлении всеми настройками DI и настройкой связей (wiring).

Узнайте больше о Hilt и откройте для себя больше ссылок на связанные ресурсы в нашем блоге запуска.

Paging 3 — постепенная загрузка и отображение данных

Paging — это библиотека, которая помогает загружать и отображать небольшие фрагменты данных постепенно. Сегодня мы выпускаем Paging 3 — полностью переписанную библиотеку с использованием корутин Kotlin. Этот новый релиз добавляет очень востребованные функции, такие как разделители, верхние и нижние колонтитулы и преобразования списков, а также API для наблюдения за состоянием загрузки списка и методами повторной попытки и обновления.

Для получения дополнительной информации о Paging 3 ознакомьтесь с документацией и нашим codelab.

App Startup — инициализация компонентов при запуске приложения

Библиотека App Startup предоставляет простой и эффективный способ инициализации компонентов при запуске приложения. Вместо определения отдельных поставщиков контента для каждого компонента, который необходимо инициализировать, App Startup позволяет определить инициализаторов компонентов, совместно использующих одного поставщика контента. Это может значительно улучшить время запуска приложения.

Пример использования App Startup для улучшения времени инициализации WorkManager (библиотека, которая использует ContentProvider под капотом) после отключения ContentProvider в WorkManager:

Для получения дополнительной информации о App Startup ознакомьтесь с официальной документацией.

Интеграция IME с автоматическим заполнением

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

Упрощенная анимация с помощью core-animation и SeekableAnimatedVectorDrawable

core-animation адаптирует все функции, добавленные в API Animator со времен Ice Cream Sandwich, такие как пауза/продолжить и поиск.

Отладка базы данных с помощью Database Inspector в Android Studio

Отладка проблем с базой данных стала проще в бета-версии Android Studio 4.1 с новым Database Inspector. Этот инструмент позволяет проверять, запрашивать и изменять базы данных SQLite в запущенном приложении. Независимо от того, используете ли вы непосредственно Room или SQLite, вы можете начать отладку БД, выбрав в строке меню View > Tool Windows > Database Inspector. Узнайте больше об этом инструменте и о том, как его использовать, в этом блоге.

WindowManager — улучшенная поддержка форм-факторов устройств

Библиотека WindowManager — это новое дополнение к Android Jetpack, которое используется для поддержки новых форм-факторов, таких как складные смартфоны, экраны с “челкой” и другие. Она предоставляет общий API для различных функций WindowManager как в старых, так и в новых версиях платформы.

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

MotionLayout — создание плавной и интерактивной анимации для Android

Обновления существующих библиотек

Навигация

Navigation 2.3 добавляет поддержку динамических функциональных модулей, которые позволяют загружать фрагменты приложения по мере необходимости пользователя, значительно уменьшая начальный размер загрузки. Теперь вы можете перейти к этим модулям так, будто это часть базового APK. Наряду с разрешением параметров запроса, deep link (открытие приложения на устройстве через URL) теперь поддерживает пользовательские действия и типы mime.

WorkManager

В последних версиях WorkManager добавлена поддержка длительной или важной работы, активность которой должна сохраняться операционной системой с помощью foreground service.

Чтобы упростить диагностику проблем с задачами WorkManager, мы добавили новый API, который позволяет заглянуть во внутреннее состояние WorkManager и сохранить его в logcat. Пример результата диагностики WorkManager:

Мы также добавили правила Lint, которые помечают распространенные ошибки при использовании WorkManager, тем самым помогая вам избежать их. Другие обновления API включают в себя: поддержку настройки и наблюдения за промежуточным прогрессом для воркеров, улучшения API-запросов для текущих воркеров и улучшения внутреннего планировщика, используемого для их запуска.

Бенчмарк

Новая альфа-версия библиотеки Benchmark интегрируется с профилированием CPU, так что вы можете профилировать свои бенчмарки, а затем просматривать метод или выборочные трассировки прямо в Android Studio. Мы также добавили поддержку отслеживания распределения памяти, чтобы вы могли оптимизировать время, затрачиваемое на выделение и уменьшить нагрузку от сбора мусора.

Разрешения

Games SDK

Android Games SDK, запущенный ранее в этом году, теперь также является частью Jetpack и доступен в репозитории Google Maven. В настоящее время SDK предлагает Frame Pacing API (API для настройки кадра) и Android Performance Tuner (тюнер производительности Android). Узнайте больше о пакете Games SDK из официальной документации.

CameraX

Существует множество вариаций камер на разных устройствах Android, CameraX работает на 90% из них. С тех пор как CameraX вышла в бета-версию в феврале прошлого года, мы сосредоточились на ее надежности, чтобы обеспечить наилучшее поведение API для широкого спектра устройств. Наша тестовая лаборатория CameraX запускает автоматизированный набор тестов на типах устройств, представляющих более 400 миллионов активных устройств в использовании.

Ознакомьтесь с обширной документацией CameraX и примерами, чтобы узнать больше.

Безопасность

AppCompat

AppCompat обеспечивает адаптацию для различных элементов UI, начиная с темы Material, заканчивая виджетами, такими как Toolbar и темная тема. В последних версиях мы добавили правила Lint, которые позволяют вам лучше понять, какие атрибуты приходят из AppCompat, а какие из фреймворка, и убедиться, что вы используете правильный. Мы также внесли существенные улучшения стабильности в реализацию темной темы AppCompat.

Webkit

Библиотека Webkit Jetpack добавляет новый API в версии 1.2.0, чтобы принудительно использовать темный режим для своего контента. Когда этот API включен, WebView будет отображать сайты в темной теме там, где она поддерживается. При отсутствии поддержки API инвертирует определенные цвета.

Jetpack Compose — новый инструментарий UI Android

Узнайте больше обо всех обновлениях из раздела What’s new in Compose, а затем попробуйте его и дайте нам обратную связь.

Это был краткий обзор всех обновлений Jetpack за последние несколько месяцев. Имея в наличии более 90 библиотек, мы знаем, что может быть трудно найти нужную. Чтобы исправить это, мы переработали веб-страницу Jetpack и добавили, среди прочего, удобный выбор API, чтобы быстро перейти от проблемы, которую вы имеете, к библиотеке Jetpack, которая может ее решить.

Чтобы узнать больше о библиотеках Jetpack, следите за новыми видео, постами в блогах и кодовыми таблицами, выходящими в Jetpack week из 11 недель Android.

Источник

Android Jetpack: превращаем приложения в ракеты

Война… Война никогда не меняется. Так, война за красивый и работающий код идет постоянно. И на каждую сложную задачу рождается свое оружие: кто-то делает его под себя, а кто-то пользуется готовыми инструментами. Разработка под Android не исключение. На нашей конференции AppsConf 2018 мы обсудим, как и чем сейчас интереснее всего пользоваться, где можно споткнуться и что интересного есть в огромном арсенале средств разработки, который Google наконец начал приводить в порядок. Основные темы докладов можно посмотреть на нашем сайте, а пока мы попросили рассказать Google Developer Expert Дениса Неклюдова и Александра Смирнова о новом инструментарии Android Jetpack, который был представлен в мае этого года.

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack android

что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack androidАлександр Смирнов, co-founder и CTO в PapaJobs, основатель сообщества Android-разработчиков MOSDROID, ведущий видеоблога «Android в лицах».
что такое jetpack android. Смотреть фото что такое jetpack android. Смотреть картинку что такое jetpack android. Картинка про что такое jetpack android. Фото что такое jetpack androidДенис Неклюдов, первый GDE в России, работает в Сингапуре в 90seconds.tv, центровой ведущий подкаста AndroidDev, спикер разных конференций и автор нескольких курсов по разработке.

Android Jetpack был представлен в мае этого года на Google I/O.
А чего вы ждали от той конференции? Ожидания оправдались?

Александр Смирнов: Я ожидал намного меньше, чем в итоге представили. Казалось, что развивать платформу с точки зрения бизнеса особо незачем. В mobile-сегменте Google добился уверенной победы в 87 % рынка с позитивными трендами, а последние несколько лет был виден выход ML в качестве их основного направления работы. Я ждал прогресса по Material Design, добавление ML-инструментов для разработчиков, выхода Constraint Layout 2.0. Но мы увидели огромный шаг в наведении порядка и поддержке разработчиков. Неожиданно порадовали новинки в AJP и начало борьбы за улучшенный Support. Привет, Android X.

Денис Неклюдов: Я придерживался главного правила поездок на продуктовые конференции: не ждать анонсов, революционных изменений, подарков — ничего, кроме встречи со старыми приятелями. Лишь бы ничего не сломали. Но нет, они представили Android X, миграция на который не самый приятный процесс в больших проектах. Но было и много позитивного. Самое ценное в Google I/O — это общение с разработчиками фреймворка и коллегами по цеху.

Какие новинки уже успели применить на практике?

Денис Неклюдов: Из AJP опробовали только миграцию на Android X. У меня в проекте проверенный набор решений, нет никакого желания спешить и внедрять новые компоненты. Просто поддержали Target SDK 28, проверили на недавнем релизе Android Pie и успокоились. Ждем, когда сделают доступными обещанные улучшения для тестирования. Jetpack сейчас — это собранные в одном месте различные маленькие библиотеки, которые иногда делают жизнь разработчиков чуть-чуть легче и приятнее. Большинство новинок пока не готовы для релизных версий приложений.

Александр Смирнов:
Из представленных новинок я попробовал все, но в production мы только обновили приложение на новый Material Design и применили Android KTX, который понравился своей простотой и удобством. Люблю схлопывать кучу кода в несколько строк. Остальное закинули в pipeline и перейдем в этому году.

Jetpack успешно выполнит поставленные задачи, и вам понравится его использовать. Но да, некоторые разделы пока что в альфе, поэтому на этапе разработки могут вылезать небольшие проблемы. Это нормально. Тащить в production инструменты в состоянии альфы я бы не рекомендовал, но с тем же Kotlin меня это не остановило.

Для Android всегда остро стоял вопрос удобной навигации.
С AJP что-нибудь поменяется?

Денис Неклюдов: В Android навигация всегда была мощной и разнообразной: Activity, Fragment, еще нужно DeepLinks обрабатывать и следить за передаваемыми аргументами. Можно легко запутаться в большой карте экранов. Google как раз стараются решить это новым Navigation, который даже встроен в Android Studio со своим реактором иерархии экранов.

Я пользуюсь самодельными решениями, которые соответствуют требованиям и общей архитектуре проекта. Пока в Navigation есть серьезные баги и он не готов к использованию в опубликованных приложениях.

Александр Смирнов: В Jetpack Google сделали серьезный шаг вперед: появился Navigation, который изменит архитектуру приложений в лучшую сторону. В крупных приложениях навигация может стать сложной настолько, что запомнить все варианты переходов нереально. А их еще нужно запрограммировать и протестировать. Было несколько альтернатив, которые пытались это решить: Cicerone, Flow, Conductor. Ни один из них не является таким функциональным.

В первую очередь стоит отметить Navigation Editor: с ним удобно строить и графическую диаграмму переходов, и приятно управлять ею с помощью мыши. Реализована удобная обработка DeepLinks с поддержкой воспроизведения всего дерева переходов. Navigation Component делит работу с DeepLinks на два кейса: Explicit и Implicit. Первые мы можем создавать сами через удобное DSL и вызывать как PendingIntent через определенное действие. Второе — это привычные нам DeepLinks, например, из браузера. Они по-разному создаются и вызываются, но идентично обрабатываются c помощью графа навигации и полной поддержки построения стека для открытия необходимого раздела. Обрабатывать DeepLinks никогда не было так просто.

В AJP была добавлена Paging Library. Как она меняет работу с RecyclerView?

Денис Неклюдов: У RecyclerView всегда был недостаток: нужно потратить много времени на решение, которое осуществит постраничную загрузку в обе стороны, да еще и с возможностью перескакивать на разные участки этого бесконечного списка. В Paging Library Google представил свое решение данной проблемы.

Александр Смирнов: Библиотека повторяет рутинную операция большинства Android-разработчиков — работу со списками. Все мы для ускорения отображения больших наборов данных разбиваем их на страницы и работаем с ними. С помощью Paging Library подобная работа становится простой, так как мы получаем реализацию из коробки. Дополнительно компонент умеет работать над загрузкой данных из нескольких источников и миксовать их. Также мы получаем интересную идею с Placeholders, когда в момент дозагрузки данных можно показать красивые заглушки вместо вечных спиннеров. Кроме того, добавлена kill-feature работа со снапшотами или нестабильными данными — компонент может сам понимать, что было изменено и какие элементы нужно закинуть в центр списка, а какие — в начало.

По сути, этот компонент был создан для работы в связке с RecyclerView, но Paging Library состоит из двух основных частей: PagedList и PagedListAdapter. Собственно, с помощью PagedList можно работать с данным порциями, загружать из нескольких источников.

Одной из новинок стал Workmanager. Как он меняет работу с фоновыми задачами?

Александр Смирнов: Он помогает планомерно уйти от всемогущих сервисов к удобному API в Jetpack: позволяет добавлять необходимость выполнения условий окружения для запуска задачи, задавать порядок выполнения задач и цепочек. Можно передавать данные в исполняемую задачу и получать из нее результат. У него три огромных преимущества: не нужен Google Play на устройстве, можно запускать задачи только при соблюдении определенных условий, можно создавать цепочки задач.

Ни один из прошлых аналогов не был самодостаточен, поэтому существовала такая библиотека, как Android-Job от Evernote, которая использовала все аналоги сразу. После появления WorkManager необходимость в них отпадает.

Денис Неклюдов: У Google получилась такая большая обертка над всеми существующими решениями для работы с фоновыми задачами. С тем, что отложенную задачу просто так в Service выполнить не удастся, разработчики столкнулись с выходом Android Marshmallow и приходом Doze Mode. Теперь приложение не может делать все, что ему вздумается. И с каждой версией таких ограничений все больше и больше. Еще с Lollipop нам доступен JobScheduler, который запускает фоновые задачи при определенных условиях и с согласия системы, но у него есть баги на ранних версиях и неясно, как с ним работать в версиях Android, где его нет. Для этого была создана обертка в виде GCM network manager и переписана еще раз в виде Firebase Job Dispatcher. Но и они оказались неидеальны — так на свет появилась их современная замена WorkManager, который берет на себя задачу выполнения фоновых задач на любой версии Android без багов.

В AJP была добавлена новая возможность — Slices. Что в ней интересного?

Александр Смирнов: В первую очередь Slices стоит показать вашему продакту и маркетологу. Они позволяют пользователю чаще видеть ваше приложение и быстрее пользоваться необходимой его частью: перейти сразу в нужный раздел, переключить необходимую фичу. Также Slices позволяют участвовать вашему приложению среди поисковой выдачи в Google Search, а также в дальнейшем смогут встраиваться в Google Assistant.

В Slices можно вывести функции, которые связаны с типом вашего приложения и его возможностями. Можно выделить три группы: навигация, выполнение задачи, возвращение к данным. В целом от Slices пользователи получают более простое и быстрое взаимодействие, разработчики — больше трафика и возможностей вернуть пользователя в приложение.

Денис Неклюдов: Признайтесь, вам давно не хватало возможности получать в приложениях информацию с интерактивными элементами из приложений прямо из поиска. Slices решают именно такую задачу, позволяя приложению декларировать UI и действия с ним, который будет встроен в сторонние приложения, в том числе и в поиск. Я очень жду, когда в интерфейсе Google Assistant на смартфоне новости будут встроены из Feedly, фотки прошлого из Timehop, мои полеты из App in the Air, маршрут до работы «Я.Навигатор» и т. д.

Для владельцев приложений это отличная возможность увеличить частоту использования их сервисов, пользователю тоже станет удобнее переключать треки в Spotify, не выходя из нового гоночного симулятора.

А какие есть ограничения?

Александр Смирнов: Slices пока сильно урезан шаблонами: куча приложений встраивается в другие и пользователю нужно понимать, что механизм взаимодействия будет другой. За универсальность всегда нужно платить. Если вы вспомните Widgets, они также были сильно ограничены. Расширение функционала, конечно же, будет, но не думаю, что от этого стоит ждать чего-то большого.

Денис Неклюдов: Соглашусь, сейчас Slices API ограничено некоторым набором возможных шаблонов, которые можно встроить в стороннее приложение, но с новыми версиями будут появляться и новые шаблоны. Разработчики специально запретили кастомные интерфейсы, чтобы иметь возможность контролировать то, как слайсы выглядят во встраиваемом приложении, и чтобы все они были консистентны.

Google добавил в AJP библиотеку для работы с KTX. Каковы ваши впечатления от нее?

Александр Смирнов: Отличный инструмент, это как раз то, чего очень долго не хватало. KTX — это набор extensions для более приятного использования Android API в повседневных задачах.

Очень рекомендую перейти на него всем Android-разработчикам, чтобы повысить продуктивность. Он дает удобство, скорость и хорошее настроение при разработке. С помощью KTX можно еще больше схлопывать boilerplate и получать аккуратный, хорошо читаемый код.

Но нужно хорошенько изучить extensions, которые KTX предоставляет, и просмотреть исходный код этих расширений, чтобы понимать, что там происходит «под капотом». А так никаких подводных камней больше нет, смело можно брать в бой.

Денис Неклюдов: Разработчики AJP пришли к правильному решению: фреймворк должен быть более дружелюбным к Kotlin. Так родился проект с набором статических функций, расширяющий синтаксис фреймворка. В Kotlin много удобных возможностей языка, и как раз extension-функции позволяют обращаться к классам фреймворка в удобной манере. К примеру, view.isVisible идет как короткая альтернатива для view.getVisibility()==View.Visible.

Там очень много различных функций, лучше посмотрите сами. Конечно, можно жить и без них, как, собственно, и без Kotlin. Но так приятнее.

Google всё активнее продвигает Kotlin. Как вы к этому относитесь?
Какие у него перспективы?

Александр Смирнов: К Kotlin я отношусь очень позитивно и с января 2016 использую как основной язык разработки на Android. За это время участвовал в миграции трех компаний с Java на Kotlin. Java, к сожалению, развивается достаточно медленно, и Kotlin для мобильной разработки — глоток свежего воздуха.

Момент, когда Kotlin станет основным языком разработки под Android, — вопрос времени. Уже появляются Android-разработчики, у которых Kotlin является первым языком разработки, а Java — что-то малознакомое. Нас ждет приятное будущее с Kotlin, во всяком случае пока Google не решит построить новую ОС, так сказать, улучшенный Android. Но это вопрос отдаленного будущего, которое не факт что наступит.

Денис Неклюдов: Не могу сказать, что Google активно продвигает Kotlin, скорее некоторые проекты, связанные с самим фреймворком, становятся дружелюбными к Kotlin. Это вовсе не означает, что в 2018-м разработчик на Java под Android — какой-то отщепенец или представитель меньшинства. Но факт, что Kotlin все увереннее и быстрее становится языком по умолчанию для разработчиков, и это не может не радовать.

Когда слышишь о Flutter — кросс-платформенном фреймворке для мобильных приложений от Google, сразу эхом доносится Kotlin Native, который компилируется как под Android, так и под iOS. Многие ждут, когда он станет языком для всего: Android, iOS, Web, Embeded… Планы у JetBrains наполеоновские. Мы же наблюдаем, репортим баги, бетатестим и получаем удовольствие от приятного языка, на который с минимальной болью нам удалось мигрировать свои проекты.

Прошло уже более трех месяцев с выхода Android AJP. Как он себя показал?

Александр Смирнов: C помощью AJP Google планировал помочь Android-разработчикам создавать высококачественные приложения еще быстрее и без зоопарка дополнительных решений. А в качестве бонуса еще сильнее упростили вход новичкам в Android-разработку. Думаю, с поставленной задачей Jetpack справился.

Получился классный набор, решающий задачи большинства разработчиков. Но точно сказать мы сможем примерно через 6–12 месяцев, когда придем к релизу большинства нововведений. Пока это останавливает многих на пути к началу использования AJP в production.

Денис Неклюдов: Google не делал AJP с нуля, а соединил много полезных наработок, которые не входят в сам фреймворк и доупаковываются в приложения их разработчиками. Это хорошая идея — объединить их все под одним модным, ярким именем. Разработчикам хорошо, что теперь есть единый ресурс, где можно найти официальное решение множества проблем. Как минимум это удобно.

Конечно, не все, что входит в этот набор, уже готово для использования в серьезных приложениях, что-то до сих пор на стадиях активной разработки и отладки. От самого фреймворка стойкое ощущение бета-версии, я уж не буду давить на больное и обсуждать IDE. Но мы в Android привыкшие.

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

Какие перспективы развития AJP? Что может появиться нового в следующем году?

Александр Смирнов: Сейчас мы имеем много новых разработок, поэтому в первую очередь их необходимо финализировать и стабилизировать. Затем я бы ожидал планомерного развития каждого из компонентов и инструментария, возможно незначительное добавление чего-то нового. Jetpack был шагом вперед, поэтому от следующего года я ожидаю планомерных улучшений, а вот еще через год может быть и очень интересно. Чего точно стоит ждать в следующем году, так это более плотной и удобной интеграции с Android Studio.

Денис Неклюдов: AJP будет расширяться с каждой новой решенной задачей, которую вынесли в открытый доступ. С каждой версией Android будет развиваться и основа Jetpack в виде AppCompat и Material Components. Что появится в ближайшее время — сложно сказать, я жду, когда добавят Nitrogen — пакет утилит для тестирования приложений в большом масштабе.

Глобально Google постоянно расширяет возможности браузера, к чему это может привести в перспективе?

Денис Неклюдов: Я постоянно повторяю, что не надо воспринимать некоторые шаги Google как что-то глобальное и централизованное. Если у команды Chrome достаточно ресурсов на развитие AMP, PWA, а теперь еще и WebAssembly, это не означает, что есть заговор взять и перевести всех на веб к 202… году. Как и разработка Flutter не означает, что все мы станем использовать этот фреймворк, а потом Android и вовсе будет обречен умереть, ведь сначала ChromeOS, а потом и Fuchsia захватят все устройства пользователей. Этим летом Jake Wharton выступил на Droidcon Berlin с докладом о том, как размывается линия между вебом и нативными приложениями. Из доклада можно вывести, что в современной ситуации нужно как следует поддерживать все платформы отдельно и стараться переиспользовать код между ними. Однако если вы верите, что интернет может во всем мире быть очень высокоскоростным, стабильным и дешевым, то тогда, может, и есть у веб-приложений шанс доминировать. Но пока в это слабо верится.

Александр Смирнов: Переход с нативных приложений на Progressive Web Apps — мечта миллионов веб-разработчиков, менеджеров продуктов и огромного количества других людей. Выбирая PWA-приложение вместо мобайла, компания упрощает разработку, использование, обновление и привлечения пользователей. PWA — хорошее решение для большого сегмента простых мобильных приложений, а полностью отказаться от нативной разработки мы сможем очень нескоро.

Ну а кому интересно послушать новости из мира Android разработки в живую, узнать ещё много интересного про последние коварные планы Анклава Google, пообщаться с экспертами напрямую, ждём на нашей конференции AppsConf 2018.

Для тех, кто предпочитает изучать всё дома, у нас есть YouTube-канал, где будут выложены видеозаписи AppsConf (через несколько месяцев после конференции).

А анонсы всех событийи полезные материалы, включая будущие конференции, анонсы лучших докладов, приглашения на митапы, расшифрованные доклады и полезные статьи, мы публикуем в нашем списке рассылки.

Источник

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

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