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
🛒 Представили Play Service TrustedTime API

Для тех приложений, которым важно получать настоящее время, а не то, что установлено на устройстве пользователем, всегда приходилось решать вопрос, откуда его взять. Теперь же появилось стандартизированное API.

// Создаем клиента для работы с Trusted Time API
val initializeTrustedTimeClientTask: Task =
TrustedTime.createClient(activity)

val trustedTimeClient: TrustedTimeClient =
initializeTrustedTimeClientTask.await()

val curTime: Long? = trustedTimeClient.computeCurrentUnixEpochMillis()
// Используем системное время, если нет возможности получить из TrustedTime API
// Может не подойти в вашем случае
?: System.currentTimeMillis()


Поддерживается Android 5.0 и выше (SDK 21+)

#google #gms #android
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥108🤯11👍9
В приложении под Android (любой стек), которое вы разрабатываете, есть поддержка edge-to-edge ?
Anonymous Poll
11%
Что это?
52%
Да
23%
Нет
10%
На отдельных экранах
1%
Не пишу код/не пишу под Android
4%
Не участвую в опросе
👍2
🔥Пример разработки реального проекта на KMP и Compose

Лучший способ научиться чему-то - посмотреть, как это делают опытные разработчики, задавать вопросы и иметь доступ ко всем исходникам. Но где это взять и кому доверять?

Уже некоторое время я занимаюсь разработкой неофициального клиента для сервиса Frame.io, который используется теми, кто занимается монтажом видео. Скорее всего сам сервис вам будет неинтересен, но всё это я делаю на основе современного стека:
🏝Kotlin Multiplatform с ⚙️ Compose Multiplatform для Android, iOS и Desktop
🤯Многомодульная архитектура
🔥 Автоматизация процессов вокруг разработки

Весь процесс разработки я освещаю:
🔨 Макеты в Figma от дизайнера
✉️ Telegram чат с обсуждением процесса
📹 Видео с обзорами всех этапов
🐱 Исходный код в GitHub с продакшен подходом в разработке

Чтобы получить доступ, нужно оформить подписку уровня "Senior" на Boosty 🪙 или в Telegram ✉️, а также можно купить доступ один раз и навсегда

При достижении определенного прогресса в разработке проекта доступ по подписке будет закрыт и предоставляться будет только за единоразовую плату. Тем кто оформит подписку и будет оформлена на срок заморозки - автоматом получат доступ навсегда


#AndroidBroadcast #frameio #кодинг
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥10🤯3👏2💯1
31 марта 2025 закрывается App Center

Многие знают App Center как удобный способ распространения сборок Android и iOS приложений

#android #ios #microsoft
🤯20👍9👎4🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Emerge's Build Distribution - замена App Center

Emerge's Build Distribution сделали бесплатным с ограничениями:
5 тысяч загруженных сборок в месяц
Без ограничений на кол-во пользователей
Интеграция SSO включена
SDK для автообновлений

Поддерживается 🤖 Android и iOS

#andorid #ios #инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🤯6👎4
История(12м) как в Альфа-Банке сокращали размер JSON файла, который передается на устройство для работы SDUI. Решением стала шаблонизация для отказа от одинаковых блоков UI с разными данными

#оптимизация #json
👎19👍9🤯3
🤖 Форматируйте дату и время на основе настроек пользователя

В большинстве приложений приходится выводить время и дату, но в каком формате сделать это правильнее всего? Логично использовать формат, который применяется для локали пользователя, но в настройках системы пользователь может указывать формат времени и даты для отображения, а значит, ему хотелось бы видеть такой формат везде. Используйте класс android.text.format.DateFormat (ВАЖНО не путать с одноименным классом из пакета java.text)
// Получаем текущую дату и время
val currentDate: Date = ...

// Получаем форматтер для даты, который учитывает региональные настройки пользователя
val dateFormatter: java.text.DateFormat = android.text.format.DateFormat.getDateFormat(context)
// Форматируем дату
val formattedDate = dateFormatter.format(currentDate)


// Получаем форматтер для времени, который учитывает настройку 12/24-часового формата
val timeFormatter = android.text.format.DateFormat.getTimeFormat(context)
// Форматируем время
val formattedTime = timeFormatter.format(currentDate)


// Получение порядка дня, месяца, года, который определил пользователь
// Например ['d', 'M', 'y']
val char[] = android.text.format.DateFormat.getDateFormatOrder(context)


val is24Hour = android.text.format.DateFormat.is24HourFormat(context)
// Выбираем шаблон форматирования времени
val pattern = if (is24Hour) "HH:mm" else "hh:mm a"
// Форматируем время согласно выбранному шаблону
val formattedTime = DateFormat.format(pattern, currentDate)


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

Если вы не хотите работать со старым Date API, которое есть с самых первый версий Java, то можно получить шаблон для форматирования времени на основе настроек пользователя с помощью android.text.format.DateFormat.getBestDateTimePattern()
// Получаем шаблон форматирования для времени. В данном случае шаблон "hm" используется для получения
// подходящего шаблона, который учитывает настройки пользователя (12/24-часовой формат).
val locale = Locale.getDefault()
val pattern: String = android.text.format.DateFormat.getBestDateTimePattern(locale, "hm")

// Создаем DateTimeFormatter из Java 9 Date Time API
val dateTimeFormatter: DateTimeFormatter = DateTimeFormatter.ofPattern(pattern, locale)

// Пример форматирования текущего времени с использованием DateTimeFormatter
val formattedTime: String = LocalTime.now().format(dateTimeFormatter)
println("Отформатированное время: $formattedTime")


#android #лучшиепрактики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🤯6👎5
🤖 Шаринг ключей из Android Keystore с другими приложениями

В Android 16 KeyStoreManager получил возможность поделиться ключами с другими приложениями на устройстве пользователя

fun generateAndShareKey(targetUid: Int) {
// Генерация нового ключа в Android Keystore
val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
val keyGenSpec = KeyGenParameterSpec.Builder(
KEY_ALIAS,
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.build()
keyGenerator.init(keyGenSpec)
val secretKey: SecretKey = keyGenerator.generateKey()

// Предоставление доступа к ключу приложению с заданным UID
val keyStoreManager = KeyStoreManager.getInstance()
val granted = keyStoreManager.grant(KEY_ALIAS, targetUid)
if (granted) {
Log.d(TAG, "Доступ предоставлен UID: $targetUid")
} else {
Log.e(TAG, "Не удалось предоставить доступ UID: $targetUid")
}
}


Пример отзыва доступа к ключу
fun revokeKeyAccess(targetUid: Int) {
// Отзыв доступа к ключу для приложения с заданным UID
val keyStoreManager = KeyStoreManager.getInstance()
val revoked = keyStoreManager.revoke(KEY_ALIAS, targetUid)
if (revoked) {
Log.d(TAG, "Доступ отозван для UID: $targetUid")
} else {
Log.e(TAG, "Не удалось отозвать доступ для UID: $targetUid")
}
}

#android #android16 #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🤯9👎4
🤖 Новая защита от Intent Redirect в Android 16

Начиная с Android 16, система получила усиленную защиту от атак с редиректом Intent – механизма, с помощью которого злоумышленники могли подменять содержимое Intent для запуска приватных компонентов. Благодаря обновлению:

🔒 Защита по умолчанию:
Система автоматически проверяет входящие Intent, снижая риск выполнения недоверенных операций.

🛠 Минимальные изменения для разработчиков:
Большинство приложений, использующих стандартный механизм Intent, продолжат работать без проблем, однако рекомендуется протестировать проекты в новых условиях.

💡 Повышенная безопасность:
Новые меры помогают предотвратить несанкционированный доступ к данным и выполнение привилегированных действий.

#android #android16 #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27👎4
👍35👎143🤯3
Обновление API токена в OkHttp/Retrofit

OkHttp поддерживает возможность обновления токена через специальный интерфейс Authenticator, которые срабатывает если API запрос на сервер вернет код 401 Unauthorized

class TokenAuthenticator(private val tokenProvider: TokenProvider) : Authenticator {

@Throws(IOException::class)
override fun authenticate(route: Route?, response: Response): Request? = runBlocking {
// Получаем новый токен
val newToken = tokenProvider.refreshToken()

// Если токен не удалось обновить, возвращаем null
if (newToken == null) return null

// Сохраняем новый токен
tokenProvider.saveToken(newToken)

// Создаем новый запрос с обновленным токеном
return response.request.newBuilder()
.header("Authorization", "Bearer $newToken")
.build()
}
}

// Пример API для работы с токеном
interface TokenProvider {
suspend fun getSavedToken(): String?
suspend fun saveToken(newToken: String)
suspend fun refreshToken(token: String?): String?
}

Добавление Authenticator в OkHttp
fun createOkHttpClient(tokenProvider: TokenProvider): OkHttpClient {
return OkHttpClient.Builder()
.authenticator(TokenAuthenticator(tokenProvider))
.build()
}


Я часто сталкивался с тем, что реализация бэкенда возвращает отличный HTTP код и тогда уже приходится делать решение через Interceptor. Делитесь в комментариях как вы пишите логике по обновлению токенов.

#okhttp #сеть #лучшиепрактики
🔥38👍11👎41🤯1
Анализ Android-фич на доступность и внедрение accessibility в процесс разработки (7м)

В статье Android-разработчик из VK рассказывает о совместной работе разработчиков и дизайнеров над повышением доступности контента для людей с ограниченными возможностями, использующих скринридеры. Были проанализированы различные фичи и предприняты шаги для обеспечения доступности функциональности.

Ключевые моменты:
👉 Обеспечение корректной работы с фокусом в UI
👉 Единообразие навигации по элементам UI
👉 Добавление локализованных contentDenoscription, чтобы они озвучивались системой TalkBack

#android #accessibility
👍8👎3
Чтобы оценить как ваше приложение поддерживает accesibility, то можете поставить приложение Accessibility Scanner

#android #accessibility
👍28👎4
Какой контент вы хотите увидеть на YouTube канале Android Broadcast? Пишите в комментариях
👍15👎12👏1🤯1
📹 Запись Мок-собеседование Android-разработчика в Контур

Тех. собеседование прошло в прямом эфире по формат проектирование приложения, кодинг и блиц по Android.
👨‍💻 Эксперт: Евгений Мельцайкин - старший инженер-программист.
👨‍🏫 Кандидат: Android-разработчик с 2 годами опыта.

#AndroidBroadcast #собеседование #собес
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37🔥8👎32
🏝💉 Стал доступен плагин для проверки Koin из IDE

Проблема с валидацией DI графа зависимостей при использования Koin - очень актуальная. Авторы решили подойти к её решению через анализ кода проектов в IDE, хотя уже обсуждали перенос инструмента в CLI.

Для использования вам понадобится зарегистрироваться на сайте Kotzilla.

#kotlin #idea #koin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍7🤯6👎5
🪙 Настройка качества контроля кода в KMP проекте и автоматизация запуска проверок локально и на CI (40 мин)

Продолжаю рассказывать про ход разработки KMP + Compose клиента для Frame.io. В новой части показываю как я настроил анализаторы кода: KtLint, Detekt, Gitleaks, Manifest Guard и другие, а также как стоит подходить к оптимизации скорости проверок локально и на CI. Полезно как для командных проектов, так и для ваших личных проектов (я бы тут даже сказал что еще важнее)!

✉️ Также видео доступно в Telegram (нужно оформить подписку)

Список всех вышедших и планируемых видео тут

#AndroidBroadcast #frameio #kmp #android #ios #качествокода
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👎5👍4
🔍 Ищу кандидата для мок-собеседования Android-разработчика!

📅 6 марта в 19:00 (GMT+3)

Возможность проверить свои силы на техническом собеседовании и получить ценный фидбэк от опытного эксперта.

📌 Формат: онлайн-собеседование (~1.5 часа + обратная связь).
📌 Что разберем: реализацию фичи (практика), многопоточность, Coroutines, Flow, Java/Kotlin, платформу и библиотеки + теоретические вопросы, разбор кода (без лайвкодинга и System Design).

👨‍💻 Кто нужен: Android-разработчик Middle+ с 2+ годами коммерческого опыта, знанием Kotlin Coroutines, Kotlin Flow (Jetpack Compose — плюс).

👨‍💻 Собеседующий: Александр Гирев, Senior Android Developer в Wildberries, провел 150+ интервью, спикер Mobius-2024, автор статей на Хабр.

📅 Заявки принимаются до 23:59 (GMT+3) 2 марта по ссылке
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥37👍13👎5
Разработчик для максимального уменьшения размера Android приложения модифировал R8, чтобы обойти ограничение на использование символов из разных регистров. На небольшом приложение вышел незначительный выигрыш. Подробности в статье

#anroid #proguard #r8
22👎6👍4🤯1
⚰️ Amazon закрывает магазин приложений для Android

C 20 февраля 2025 больше не принимаются новые публикации от разработчиков

Обновления приложений можно загружать до 20 августа 2025

20 августа 2025 прекращается поддержка магазина на Android устройствах, но продолжит работать на Fire TV и Fire Tablet

Amazon Appstore был запущен 22 марта 2011 года

#android #amazon
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉27🤯12👎8👍3🔥2
Qualcomm продлевают поддержку Android до 8 лет!

Новая инициатива Qualcomm и Google позволит устройствам на Snapdragon 8 Elite и будущих чипах получать обновления Android и патчи безопасности в течение 8 лет. Это огромный шаг вперёд для Android-экосистемы, повышая долговечность устройств и снижая затраты для OEM-производителей.

Какие устройства получат поддержку?
👉 Смартфоны на Snapdragon 8 Elite с Android 15
👉 Будущие устройства на новых Snapdragon 8 и 7-й серии
👉 Включает 2 обновления ядра Android Common Kernel

Однако финальное решение остаётся за производителями. Будут ли OEM-ы действительно поддерживать свои устройства так долго? Samsung уже делает 7 лет, Google столько же, но у них свои чипы.

#Android #Qualcomm #Snapdragon
🔥29👍17👎4