Media is too big
VIEW IN TELEGRAM
Меню Android разработчика таит в себе много полезных настроек, которые нужны, чтобы качественно протестировать работу приложения на устройстве и сделать то, что не получится делать из Android Studio.
Советую посмотреть всем разработчикам и специалистам по тестированию
#android #android15
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33
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
1👍161🔥36❤22
В 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
👍64❤11🤔6
🤯 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). Это станет стандартом…
🎉17👍3
😂 Использование ИИ для разработки: В 4 раза быстрее, в 10 раз больше уязвимостей
Израильская Apiiro представила отчёт о трендах кода от ИИ. На основе богатого набора данных о том, как разработчики пишут код, компания утверждает: из-за ИИ производительность выросла, но безопасность страдает.
Совсем неудивительно. Разработчики решили, что проверять код не стоит, или вовсе менеджеры решили что разработчики не нужны и мы теперь всё сами! К ИИ стоит относиться как активному джуну, который херачит код не в себя! Пустите такой код в прод без ревью или покрытия тестами поверх? Можно ли этому AI доверить покрытие его же кода тестами?
#ai
Израильская Apiiro представила отчёт о трендах кода от ИИ. На основе богатого набора данных о том, как разработчики пишут код, компания утверждает: из-за ИИ производительность выросла, но безопасность страдает.
Совсем неудивительно. Разработчики решили, что проверять код не стоит, или вовсе менеджеры решили что разработчики не нужны и мы теперь всё сами! К ИИ стоит относиться как активному джуну, который херачит код не в себя! Пустите такой код в прод без ревью или покрытия тестами поверх? Можно ли этому AI доверить покрытие его же кода тестами?
#ai
🤔36🤯11👍9🔥6❤1🤝1
Не забудьте только в Gradle модуле включить опцию
android.testOptions.unitTests.includeAndroidResources#android #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🤔9🔥6❤3
Самая важная (она и единственная) фича свежего релиза - получение SupportSQLiteDatabase, являющегося оберткой над RoomDatabase с SQLiteDriver. Честно, не знаю кому это пригодится, поэтому будет полезно узнать от вас в комментариях практический опыт.
Менее масштабные, но всё же важные изменения:
👉 minSdk подняли с 21 до 23
👉 Добавили поддержку KMP таргетов: watchOS и tvOS
🛠 Исправили баги
#android #jetpack #androidjetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥5❤2
📸 Вышла 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
🔥33❤10👍9
Почитал интересную статью от 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
👍11❤2
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
👍26❤6🤔6
Forwarded from AvitoTech
То сейчас вас охватит приступ ностальгии, а рука сама потянется к детским альбомам или …Dendy! В честь наступающего Дня разработчика решили вспомнить, с чего начинались первые шаги в IT авитовцев. В карточках — только часть историй, а все-все-все можно прочитать здесь. Только осторожно, там ооочень залипательно!
В комментариях поздравляйте и отмечайте коллег и, конечно, делитесь своими историями/фотографиями cо своими первыми гаджетами
package main
import "fmt"
func main() {
fmt.Println("Поздравляем с Днём разработчика! 🎉")
#frontend #backend #go #tl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍3
This media is not supported in your browser
VIEW IN TELEGRAM
🔥46❤17🎉15👍7🏆2🤔1