У Qualcomm есть собственная технология апскейла для игр - Snapdragon Game Super Resolution 2. Полезно разработчикам игр с 3D. Короткое знакомство в статье (EN,4м)
Ссылка без VPN
#qualcomm #gpu
Ссылка без 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 #автоматизация
Команда мобильной разработки Контура столкнулась с проблемой разного CI/CD для Android и iOS. Разные пайплайны, gitflow, подходы к секретам и использование сабмодулей создавали сложности в сопровождении и развитии инфраструктуры.
Как было:
👉 Разные процессы CI для Android и iOS
👉 Submodules, не подтягивающие обновления
👉 Дублирование кода
👉 Сложности с мультиплатформенным подходом
Как стало:
👉 Перевели CI на единый шаблон
👉 Отказались от сабмодулей
👉 Унифицировали работу с секретами
👉 Перешли на модульную структуру fastlane
Теперь CI/CD работает как сервис: разработчики могут быстро подключать обновления и собирать пайплайны под новые платформы. Даже после ухода ключевых инженеров система продолжает стабильно работать.
UPD1: Этот процесс был выполнен давно и в Контур уже отказались от Fastlane.
#fastlane #android #ios #ci #автоматизация
👍19❤2
Все мы уже привыкли выкладывать сборки в Google Play через AAB, которые передаст на устройство только необходимое для устройства нативные библиотеки. Некоторым приходится раздавать сборку в APK формате. Банальный кейс - отдавать сборку на проверку QA.
Универсальное APK - содержит ресурсы и библиотеки под все возможные устройства, даже те которые не нужны на устройстве пользователя. Обычно нативные библиотеки делают наибольший вклад в конечный размер приложения на устройстве пользователя. Отказ от ненужных позволит снизить размер и скорость доставки до устройства пользователя.
Android Gradle плагин позволяет указать какие ABI нужно добавлять в сборку. Сложность в том, что для финальной сборки обычно надо добавить ABI
Пример задания через параметр
Если вы запускаете приложения из Android Studio на устройстве/эмуляторе, то IDE понимает какую ABI из поддерживаемых стоит включить в APK, чтобы приложение смогло работать. Все остальные исключается. Сборка компактнее - меньше время на передачу и установку тестового билда.
#android #gradle #ndk
Универсальное 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🔥10❤2
Знаете ли вы что такое Docker ?
Anonymous Poll
50%
Знаю
39%
Имею представление
9%
Нет
0%
Не занимаюсь разработкой
2%
Не участвую в опросе
👍10🎉1
Получали недавно такое письмо от Google Play? Так вот вам пора переходить на Photo Picker или направить обоснование доступа к картинкам и видео напрямую. Подробности решения в статье (EN,5м)
🔗 Ссылка без VPN
#android #googleplay #permission
🔗 Ссылка без VPN
#android #googleplay #permission
👍37🤯13🔥4👏1🎉1
Google объвила об отказе разработки Relay - инструмента для генерации Compose кода на основе макетов в Figma. Срок закрытия поддержки - 30 апреля 2025.
Причина закрытия проекта - появление Figma Code Connect с поддержкой Compose
#compose #figma
Причина закрытия проекта - появление Figma Code Connect с поддержкой Compose
#compose #figma
🤯34👍16
Media is too big
VIEW IN TELEGRAM
Сам не знал что это за зверь такой и буду изучать
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
Обязательно надо купить не меньше чем 3 Full Seat, оплата сразу за год и выходит минимум 1620$ в год 🤯 за Organization план
По итогу Code Connect будет доступен только большим компаниям, которые готовы столько потратить на Figma. А я думал попробовать её при разработке своего личного проекта - FrameIO 😔 Простым смертным, да и большинству разработчиков в компаниях придется всё дальше писать ручками.
Я думаю, что Google всетаки делает ставку именно на AI генерацию на основе макетов. Это уже показывали на Google IO при помощи Gemini
#figma
👍10🤯5❤4
Media is too big
VIEW IN TELEGRAM
Запрос, который ввел разработчик
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
Как вы используете AI в разработке?
Anonymous Poll
28%
Использую AI автокомплит кода
17%
Переписываюсь в чате внутри IDE для вопросов по коду
5%
Генерирую код на основе скриншотов
59%
Ищу ответы на вопросы по программированию через AI, а не поисковики
7%
Другие способы использования AI для разработки (пиши в комментах как)
21%
Не использую AI (пиши в комментах почему)
8%
Не участвую в опросе
👍9❤1
Google напомнила про возможность настройки Firebase AppCheck на основе Play Integrity API в вашем приложении, чтобы убедиться, что доступ к бэку происходит из авторизованного приложения и на Android устройстве, которому можно доверять
#android #безопасность
#android #безопасность
👍23
Forwarded from Kotlin Multiplatform Broadcast
Вышел Coil 3.1.0 - популярный загрузчик картинок с поддержкой KMP
👉 Улучшили производительность AsyncImage: скорость работы стала лучше на 25-40%, а потребление памяти - на 35-48%
👉 FakeImage теперь deprecated
👉 Появился ColorImage - полезен для возвращения фейковых значений в тестах и для Compose превью
👉 coil-compose-core больше не зависит от
🛠 Множество других исправлений и улучшений API
#kmp #android #compose
👉 Улучшили производительность 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
#android #viewbinding
👍15❤4🔥3
🤯 Не нужно делать инжект всех зависимостей в конструктор
Встретил код в проекте:
sendDataUseCase не нужен сразу при создании объекта, а нужен только если пользователь нажмёт на кнопку "Send" в UI, что может и не произойти. Так как эта зависимость нужна в конструкторе, то при получении в DI будет сразу происходить создание этой зависимости, что приводит к ненужной нагрузке.
Я рекомендую делать отложенное получение зависимостей с помощью механизма Provider или Lazy. Первый будет ходить за зависимостью в граф каждый раз, а второй - при первом обращении и сохранит её.
Если вы используете Koin на момент написания поста (актуальная версия 4.0), делать отложенный инжект в конструктор возможности нет:
Результат оптимизации
✅ более быстрый старт экранов (зависит от сложности графов)
✅ уменьшение расхода памяти
❌ KOIN потеря явной зависимости в конструкторе. Мне бы очень хотелось увидеть аналог Provider и Lazy в Koin через конструктор, но пока приходится делать свои обертки 😔
#dagger #di #лучшиепрактики
Встретил код в проекте:
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👍21❤4
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
Поэтому скорее бронируйте в календарях вечер 26 февраля. Встретимся в неформальной обстановке, понетворкаем и обсудим:
— взлом интервью и накрутку опыта у кандидатов;
— ИИ в процессе разработки и управлении командой;
— как смириться с тем, что ты не самый сильный по хардам, и начать жить;
— OKR, планирование и стратегия.
И другие темы, которые «болят» или, наоборот, радуют каждого тимлида. Не забудьте зарегистрироваться и отправить этот пост коллегам
#management_avitotech
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤1
This media is not supported in your browser
VIEW IN TELEGRAM
В Android Studio вскоре будет новый терминал. Там появится подсветка и автодополнение. Пока можно попробовать, но когда-то он останется единственным доступным.
Ряды тех, кто ностальгирует по старому UI в IDEA/Android Studio, прибавилось 😁
#androidstudio
Ряды тех, кто ностальгирует по старому UI в IDEA/Android Studio, прибавилось 😁
#androidstudio
🔥36👍12❤3