Android Broadcast – Telegram
Android Broadcast
14.4K subscribers
3.68K photos
367 videos
11 files
6.1K links
Подборка новостей и статей для Android разработчиков.

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
У Qualcomm есть собственная технология апскейла для игр - Snapdragon Game Super Resolution 2. Полезно разработчикам игр с 3D. Короткое знакомство в статье (EN,4м)

Ссылка без VPN

#qualcomm #gpu
👍20
Как команда Контура объединила CI/CD для мобильных платформ (5м)

Команда мобильной разработки Контура столкнулась с проблемой разного CI/CD для Android и iOS. Разные пайплайны, gitflow, подходы к секретам и использование сабмодулей создавали сложности в сопровождении и развитии инфраструктуры.

Как было:
👉 Разные процессы CI для Android и iOS
👉 Submodules, не подтягивающие обновления
👉 Дублирование кода
👉 Сложности с мультиплатформенным подходом

Как стало:
👉 Перевели CI на единый шаблон
👉 Отказались от сабмодулей
👉 Унифицировали работу с секретами
👉 Перешли на модульную структуру fastlane

Теперь CI/CD работает как сервис: разработчики могут быстро подключать обновления и собирать пайплайны под новые платформы. Даже после ухода ключевых инженеров система продолжает стабильно работать.

UPD1: Этот процесс был выполнен давно и в Контур уже отказались от Fastlane.

#fastlane #android #ios #ci #автоматизация
👍192
Все мы уже привыкли выкладывать сборки в Google Play через AAB, которые передаст на устройство только необходимое для устройства нативные библиотеки. Некоторым приходится раздавать сборку в APK формате. Банальный кейс - отдавать сборку на проверку QA.

Универсальное APK - содержит ресурсы и библиотеки под все возможные устройства, даже те которые не нужны на устройстве пользователя. Обычно нативные библиотеки делают наибольший вклад в конечный размер приложения на устройстве пользователя. Отказ от ненужных позволит снизить размер и скорость доставки до устройства пользователя.

Android Gradle плагин позволяет указать какие ABI нужно добавлять в сборку. Сложность в том, что для финальной сборки обычно надо добавить ABI arm64-v8a и armeabi-v7a, а вот для Intel эмуляторов нужны x86 и x86-64. Чтобы делать это эффективно, я делал механизм передачи значений ABI через переменные при сборке. Это позволяет задавать локально и на CI разные значения, а локальные задавать через файл local.properties или переменную окружения

// Код в Gradle KTS скрипте
fun resolveAbiFilters(): List<String> {
val abisString =
project.findProperty("abiFilter") as String? // Параметр командной строки
?: readFromLocalProperties("abi.filter") // Значение из local.properties
?: System.getenv("ABI_FILTER") // Переменная окружения

return abisString?.split(",") ?: emptyList()
}

fun readFromLocalProperties(key: String): String? {
val localPropertiesFile = rootProject.file("local.properties")
if (!localPropertiesFile.exists()) return null

val localProperties = Properties().apply {
localPropertiesFile.inputStream().use(::load)
}
return localProperties.getProperty(key)
}


// В Android application модуле указываем
android {
defaultConfig {
ndk {
abiFilters = resolveAbiFilters()
}
}
}


Пример задания через параметр
./gradlew assembleRelease -PabiFilter=arm64-v8a,armeabi-v7a


Если вы запускаете приложения из Android Studio на устройстве/эмуляторе, то IDE понимает какую ABI из поддерживаемых стоит включить в APK, чтобы приложение смогло работать. Все остальные исключается. Сборка компактнее - меньше время на передачу и установку тестового билда.

#android #gradle #ndk
👍48🔥102
Получали недавно такое письмо от Google Play? Так вот вам пора переходить на Photo Picker или направить обоснование доступа к картинкам и видео напрямую. Подробности решения в статье (EN,5м)

🔗 Ссылка без VPN

#android #googleplay #permission
👍37🤯13🔥4👏1🎉1
Google объвила об отказе разработки Relay - инструмента для генерации Compose кода на основе макетов в Figma. Срок закрытия поддержки - 30 апреля 2025.

Причина закрытия проекта - появление Figma Code Connect с поддержкой Compose

#compose #figma
🤯34👍16
Media is too big
VIEW IN TELEGRAM
📹 Обзор Beta версии Figma Code Connect

Сам не знал что это за зверь такой и буду изучать

UPD. Понял почему не знал - у меня нет денег на такую лицензию 😂

#figma
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27
Существенный минус Code Connect - фича доступна только на планах Organization и Enterprise, которые стоят 45$ и 75$ в месяц за Full Seat или 25$ и 35$ в месяц за место с Dev Mode 🤯

Обязательно надо купить не меньше чем 3 Full Seat, оплата сразу за год и выходит минимум 1620$ в год 🤯 за Organization план

По итогу Code Connect будет доступен только большим компаниям, которые готовы столько потратить на Figma. А я думал попробовать её при разработке своего личного проекта - FrameIO 😔 Простым смертным, да и большинству разработчиков в компаниях придется всё дальше писать ручками.

Я думаю, что Google всетаки делает ставку именно на AI генерацию на основе макетов. Это уже показывали на Google IO при помощи Gemini

#figma
👍10🤯54
Media is too big
VIEW IN TELEGRAM
📹 Демонстрация как Gemini 1.5 в Android Studio может сгенерировать код

Запрос, который ввел разработчик
Act as an Android app developer, analyze the project provided, generate an updated Profile.kt file for this project so that the Compose Preview is as close to the provided image as possible. Make sure to Include imports. Use Jetpack Compose and Kotlin. Use as many components as possible from the project. Don't omit code, provide the full solution. Do not include any previous responses as context.
@project

#android #compose #gemini #androidstudio
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥47👍5
Google напомнила про возможность настройки Firebase AppCheck на основе Play Integrity API в вашем приложении, чтобы убедиться, что доступ к бэку происходит из авторизованного приложения и на Android устройстве, которому можно доверять

#android #безопасность
👍23
Вышел Coil 3.1.0 - популярный загрузчик картинок с поддержкой KMP

👉 Улучшили производительность AsyncImage: скорость работы стала лучше на 25-40%, а потребление памяти - на 35-48%
👉 FakeImage теперь deprecated
👉 Появился ColorImage - полезен для возвращения фейковых значений в тестах и для Compose превью
👉 coil-compose-core больше не зависит от Dispatchers.Main.immedate, что позволило исправить баги в работе Paparazzi и Roborazzi
🛠 Множество других исправлений и улучшений API

#kmp #android #compose
🔥48👍8
Коротко описал ключевые изменения в ViewBindingPropertyDelegate 2.0 через статью (EN,3м) и вот альтернативная ссылка

#android #viewbinding
👍154🔥3
🤯 Не нужно делать инжект всех зависимостей в конструктор

Встретил код в проекте:
class MyViewModel(
...
private val sendDataUseCase: SendDataUseCase,
...
): ViewModel() {

// Вызывается, когда пользователь в UI нажмёт на "Send"
fun onSendClicked(...) {
viewModelScope.launch {
sendDataUseCase.invoke(...) // либо sendDataUseCase(...)
}
}
}


sendDataUseCase не нужен сразу при создании объекта, а нужен только если пользователь нажмёт на кнопку "Send" в UI, что может и не произойти. Так как эта зависимость нужна в конструкторе, то при получении в DI будет сразу происходить создание этой зависимости, что приводит к ненужной нагрузке.

Я рекомендую делать отложенное получение зависимостей с помощью механизма Provider или Lazy. Первый будет ходить за зависимостью в граф каждый раз, а второй - при первом обращении и сохранит её.
// При использовании Dagger или Hilt
class MyViewModel(
...
private val sendDataUseCase: javax.inject.Provider<SendDataUseCase>, // или dagger.Lazy
...
): ViewModel() {

fun onSendClicked(...) {
viewModelScope.launch {
sendDataUseCase.get()
.invoke(...)
}
}
}


Если вы используете Koin на момент написания поста (актуальная версия 4.0), делать отложенный инжект в конструктор возможности нет:
// При использовании Koin
class MyViewModel(): ViewModel() {

// отложенное получение зависимости в Koin
private val sendDataUseCase: SendDataUseCase by inject()

fun onSendClicked(...) {
viewModelScope.launch {
// аналог Provider - получение зависимости каждый раз из графа
val sendDataUseCase: SendDataUseCase = getKoin().get()
sendDataUseCase.invoke(...)
}
}
}


Результат оптимизации
более быстрый старт экранов (зависит от сложности графов)
уменьшение расхода памяти
KOIN потеря явной зависимости в конструкторе. Мне бы очень хотелось увидеть аналог Provider и Lazy в Koin через конструктор, но пока приходится делать свои обертки 😔

#dagger #di #лучшиепрактики
🔥65👍214
🏆 Хотите чтобы я провел анализ вашего проекта и дал подробный отчет? Делаю ревью проектов для компаний так и по персональным запросом с различным уровнем подробности. Пишите мне в личку @kirill_broadcast с подробностями вашего запроса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🎉6🤯3👏1
Согласитесь на снижение зарплаты на 25%, но рабочая неделя станет 4 дня, а не 5 ?
Anonymous Poll
18%
Да
68%
Нет
8%
На других условиях (пишите в комментариях)
1%
Не работаю в найме
5%
Не участвую в опросе
7👍3
Forwarded from AvitoTech
This media is not supported in your browser
VIEW IN TELEGRAM
Тимлиды, техлиды и все те, кто руководит IT-командами, — ждём вас на Avito TeamLead Drinkup #3⚡️

Поэтому скорее бронируйте в календарях вечер 26 февраля. Встретимся в неформальной обстановке, понетворкаем и обсудим:
— взлом интервью и накрутку опыта у кандидатов;
— ИИ в процессе разработки и управлении командой;
— как смириться с тем, что ты не самый сильный по хардам, и начать жить;
— OKR, планирование и стратегия.

И другие темы, которые «болят» или, наоборот, радуют каждого тимлида. Не забудьте зарегистрироваться и отправить этот пост коллегам (за это + в управленческую карму).

🗂Avito TeamLead Drinkup #3, 26 февраля, Москва.

#management_avitotech
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71
This media is not supported in your browser
VIEW IN TELEGRAM
В Android Studio вскоре будет новый терминал. Там появится подсветка и автодополнение. Пока можно попробовать, но когда-то он останется единственным доступным.

Ряды тех, кто ностальгирует по старому UI в IDEA/Android Studio, прибавилось 😁

#androidstudio
🔥36👍123