🔥 Вышел JUnit 6 с поддержкой Kotlin
Прошло более 8 лет с релиза JUnit 5 (10 сентября 2017 года) и вот новая мажорная версия популярного фреймворка для написания Unit тестов в Java
Ключевые изменения в новой версии:
👉 Поддержка Java 17 и Kotlin 2.2+
👉 Переход на аннотации JSpecify
🏝 Поддержка корутин из Kotlin
👉 Поддержка Java Flight Recorder (JFR) из коробки
👉 Поддержка отмены выполнения теста
👉 Удалено deprecated API
👉
#тестирование #kotlin
Прошло более 8 лет с релиза JUnit 5 (10 сентября 2017 года) и вот новая мажорная версия популярного фреймворка для написания Unit тестов в Java
Ключевые изменения в новой версии:
👉 Поддержка Java 17 и Kotlin 2.2+
👉 Переход на аннотации JSpecify
👉 Поддержка Java Flight Recorder (JFR) из коробки
👉 Поддержка отмены выполнения теста
👉 Удалено deprecated API
👉
--fail-fast
режим для запуска тестов из терминала#тестирование #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥49👍10🤯3
Application.onCreate()
и запустите его на фоновом потоке. Профит на графике. Источник - блог @nek_12_personal#firebase #android #performance
Please open Telegram to view this post
VIEW IN TELEGRAM
❤35👍17🔥11🤔4
В программировании есть 2 нерешаемые задачи:выбор имён и когда сбрасывать кэш
Phil Karlton
Какие еще задачи знаете вы? Делитесь в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28🔥7❤2🤯2🤔1
🚀 Ускорения запуска приложения со Splash скрин за счет использования прозрачной Activity.
По умолчанию все Activity в Android являются непрозрачными и перекрывают Activity под ними, что приводит к остановке их работы. Автор статьи решил сделать иначе и запускается MainActivity, а поверх SplashActivity. Это позволяет продолжать работать MainActivity и прогреть код в ней.
Подробности в статье (EN,9м)
#android #производительность
По умолчанию все Activity в Android являются непрозрачными и перекрывают Activity под ними, что приводит к остановке их работы. Автор статьи решил сделать иначе и запускается MainActivity, а поверх SplashActivity. Это позволяет продолжать работать MainActivity и прогреть код в ней.
Подробности в статье (EN,9м)
#android #производительность
👍36🤔9❤4🤯2
Александр Гирев, разработчик из Wildberries, провел собеседование на канале, так как оно происходит для всех кандидатов в компанию. Несколько секций, разные темы и много полезной инфы! Смотреть до конца.
#AndroidBroadcast #собес
Please open Telegram to view this post
VIEW IN TELEGRAM
❤27👍19🔥6🤔1
#dagger #hilt #koin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍6❤4
Алексей Панов @kotlin_adept , опытный мобильный разработчик, реализующий приложения с применением KMP, проведет собеседование на позицию Kotlin Multiplatform разработчика в прямом эфире на YouTube канале "Android Broadcast" (время и дата будут объявлены позже)
Требования к кандидату:
👉 Опыт в мобильной разработки
👉 Опыт с Kotlin
👉 Понимание как происходит разработка приложений с KMP
Будет теория и практика. Это ваш шанс проявить себя и заявить на большую аудиторию о своих возможностях!
Если решили принять участие - заполняйте анкету!
#AndroidBroadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍4❤2🆒1
Из статьи узнаете про:
👉 UncaughtExceptionHandler
👉 ActivityThread
👉 Как происходит остановка процесса
#android #подкапотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Из нового и важного - поддержка создания декларативных циферблатов часов (без кода, только XML править)
#androidstudio #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍4
This media is not supported in your browser
VIEW IN TELEGRAM
#wearos #android #androidstudio
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍7❤3🤯3
Google Play Age Signals API позволяет получить "сигналы" касательно возраста пользователя и дальнейшей реакцией приложения на полученную информацию
Новое API вызвано требованием обязательной проверки магазином возраста пользователя с 1 января 2026 в штате Техас
#googleplay
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯38👍8🤔8
// Создаем экземпляр менеджера
val ageSignalsManager = AgeSignalsManagerFactory.create(
ApplicationProvider.getApplicationContext()
)
// Запрашиваем проверку возрастных сигналов
ageSignalsManager
.checkAgeSignals(AgeSignalsRequest.builder().build())
.addOnSuccessListener { ageSignalsResult ->
// Сохраняем installId для дальнейшего использования
val installId = ageSignalsResult.installId()
when (ageSignalsResult.userStatus()) {
AgeSignalsVerificationStatus.SUPERVISED_APPROVAL_DENIED -> {
// Пользовтаелю меньше 18 лет и родитель запретил доступ
}
AgeSignalsVerificationStatus.VERIFIED -> {
// Пользователю больше 18 лет
}
else -> {
// Обрабатываем другие статусы
}
}
}
#googleplay
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤔8🤯5
Важные советы всем кто используют Room, чтобы база работала быстро:
👉 Индексы — ваши лучшие друзья: без них запросы деградируют до O(n)
👉 Транзакции важны: SQLite разработан для эффективной пакетной обработки
👉 Разбиение на страницы крайне важно: никогда не пытайтесь одновременно обрабатывать тысячи строк
👉 Режим Write-Ahead Logging (WAL) критически важен, особенно для параллельных операций чтения и записи
👉 Настраивайте схему БД для практической производительности, а не только для академической нормализации
Больше полезных советов в статье
#android #room #sqlite
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍12🤯2❤1
Статья с громким названием "Динамические обновления без релизов и BDUI". "Ну вот она инновация", осторожно подумал я перед прочтением
Да, ребята не используются подход BDUI, но фактически вся динамика работает на JS. Как мне показалось, получился некий аналог ReactNative, но специфичный под задачи приложения.
Даже не знаю, лучше или хуже будет BDUI, но можно ли сильно оптимизировать выполнение JS?. JavaScript еще и однопоточный и требует работы между виртуальной машиной для выполнения Java кода и JS
#android #bdui #kmp
Да, ребята не используются подход BDUI, но фактически вся динамика работает на JS. Как мне показалось, получился некий аналог ReactNative, но специфичный под задачи приложения.
Даже не знаю, лучше или хуже будет BDUI, но можно ли сильно оптимизировать выполнение JS?. JavaScript еще и однопоточный и требует работы между виртуальной машиной для выполнения Java кода и JS
#android #bdui #kmp
👍16🤯11❤5🤔1🤝1
🔒 Почему шифрование данных на Android — это не просто “галочка” в настройках, а реальная защита вашей информации (RU,13м)
Телефон сегодня — это не просто устройство, а личный сейф с фотографиями, паролями, документами и банковскими данными. И если кто-то получит к нему доступ, последствия могут быть непредсказуемыми.
В статье на Хабре я подробно рассказываю:
👉 как работает шифрование данных на Android;
👉 чем отличаются симметричные и асимметричные алгоритмы;
👉 какие инструменты реально применяются в приложениях — Cipher, SQLCipher и Android Keystore;
👉 почему офлайн-режим может стать дополнительным уровнем безопасности;
👉 и при чём тут ГОСТ-шифрование 👀
Классная статья для тех кто не копался в шифрование и хочет в это погрузиться хотя бы на базовом уровне
#android #безопасность
Телефон сегодня — это не просто устройство, а личный сейф с фотографиями, паролями, документами и банковскими данными. И если кто-то получит к нему доступ, последствия могут быть непредсказуемыми.
В статье на Хабре я подробно рассказываю:
👉 как работает шифрование данных на Android;
👉 чем отличаются симметричные и асимметричные алгоритмы;
👉 какие инструменты реально применяются в приложениях — Cipher, SQLCipher и Android Keystore;
👉 почему офлайн-режим может стать дополнительным уровнем безопасности;
👉 и при чём тут ГОСТ-шифрование 👀
Классная статья для тех кто не копался в шифрование и хочет в это погрузиться хотя бы на базовом уровне
#android #безопасность
👍30❤7🔥2🤔1🤯1
Forwarded from Mobius — канал конференции
#видеозаписи #МобильныйВторник
Открываем новую видеозапись выступления:
Александр Газаров — Семантический Gradle: публикуем артефакты со спокойствием и уверенностью
😉 YouTube | 📺 VK Видео
Скачать презентацию с сайта Mobius
Открываем новую видеозапись выступления:
Александр Газаров — Семантический Gradle: публикуем артефакты со спокойствием и уверенностью
Скачать презентацию с сайта Mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Александр Газаров — Семантический Gradle: публикуем артефакты со спокойствием и уверенностью
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
Скачать презентацию с сайта Mobius — https://jrg.su/WtQzks
Приходилось ли когда-нибудь развивать библиотечный проект и публиковать из него артефакты? Команде Александра пришлось, когда появилась своя…
— —
Скачать презентацию с сайта Mobius — https://jrg.su/WtQzks
Приходилось ли когда-нибудь развивать библиотечный проект и публиковать из него артефакты? Команде Александра пришлось, когда появилась своя…
👍9🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
#androidstudio #android #ai #gemini #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
❤29🤯18🔥8👍4
Media is too big
VIEW IN TELEGRAM
Команда Android обсуждает Journeys для Android Studio — новый инструмент на базе Gemini, который упрощает создание и поддержку end-to-end тестов.
Journeys позволяет описывать тесты на естественном языке, а ИИ сам преобразует шаги и проверки в реальные действия в вашем приложении.
⏱️ Главные моменты выпуска:
0:00 Введение
1:46 Journeys: новый подход к тестированию на базе ИИ
3:40 Как Journeys работает с Gemini
4:27 Преимущества естественного языка
5:49 Пример из реального проекта: Google Maps
6:53 Отладка с использованием ИИ
8:08 Почему Journeys важен: мост между ручным и автотестированием
9:56 End-to-End тесты с Journeys
12:18 Производительность и кеширование тестов
24:14 Интеграция с Android Studio и Firebase
25:27 Рабочий процесс разработки
31:22 ИИ для всех: не только end-to-end тесты
33:28 Что дальше: обратная связь и планы на будущее
#android #androidstudio #gemini #ai #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍5❤2
Media is too big
VIEW IN TELEGRAM
🎙 Проводит — Алексей Панов @kotlin_adept
🗓 Понедельник, 20 октября, 19:00 (GMT+3)
Kotlin Multiplatform (KMP) набирает всё большую популярность — растёт количество вакансий и интерес со стороны компаний.
Я давно хотел провести реальное собеседование, где Android-разработчика с опытом в KMP будут спрашивать на позицию, где придётся писать на KMP каждый день:
иногда с использованием Compose, а иногда — только шаря логику между платформами.
Будет жарко 🔥
Алексей — один из самых опытных разработчиков, кто давно пишет KMP в проде и отлично понимает экосистему.
Кстати, у него классный Telegram-канал @kotlin_adept — там много полезных инсайтов про KMP.
❗️Запись собеседования появится на канале после эфира.
#AndroidBroadcast #kmp #compose #собеседование #android
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥40👍14❤4
Одна из частых ошибок при использовании DI — получать все зависимости из графа сразу (например, в конструкторе класса).
Так делать не стоит 😬
Получение зависимости из графа — это каскадный процесс, и он должен выполняться только в момент использования.
Поэтому я всегда рекомендую инжектить зависимости для Dagger/Hilt через Lazy (не путайте с kotlin.Lazy) или Provider.
class ViewModel @Inject constructor(
// Зависимость получается из графа сразу при создании
private val useCase: DataUseCase,
// Получаем зависимость из графа каждый раз при обращении Provider.get()
private val useCaseFactory: Provider<DataUseCase>,
// Получаем зависимость из графа при первом обращении
// и затем она кэшируется в Lazy объекте
private val useCaseLazy: Lazy<DataUseCase>,
)
💡 Чтобы перейти на Lazy без боли в существующем коде — можно использовать делегаты свойств в Kotlin:
// Вариант использования без Lazy
class ViewModel @Inject constructor(
private val useCase: DataUseCase
)
// Миграция на Lazy без потери API совместимости
class ViewModel @Inject constructor(
useCaseFactory: Lazy<DataUseCase>,
) {
private val useCase: DataUseCase by useCaseFactory
}
И небольшой хелпер, чтобы это работало красиво 👇
// Функция расширения для использования property делегата
operator fun <T> Lazy<T>.getValue(thisRef: T, property: KProperty<*>): T = get()
Таким образом, вы снижаете нагрузку на DI граф, откладываете инициализацию и избегаете ненужных каскадов при старте компонентов.
#di #dagger #hilt #лучшиепрактики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍55❤16🤔15🤯10