Фреймворк Kotlin с открытым исходным кодом для кроссплатформенных приложений, основанный на Jetpack Compose для Android, сейчас находится в предварительной версии.
Jetpack Compose от Google – это официальный фреймворк для создания пользовательского интерфейса в приложении Android, который на прошлой неделе достиг версии 1.0, одновременно с первым стабильным выпуском Android Studio, 2020.3.1 или Arctic Fox.
Несмотря на то, что только что достигла 1.0, Google сказал: «В Play Store уже есть более 2000 приложений, использующих Compose – фактически, само приложение Play Store использует Compose».
Compose – это декларативная структура, которая отходит от традиционного Android-подхода к иерархии или дереву макетов и элементов управления. Пользовательский интерфейс Compose определяется путем написания функций, аннотированных аннотацией @Composable, которые описывают состояние экрана: функции генерируют пользовательский интерфейс. «По мере изменения состояния приложения ваш пользовательский интерфейс автоматически обновляется, что значительно упрощает быстрое создание пользовательского интерфейса», – сказала команда Google Android.

Jetpack Compose для Android только что достиг версии 1.0
Compose – это фреймворк Kotlin, а Kotlin и Android Studio (официальная среда разработки для Android) были созданы компанией JetBrains, производящей инструменты для разработчиков. Хотя Jetpack Compose предназначен только для Android (в отличие от фреймворка Google Flutter), JetBrains полагает, что Compose также может быть кроссплатформенным. Compose Multiplatform – это перенос фреймворка для macOS, Linux, Windows и Интернета. Версия 1.0 Alpha только что вышла. Хотя это ранняя версия, JetBrains сообщила нам, что она «предоставляет стабильные API, которые разработчики уже должны безопасно использовать».
Мы спросили Николая Иготти, руководителя отдела Compose в JetBrains, почему компания инвестирует в Compose for Desktop, когда у нее уже есть кроссплатформенная среда Java для настольных приложений, используемая в ее IntelliJ IDEA IDE и во многих ее вариантах. «Это в значительной степени Swing с некоторыми модификациями», – сказал Иготти. «Swing – это стандартная среда пользовательского интерфейса JDK, Swing и AWT (абстрактный набор инструментов Windows). Compose – это совершенно другая структура, хотя мы обеспечиваем взаимодействие … Swing – довольно старая структура, выпущенная в конце 90-х, с тех пор люди изменили как они думают о пользовательском интерфейсе “.

Проект Compose for Desktop в среде JetBrains IDE
Compose имеет одну общую черту со Swing: он рисует свои собственные элементы управления, в отличие от некоторых кросс-платформенных фреймворков – например, Java SWT (Standard Widget Toolkit) или Microsoft Xamarin, – которые используют собственные элементы управления. Compose использует графическую библиотеку с открытым исходным кодом Skia, также используемую Google Chrome, Flutter и многими другими фреймворками. Означает ли это, что приложение Compose не будет иметь собственного внешнего вида? «Выбор темы для своего приложения зависит от разработчика, – сказал Иготти. «В этом отношении ситуация аналогична другим фреймворкам, таким как Flutter».
Зависит ли приложение Compose for Desktop от JVM (виртуальной машины Java)? «Мы понимаем, что распространение приложения JVM может быть довольно сложным», – сказал нам Иготти. «У нас есть собственный плагин Gradle, и он использует jpackage и Jlink для создания собственных приложений из приложений JVM. Вы получаете .dmg для Mac, MSI для Windows, пакет .deb для Linux, вы не думаете о JVM». Тем не менее, это скрытое приложение JVM, хотя существует компилятор Kotlin / Native, который этого избегает. «Он будет использоваться в будущем или для разработки настольных компьютеров», – сказал Иготти.
А как насчет веб-приложений? «Мы используем компилятор Kotlin / JS, – сказал Иготти. Веб-версия Compose не настолько продвинута, как настольная версия, и в документации предупреждают, что «API еще не доработан, и можно ожидать критических изменений». Кроме того, в то время как веб-версия действительно использует модель Compose, API отличается и использует HTML и CSS, поэтому с помощью Compose for Desktop можно использовать меньше кода.
«Compose – это другой взгляд на приложения, – сказал Иготти. “Состояние является источником истины для пользовательского интерфейса, а пользовательский интерфейс не имеет состояния, он всегда вычисляется из состояния. В этом отношении Compose [for web] использует один и тот же набор примитивов, общее управление состоянием. Если говорить о точном наборе виджетов, о том, как они устроены, то это не распространяется », – сказал Иготти.
Что является основным драйвером распространения Compose с Android на другие платформы? «Целевая аудитория Compose – это три группы людей. Первая – это разработчики Android, использующие Kotlin и Compose, которые хотят работать с другими платформами. Другая – разработчики Kotlin, которые хотят писать новые приложения, которые« пишут один раз, работают где угодно ». В-третьих, люди, которые не знакомы с Kotlin или Compose, но хотят создать привлекательный пользовательский интерфейс, мы хотим предоставить им инструменты, позволяющие легко это сделать ».
Иготти не хотел назначать даты, но сказал, что он надеется, что бета-версия будет выпущена «в середине осени», и «мы надеемся, что версия 1.0 когда-нибудь в этом году». Это проект с открытым исходным кодом, и «в 21 веке принято считать, что люди не берут плату за фреймворки», – сказал Иготти с бизнес-моделью JetBrains, основанной на инструментах. «Мы хотим создать недостающую часть программного обеспечения», – сказал он.
Обратите внимание, что в Compose нет визуального дизайнера. «Большинство поставщиков хотят отказаться от построителей графического пользовательского интерфейса», – сказал Иготти в пользу декларативного пользовательского интерфейса и способов увидеть это в предварительном просмотре. «Мы предоставляем механизм предварительного просмотра, так что если вы добавите определенную аннотацию к компонуемой функции, то ее можно будет просмотреть без запуска приложения».
JetBrains считает, что разработчики настольных приложений не получают достаточных услуг, что частично подтверждается собственными опросами разработчиков компании. «Рабочий стол для многих людей похож на гражданина второго сорта … он кажется нишей, требующей некоторого внимания».
Будет ли JetBrains использовать Compose для собственных инструментов? Один из них, JetBrains Toolbox (который управляет установленными IDE), уже использует Compose, но Иготти сказал, что существует слишком много наследия, чтобы ожидать, что оно заменит существующую структуру для таких продуктов, как IntelliJ IDEA. «Самый сложный и важный компонент – это редактор, он разрабатывался 20 лет, и очень маловероятно, что он будет переписан в среднесрочной перспективе. Это не JetBrains или моя цель – заставить всех писать в Compose. Наша цель – дать тем, кому нужна лучшая структура, есть шанс ее использовать ».
Мы бегло ознакомились с Compose for Desktop с помощью IntelliJ IDEA Community Edition и базового руководства: все это выглядело немного передовым, но нам удалось отобразить Hello World на экране.
Действительно ли миру нужен еще один кроссплатформенный фреймворк? Flutter от Google, хотя в первую очередь предназначен для мобильных устройств, теперь также нацелен на настольный компьютер, а также на iOS, которую Compose в настоящее время не поддерживает. Однако язык Flutter – это Dart, и хотя использование Dart растет (в первую очередь из-за Flutter), согласно последнему опросу StackOverflow, он все еще менее популярен, чем Kotlin.
Есть свидетельства роста: более 5000 звезд для репозитория GitHub и множество сообщений о проблемах: разработчикам следует ожидать некоторых препятствий, но это признак активности. Compose имеет особый подход к созданию пользовательского интерфейса, и, возможно, лучший способ взглянуть на него – это то, что для тех, кто предпочел эту модель благодаря ее использованию для Android, возможность ориентироваться на другие платформы будет приветствоваться. ®