🤯 Последний гвоздь в крышку Nova Launcher - создатель лаунчера покинул компанию, которая купила проект и команду в 2022
Kevin Barry создатель и глава команды разработки оставил проект Nova Launcher. Как обещали ранее, выпускать код в open source не стали и вообще будущее туманное, потому Kevin был последним из 12 человек команды в компании.
Бренд точно останется, но вот это уже будет не тот Nova Launcher, который завоевал сердца пользователей.
Ставьте ❤️ если вы используете или использовали лаунчер
#android
Kevin Barry создатель и глава команды разработки оставил проект Nova Launcher. Как обещали ранее, выпускать код в open source не стали и вообще будущее туманное, потому Kevin был последним из 12 человек команды в компании.
Бренд точно останется, но вот это уже будет не тот Nova Launcher, который завоевал сердца пользователей.
Ставьте ❤️ если вы используете или использовали лаунчер
#android
Сделали это через генерацию UI на Compose по макетам из Figma (загружали картинки, а не прямой доступ к данным)
Почему в таки статьях потом не рассказываю про производительность этого UI? Или метрики crash-free? Ускорится то смоли, а вот что с качеством - никто не рассказывает
#android #androidstudio #ai #gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
Что в вашем приложении с поддержкой Passkey?
Anonymous Poll
57%
Что это?
5%
Уже интегрировали в приложение
16%
Не будем поддерживать
5%
Уже в планах по интеграции
3%
Другой вариант
14%
Не участвую в опросе
Please open Telegram to view this post
VIEW IN TELEGRAM
Что добавили из комнентов:
👉 DockedToolbarLayout - компонент для показа действий на текущем экране/странице (обычно закреплен в нижний части экрана)
👉 FloatingToolbarLayout - плавающий набор действия для текущего экрана/страницы
👉 LoadingIndicator - новые индикаторы ожидания
👉 MaterialSplitButton - разделенная кнопка
👉 MaterialButtonGroup - компонент для группировки нескольких кнопок
Что ещё из важного:
👉 Минимальный Android SDK подняли до 21
👉 Включили nonTransitiveRClass (про последствия для вас читайте тут)
👉 Официальная поддержка Material 3 Expressive будет в версии 1.14.0. Уже есть альфа версии
🛠 Много улучшений существующих компонентов и исправления багов
#android #material3 #material3expressive
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Меню Android разработчика таит в себе много полезных настроек, которые нужны, чтобы качественно протестировать работу приложения на устройстве и сделать то, что не получится делать из Android Studio.
Советую посмотреть всем разработчикам и специалистам по тестированию
#android #android15
Please open Telegram to view this post
VIEW IN TELEGRAM
where: Элегантное ограничение типов для чистоты и безопасностиКак часто в Android-разработке вы видели сомнительные
as-приведения? 🤔Вот пример, который недавно попался мне на глаза:
class Sample(private val activity: Activity) {
fun doSomething() {
// Опасно! Может упасть с ClassCastException,
// если activity не реализует LifecycleOwner
(activity as LifecycleOwner).lifecycle.addObserver(...)
}
}Опустим тот факт, что здесь стоит использовать слабую ссылку (
WeakReference) на Activity. Меня больше смутила необходимость вручную приводить Activity к LifecycleOwner.Да, в современной Android-разработке
AppCompatActivity и FragmentActivity реализуют этот интерфейс. Но наша цель — писать чистый и стабильный код, который не полагается на слепую веру, а гарантирует безопасность на уровне типов.💡Решение: Ограничение типов с помощью
whereВ Kotlin мы можем использовать условие
where для универсальных параметров, чтобы указать: «класс A должен быть одновременно и Activity, и LifecycleOwnerclass Sample<A>(private val activity: A)
where A : Activity,
A : LifecycleOwner {
fun doSomething() {
// Теперь activity можно использовать как LifecycleOwner
// БЕЗОПАСНО и без приведения типов
activity.lifecycle.addObserver(...)
}
}
Этот же подход отлично работает и для функций:
fun <A> doSomethingWith(activity: A)
where A : Activity,
A : LifecycleOwner {
// Полная типобезопасность
activity.lifecycle.addObserver(...)
}
В чем выигрыш?
Безопасность: Компилятор гарантирует, что в класс
Sample или функцию doSomethingWith можно передать только объект, который удовлетворяет обоим условиям:ClassCastException в рантайме.as.Используйте силу системы типов Kotlin на полную! Это делает код не только чище, но и стабильнее. 💪
#kotlin #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
В Android Gradle Plugin 8.12.0 представили обновленный resource shrinker - инструмент, который удаляет неиспользуемые ресурсы в финальной сборке приложения.
К посту добавил результаты использования нового шринкера на проекте Androidify. Впечатляет конечно, особенно что сложной настройки не надо.
Чтобы попробовать оптимизированный shrinker, надо включить саму утилиту для модуля и добавить опцию в настройки:
// Добавляем в gradle.properties
android.r8.optimizedResourceShrinking=true
#android #оптимизация
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯 Google сделала оптимизированный Android плагин для KMP модулей. Больше подробностей в посте в @kotlin_broadcast
Telegram
Kotlin Multiplatform Broadcast
‼️ Упрощённый и быстрый: Google выпустила специальный плагин для Android-таргетов в KMP
Google анонсировала официальный Gradle-плагин com.android.kotlin.multiplatform.library для настройки Android-таргета в Kotlin Multiplatform (KMP). Это станет стандартом…
Google анонсировала официальный Gradle-плагин com.android.kotlin.multiplatform.library для настройки Android-таргета в Kotlin Multiplatform (KMP). Это станет стандартом…
😂 Использование ИИ для разработки: В 4 раза быстрее, в 10 раз больше уязвимостей
Израильская Apiiro представила отчёт о трендах кода от ИИ. На основе богатого набора данных о том, как разработчики пишут код, компания утверждает: из-за ИИ производительность выросла, но безопасность страдает.
Совсем неудивительно. Разработчики решили, что проверять код не стоит, или вовсе менеджеры решили что разработчики не нужны и мы теперь всё сами! К ИИ стоит относиться как активному джуну, который херачит код не в себя! Пустите такой код в прод без ревью или покрытия тестами поверх? Можно ли этому AI доверить покрытие его же кода тестами?
#ai
Израильская Apiiro представила отчёт о трендах кода от ИИ. На основе богатого набора данных о том, как разработчики пишут код, компания утверждает: из-за ИИ производительность выросла, но безопасность страдает.
Совсем неудивительно. Разработчики решили, что проверять код не стоит, или вовсе менеджеры решили что разработчики не нужны и мы теперь всё сами! К ИИ стоит относиться как активному джуну, который херачит код не в себя! Пустите такой код в прод без ревью или покрытия тестами поверх? Можно ли этому AI доверить покрытие его же кода тестами?
#ai
Не забудьте только в Gradle модуле включить опцию
android.testOptions.unitTests.includeAndroidResources#android #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
Самая важная (она и единственная) фича свежего релиза - получение SupportSQLiteDatabase, являющегося оберткой над RoomDatabase с SQLiteDriver. Честно, не знаю кому это пригодится, поэтому будет полезно узнать от вас в комментариях практический опыт.
Менее масштабные, но всё же важные изменения:
👉 minSdk подняли с 21 до 23
👉 Добавили поддержку KMP таргетов: watchOS и tvOS
🛠 Исправили баги
#android #jetpack #androidjetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
📸 Вышла Jetpack CameraX 1.5.0 с новыми фичами и готовым UI для видоискателя камеры
Что нового
🤖 Camera Viewfinder - первый релиз стабильный релиз UI для показа камеры с простым встраиванием в UI (View и Compose)
⚙️ Первый релиз
🛠 Исправление багов
#android #камера #jetpack #compose
Что нового
androidx.camera:camera-compose - работа с камерой в Compose UI🛠 Исправление багов
// Пример View Finder в Compose
val currentSurfaceRequest: SurfaceRequest
by viewModel.surfaceRequests.collectAsState()
val coordinateTransformer = remember { MutableCoordinateTransformer() }
CameraXViewfinder(
surfaceRequest = surfaceRequest,
// Can also use EMBEDDED
implementationMode = ImplementationMode.EXTERNAL,
modifier =
modifier.pointerInput(Unit) {
detectTapGestures {
with(coordinateTransformer) {
val surfaceCoords = it.transform()
viewModel.focusOnPoint(
surfaceRequest.resolution,
surfaceCoords.x,
surfaceCoords.y
)
}
}
},
coordinateTransformer = coordinateTransformer
)
#android #камера #jetpack #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Почитал интересную статью от Google про важность использования HDR. Самое важное - HRD не только про яркость, а именно про правильность передачи цветов в приложениях, особенно когда дело касается фото.
В Android 15 появилось API для контроля того смешивания HDR и SDR контента:
// Требуется, чтобы Windows учитывало желаемый HDR headroom.
// Обратите внимание, что эквивалентный API в SurfaceView НЕ требует
// COLOR_MODE_HDR для ограничения headroom,
// если на SurfaceView отображается HDR-контент.
window.colorMode = ActivityInfo.COLOR_MODE_HDR
// разные значения headroom могут
// использоваться в зависимости от
// желаемого headroom контента
// И особенностей UI-дизайна приложения.
window.desiredHdrHeadroom = when {
/* только SDR */ -> 0f
/* Смешанный, в основном SDR */ -> 1.5f
/* Смешанный, в основном HDR */ -> 3f
/* только HDR */ -> 5f
else -> 0f
}
#android #hdr #android15
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🤯 Сегодня я на Big Tech Night 🔥5 компаний: Яндекс, Сбер, Т-Банк, Lamoda, X5 открыли двери своих офисов, сделали программу из докладов и развлечений. Я буду в офисе Яндекса до самого вечера. Хочу послушать доклады про AI и почувствовать в движе!
Всё буду рассказывать в комментариях под постом🔽
Всё буду рассказывать в комментариях под постом
Please open Telegram to view this post
VIEW IN TELEGRAM