Android Broadcast
14.5K subscribers
3.82K photos
397 videos
11 files
6.29K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
Media is too big
VIEW IN TELEGRAM
📹 НОВОЕ ВИДЕО. Разбор возможностей меню разработчика на Android устройстве

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

Советую посмотреть всем разработчикам и специалистам по тестированию

#android #android15
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 Kotlin 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, и LifecycleOwner

class 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 можно передать только объект, который удовлетворяет обоим условиям:
1️⃣Исключаются ошибки ClassCastException в рантайме.
2️⃣Чистота кода: Исчезают громоздкие и опасные приведения через as.
3️⃣ Выразительность: Сигнатура класса/функции явно сообщает о своих требованиях к переданным зависимостям.

Используйте силу системы типов Kotlin на полную! Это делает код не только чище, но и стабильнее. 💪

#kotlin #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Google прокачала удаление неиспользуемых ресурсов в Android Gradle Plugin

В 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
😂 Использование ИИ для разработки: В 4 раза быстрее, в 10 раз больше уязвимостей

Израильская Apiiro представила отчёт о трендах кода от ИИ. На основе богатого набора данных о том, как разработчики пишут код, компания утверждает: из-за ИИ производительность выросла, но безопасность страдает.

Совсем неудивительно. Разработчики решили, что проверять код не стоит, или вовсе менеджеры решили что разработчики не нужны и мы теперь всё сами! К ИИ стоит относиться как активному джуну, который херачит код не в себя! Пустите такой код в прод без ревью или покрытия тестами поверх? Можно ли этому AI доверить покрытие его же кода тестами?

#ai
🤖 В Android Unit тестах теперь можно положить AndroidManifest.xml, которая будет мержится с манифестом приложения. Тем, кто использует Robolectric, теперь станет жить попроще

Не забудьте только в Gradle модуле включить опцию android.testOptions.unitTests.includeAndroidResources

#android #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Вышел Room 2.8.0

Самая важная (она и единственная) фича свежего релиза - получение 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)
⚙️ Первый релиз 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
🤖 Важность HDR в приложениях для передачи естественных цветов

Почитал интересную статью от 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
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from AvitoTech
☄️Если вы знаете, что такое ZX Spectrum, IBM, и даже «Фаэтон-1»

То сейчас вас охватит приступ ностальгии, а рука сама потянется к детским альбомам или …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
This media is not supported in your browser
VIEW IN TELEGRAM