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
Что самое сложное в собеседовании для разработчиков?
Это не задачи на алгоритмы и не вопросы про фреймворки. Самое сложное — понять, чего от вас ждут.
Я решил помочь разобраться в этом и собрал плейлист с МОК собеседованиями.
Здесь вы найдете:
🔍 Разборы задач с объяснением логики
💡 Советы, как показать свои сильные стороны
🚀 Примеры вопросов, которые задают в топовых компаниях
👉 Посмотреть плейлист можно на YouTube📹 и VK Video 📹
Какой вопрос на собеседовании поставил вас в тупик? Делитесь в комментариях!
#AndroidBroadcast #собес
Это не задачи на алгоритмы и не вопросы про фреймворки. Самое сложное — понять, чего от вас ждут.
Я решил помочь разобраться в этом и собрал плейлист с МОК собеседованиями.
Здесь вы найдете:
🔍 Разборы задач с объяснением логики
💡 Советы, как показать свои сильные стороны
🚀 Примеры вопросов, которые задают в топовых компаниях
👉 Посмотреть плейлист можно на YouTube
Какой вопрос на собеседовании поставил вас в тупик? Делитесь в комментариях!
#AndroidBroadcast #собес
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36❤7👍2
Если вы хотите провести собеседование, чтобы показать как оно устроено в вашей компании, а может наоборот устроить душное невыносимое собеседование - пишите @kirill_broadcast. Найду подходящего кандидата для вас!
🤯18❤5👍4
Chrome на Android получит поддержку сторонних менеджеров паролей
Ранее стало известно, что в Beta-версии все менеджеры паролей для Android начнут работать с Chrome. Google на основе обратной связи добавила полезные возможности:
1️⃣ Узнать любому приложению, используется ли в Chrome сторонний менеджер паролей
2️⃣ Добавили Deep Link для открытия настройки выбора сервиса автозаполнения в Chrome
Chrome 135 выйдет в релиз 1 апреля 2025
#android #autofill #chrome
Ранее стало известно, что в Beta-версии все менеджеры паролей для Android начнут работать с Chrome. Google на основе обратной связи добавила полезные возможности:
val autofillSettingsIntent = Intent(Intent.ACTION_APPLICATION_PREFERENCES).apply {
addCategory(Intent.CATEGORY_DEFAULT)
addCategory(Intent.CATEGORY_APP_BROWSER)
addCategory(Intent.CATEGORY_PREFERENCE)
}
val chooser = Intent.createChooser(autofillSettingsIntent, "Pick Chrome Channel")
startActivity(chooser)Chrome 135 выйдет в релиз 1 апреля 2025
#android #autofill #chrome
Please open Telegram to view this post
VIEW IN TELEGRAM
👏17👍4🤯3🎉3
👍29❤3
Руководитель отдела "Platforms & Devices" объявил о программе добровольного выхода для сотрудников группы из США. Новое подразделение было создано в результате объединения Android, ChromeOS и отдела разработки устройств Pixel.
Заявление:
Не веришь в светлую миссию - уходи с выходным пособием
Источник 9TO5Google
#google
Заявление:
Команда Platforms & Devices предлагает программу добровольного выхода, которая предоставляет работающим в этой команде сотрудникам Google из США возможность добровольно покинуть компанию с выходным пособием. Это произошло после объединения двух крупных организаций в прошлом году. В этой команде наблюдается огромный импульс, и учитывая множество важной работы впереди, мы хотим, чтобы каждый был глубоко предан нашей миссии и сосредоточен на создании отличных продуктов быстро и эффективно.
Не веришь в светлую миссию - уходи с выходным пособием
Источник 9TO5Google
👍11❤2
2.3 миллиона приложений не опубликовали в Google Play в 2024, а 1.3 миллиона приложениям отказали в запросе разрешений для доступа к конфиденциальным данным пользователей (необоснованные разрешения приложений)
Google Play подвела итоги защиты разработчиков и пользователей за 2024. Вот основные факты:
🤔 Google постоянно предотвращает публикацию в Google Play приложений, нарущаюших политику магазина, и удалила 158 тыс аккаунтов разработчиков, пытающихся публиковать вредоносные приложения.
⭐️ Google много инвестируют в ИИ для ускорения проверки и 92% вредоносных приложений проверяется им.
🤖 91% установок всех приложений в Google Play Store используют возможности защиты Android 13 или более поздней версии. (хотя уже скоро релизнется Android 16 😂)
🚀 Приложения, использующие Google Play Integrity API, в среднем на 80% реже используются из непроверенных и ненадежных источников.
🔍 Google Play Protect ежедневно сканирует более 200 миллиардов приложений
❌ В 2024 году сканирование в режиме реального времени Google Play Protect выявило более 13 миллионов новых вредоносных приложений, установленных не из Google Play
🤯 Было предотвращено более 36 миллионов попыток установок приложения не из Google Play в рамках пилотной программы по определению фрода в 9 странах.
#googleplay #безопасность
Google Play подвела итоги защиты разработчиков и пользователей за 2024. Вот основные факты:
🤔 Google постоянно предотвращает публикацию в Google Play приложений, нарущаюших политику магазина, и удалила 158 тыс аккаунтов разработчиков, пытающихся публиковать вредоносные приложения.
🚀 Приложения, использующие Google Play Integrity API, в среднем на 80% реже используются из непроверенных и ненадежных источников.
🔍 Google Play Protect ежедневно сканирует более 200 миллиардов приложений
🤯 Было предотвращено более 36 миллионов попыток установок приложения не из Google Play в рамках пилотной программы по определению фрода в 9 странах.
#googleplay #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🤯5🔥3❤2
FFShare - Android-приложение с открытым исходны кодом для сжатия картинок, видео и аудио файлов с помощью ffmpeg
#android #пример #opensource #fdroid
#android #пример #opensource #fdroid
👍22
Streamflix - приложение-кинотеатр с открытым исходным кодов для Android смартфонов, планшетов и Android TV для просмотра фильмов и ТВ шоу. Для видео используется ExoPlayer из Jetpack Media 3
#android #пример #opensource #androidtv #медиа
#android #пример #opensource #androidtv #медиа
🔥23👍3❤2
Стек технологий: Jetpack Compose, KotlinX Coroutines, Room, Dagger + Hilt, Coil
#android #opensource #пример #fdroid #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39❤5🤯2
‼️ Защита от атак на приложения через изменение AndroidManifest
При сборке APK финальный AndroidManifest формируется из нескольких источников:
👉 AndroidManifest всех модулей в коде вашего приложения
👉 AndroidManifest из подключённых AAR-зависимостей
👉 Изменения через Android Gradle Plugin (например, подстановка параметров и указание namespace)
👉 Сторонние Gradle-плагины, модифицирующие манифест через AGP
В результате итоговый AndroidManifest представляет собой комбинацию множества частей. Подробнее о процессе его объединения я рассказывал в этом📹 видео.
🔒 Как защититься от скрытых изменений манифеста?
Рекомендую автоматизировать проверку с помощью Gradle-плагина manifest-guard.
✅ Плагин позволяет сохранить эталонный AndroidManifest и автоматически проверять его при сборке проекта.
✅ Можно настроить запуск проверки на CI: если манифест изменился, сборка упадёт, а вы получите HTML-отчёт с разницей между эталоном и текущей версией.
#android #безопасность
При сборке APK финальный AndroidManifest формируется из нескольких источников:
👉 AndroidManifest всех модулей в коде вашего приложения
👉 AndroidManifest из подключённых AAR-зависимостей
👉 Изменения через Android Gradle Plugin (например, подстановка параметров и указание namespace)
👉 Сторонние Gradle-плагины, модифицирующие манифест через AGP
В результате итоговый AndroidManifest представляет собой комбинацию множества частей. Подробнее о процессе его объединения я рассказывал в этом
🔒 Как защититься от скрытых изменений манифеста?
Рекомендую автоматизировать проверку с помощью Gradle-плагина manifest-guard.
✅ Плагин позволяет сохранить эталонный AndroidManifest и автоматически проверять его при сборке проекта.
✅ Можно настроить запуск проверки на CI: если манифест изменился, сборка упадёт, а вы получите HTML-отчёт с разницей между эталоном и текущей версией.
#android #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍47🤯8