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
🤖 Шаринг ключей из 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
Еще раз(EN,5м, без VPN) про ограничение публикации Android приложений в Google Play с разрешением READ_MEDIA_IMAGES - доступ ко всем картинкам пользователя на устройстве

Кому разрешено его использовать:
1️⃣ Приложениям галереям
2️⃣ Приложения по редактированию фото
3️⃣ Социальным сетям с функциями шаринга фото (Instagram и Facebook попадают сюда)

Как по мне, фото редакторы и шаринг фото прекрасно может обходиться на выборе фото через Photo Picker без каких либо проблем, а вот пользователям будет безопаснее. Photo Picker - прекрасное решение. Только сделайте его работу стабильным и добавьте поддержку добавления других облаков кроме Google Photos

* Meta, Instagram и Facebook являются экстремистскими организациями и запрещены на территории РФ

#android #googleplay #безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
👎19👍15
Media is too big
VIEW IN TELEGRAM
📹 Building adaptive Android apps (40 минут)

Очень классное видео про то как подходить к разработке приложений без привязки к экрану, а думать именно в терминах пространства для отрисовки

0:00 Введение
4:15 Зачем создавать адаптивные интерфейсы?
7:49 Адаптивность в Compose Material 3
13:01 Создание UI с Compose Material 3 Adaptive
22:07 Положения складных устройств
23:32 Анти-паттерны
26:52 Ввод, выходящий за рамки сенсорного управления
30:36 Тестирование на разных устройствах
36:17 Адаптивный рабочий процесс
39:29 Обратная связь и заключительные замечания

#android #material #большикэкраны
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍4👎4👏2
Forwarded from Surf Mobile Team
Как оживает смартфон: Android на старте 🚀📱

Когда ты включаешь телефон, задумывался ли ты, что происходит внутри? Давай заглянем за кулисы и вместе с Артёмом, Android-разработчиком разберёмся, как запускается система и что скрывается под её капотом.

Для тех, кто работает с мобильными технологиями, этот процесс — не просто рутина. Какие этапы преодолевает система от нажатия кнопки включения до появления интерфейса? И как устройство готовится к полноценной работе? Понимание этого процесса критически важно для оптимизации приложений и повышения их производительности.

🔎 Читай статью от сёрфера и узнай:

🟢 Как Boot ROM подготавливает устройство к загрузке
🟢 Как ядро Linux управляет системой и влияет на её стабильность
🟢 Почему Zygote и System Server так важны для Android

Статья уже на Хабре! А насколько важны эти знания для каждого, кто работает с мобильными платформами — обсудим в комментариях 👇

#Surf #Android #Разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27👎8🔥6
🐘 Вышел Gradle 8.13

🔥 Автоматическая загрузка JVM для Gradle Daemon: теперь Gradle может автоматически загружать необходимую версию JVM для работы Daemon, если подходящая версия не найдена локально.
👉 В Scala-плагине появилась возможность явно задавать версию Scala через расширение scala.
👉 Точные временные метки в JUnit XML: временные метки в отчетах JUnit XML теперь имеют миллисекундную точность, что улучшает детализацию отчетов.
🛠 Более 700 мелких исправлений и улучшений

Кроме того, добавлены улучшения для авторов сборок и разработчиков плагинов, включая улучшенный доступ к директории настроек в скриптах сборки, новый отчет о преобразовании артефактов, возможность создания пользовательских отчетов о тестировании и новый плагин distribution-base - сборка ZIP или TAR с необходимыми артефактами из проекта

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36👎5
🚀 Тестирование ViewModel стало проще

В AndroidX Lifecycle 2.9.0 появилось новое API для тестирования ViewModel - ViewModelScenario. Для использования этого API необходимо подключить артефакт "androidx.lifecycle:lifecycle-viewmodel-testing".

Пример использования:
class JetpackViewModelTest {

@Test
fun testStateRestoration() = runTest { // this = TestScope
viewModelScenario { // this = CreationExtras
SampleViewModel(
scope = this@runTest,
saveStateHandle = createSavedStateHandle(),
)
}.use { scenario: ViewModelScenario ->
scenario.state.data = "testValue"
scenario.recreate()
assertEquals("testValue", scenario.state.data)
}
}
}

class SampleViewModel(
scope: CoroutineScope,
private val saveStateHandle: SavedStateHandle,
) : ViewModel(scope) {
companion object {
private const val STATE_KEY = "state_key"
}

var data: String?
get() = saveStateHandle.get<String>(STATE_KEY)
set(value) {
saveStateHandle.set(STATE_KEY, value)
}
}


#android #kmp #тестирование #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍47👎7
📹 Непростые вопросы про Kotlin Coroutines, Александр Гирев (40м)

Однажды пятничным вечером Александр и его коллега задумались над вопросом: где живут корутины, когда запустивший их coroutineScope героически погибает в жерновах GC? Субботнее утро было проведено за чтением статей и исходников.

Вот так и родилась идея доклада. В нем — ответы на вопросы об устройстве и работе корутин для самых любознательных.

📹 Версия на VK Video

#kotlin #coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM
30👍6👎6