This media is not supported in your browser
VIEW IN TELEGRAM
#Android #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
// Пример запуска EyeDropper
val eyeDropperLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) {
result -> if (result.resultCode == Activity.RESULT_OK) {
val color = result.data?.getIntExtra(Intent.EXTRA_COLOR)
// Обрабатываем полученный результат
}
}
fun launchColorPicker() {
val intent = Intent(Intent.ACTION_OPEN_EYE_DROPPER)
eyeDropperLauncher.launch(intent)
}
#Android #Android17
This media is not supported in your browser
VIEW IN TELEGRAM
Что это? Стагнация? Постепенное закрытие Android или подготовка к будущей трансформации ОС? Делюсь мыслями в новом видео https://youtu.be/WIhFnKRMIfY?si=QVsYvdJLVpmCFS8u
#AndroidBroadcast #Android #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
В Android 17 появится встроенный пикер контактов, который позволит выбирать один или несколько контактов, задавая поля которые вам нужны.
Ранее уже был
ACTION_PICK, а теперь будет ACTION_PICK_CONTACTS, который запускает спец лаунчер. Для приложения с targetSdk Android 17 и выше будет происходить автоматическая замена на ACTION_PICK_CONTACTS при вызове ACTION_PICK для контактов. // Указываем какие поля надо получить
val requestedFields = arrayListOf(
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
)
// Создаем Intent
val pickContactIntent = Intent(Intent.ACTION_PICK_CONTACTS).apply {
type = ContactsContract.Contacts.CONTENT_TYPE
putStringArrayListExtra(Intent.EXTRA_REQUESTED_DATA_FIELDS, requestedFields)
}
// Запускаем Intent Laucnher
pickContactLauncher.launch(pickContactIntent)
Пишут что это можно протестировать на старых версиях Android. При отправки Intent c
ACTION_PICK надо будет добавить EXTRA_USE_SYSTEM_CONTACTS_PICKER.Хорошее изменение, давно уже пора было ограничить приложениям доступ ко всем контактам, только вот гранулярный доступ как это было сделано с фото эффективнее, чем пикер. Если со стороны Google Play не будет ограничений для приложений, чтобы использовать разрешение `READ_CONTACTS`, то какой смысл в этой новинках.
Я попытался запустить новый пикер на сборке эмулятора Android 17 Beta 2, но пока там ничего не работает. Наверное поэтому и нету ни одной демонстрации его работы в официальной документации.
🔗 Документация по Contact Picker
#Android #AndrooidDev #Android17 #Безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышла отдельная статья в блоге со скриншотами — можно наконец посмотреть как пикер выглядит в живую.
Из того, что не было в анонсе: на Android 17 старые
ACTION_PICK с контактными типами автоматически апгрейдятся до нового пикера. То есть часть приложений получит приватный выбор контактов вообще без изменений кода. Приятный бонус для тех, кто не торопится мигрировать.В Compose интегрируется через
rememberLauncherForActivityResult — код в статье рабочий, можно брать напрямую.🔗 Источник: android-developers.googleblog.com
📖 Документация: developer.android.com
#Android #AndroidDev #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
В Android 17 появилось новое ограничение, которое затронет авторов музыкальных плееров, подкаст-приложений и всего, что воспроизводит звук в фоне без видимого UI.
Суть в следующем: теперь аудио фреймворк проверяет, имеет ли приложение право взаимодействовать с аудио в фоне. Без корректно запущенного foreground service с While-In-Use (WIU) возможностями звук просто отключится.
WIU — это условие, при котором Foreground Service запущен из видимого UI или в ответ на
MediaSessionEvent. Если FGS запущен, например, по BOOT_COMPLETE и лезет в аудио — он будет заблокирован.Рекомендуемый путь — использовать Jetpack Media3
MediaSessionService, который сам управляет жизненным циклом и не требует дополнительных телодвижений. Если media3 не используется, нужно вручную следить за тем, чтобы mediaPlayback FGS запускался из foreground и оставался живым на время транзиентных сбоев (не дольше 10 минут).На мой взгляд, изменение правильное. Баги, когда приложение просыпается через несколько часов после заморозки и неожиданно начинает воспроизведение — реальная проблема. Другой вопрос, что тихая блокировка без каких-либо ошибок в API сделает диагностику неочевидной. Инструменты вроде `adb dumpsys audio` и logcat помогут, но разработчики, которые не читают changelog, узнают об этом только от пользователей.
🔗 Источник developer.android.com
#Android #AndroidDev #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Developers Blog
Beyond Infotainment: Extending Android Automotive OS for Software-defined Vehicles
News and insights on the Android platform, developer tools, and events.
Оказывается Android Automotive всё ещё жива. Новостей про неё мало, но вот иногда доносится. Подробнее в блоге
#Android #Android17 #Automotive
#Android #Android17 #Automotive
Вышла Android 17 Beta 3 и все изменения там касаются геолокациии
👉 Location Button — разовый доступ к точной геолокации
Новый UI-элемент из Jetpack, который даёт доступ к точным координатам прямо в момент нажатия, без постоянного разрешения. Пользователь нажал кнопку "поделиться местоположением" в вашем приложении — получил данные один раз в рамках сессии. Никаких диалогов с выбором "разрешить всегда / только сейчас". Кнопку можно кастомизировать: цвет, форма, текст из предопределённого списка. Иконка местоположения остаётся обязательной и неизменной. На Android 16 и ниже Jetpack автоматически откатывается к стандартному диалогу разрешений.
👉 Примерная геолокация стала умнее
До этого "приблизительный" режим использовал фиксированную сетку 2×2 км. В малонаселённых районах это фактически деанонимизирует пользователя, потому что в квадрате 2 км может быть буквально несколько человек. В Android 17 размер ячейки теперь зависит от плотности населения — чем меньше людей, тем больше область. Логично, что давно должно было быть так.
👉 Индикатор использования геолокации
По аналогии с микрофоном и камерой, при любом обращении к геолокации теперь будет появляться системный индикатор. Плюс — диалог с историей последних обращений с возможностью сразу перейти в настройки разрешений.
👉 Переработанный диалог разрешений
"Точное" и "Приблизительное" местоположение теперь визуально сильнее разделены, чтобы пользователь осознанно выбирал нужный уровень доступа.
🔗 Источник: android-developers.googleblog.com
#Android #AndroidDev #Android17 #Приватность
Please open Telegram to view this post
VIEW IN TELEGRAM
static final по определению константа, но на практике это использовалось годами для разных хаков.👉 Попытка изменить такое поле через рефлексию бросает
IllegalAccessException 👉 Попытка через JNI
SetStaticLongField() и аналоги — сразу краш приложения 👉 Ограничение включено только для приложений с
targetSdk = 37, но в Beta 1 проверка активна для всех приложений, чтобы выловить проблемы раньшеЗачем это нужно? Пока
static final поле формально могло меняться, рантайм не мог агрессивно оптимизировать код, который к нему обращается. Теперь — может. На практике это чаще всего задевает тесты, которые через рефлексию подменяют константы в production-коде, и старые хаки с логированием или конфигурацией. Где-то жить станет чуть сложнее, но в целом всё закономерно — меньше хаков, честнее код.🔗 Источник: developer.android.com
#android #android17
Please open Telegram to view this post
VIEW IN TELEGRAM
Android 17 добавляет поддержку гибридной схемы подписи APK с постквантовым алгоритмом ML-DSA. Классический ключ подписи комбинируется с постквантовым и подпись становится устойчивой к атакам с использованием квантовых вычислений.
Схема гибридная, а не замена старому подходу, поэтому обратная совместимость сохраняется. Старые устройства верифицируют подпись через классический ключ, новые получают дополнительный слой защиты через ML-DSA.
apksigner.Квантовые компьютеры, способные реально угрожать текущим подписям,появятся не скоро, да и натравливать его на взлом APK - странный сценарий использования такой машины. Но инфраструктурные вещи лучше внедрять заранее, и хорошо, что Play App Signing снимает эту задачу с большинства из нас.
🔗 Источник: developer.android.com
#Android #Android17 #Безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
Главное изменение — доступ к контактам. Приложениям, которым не нужен широкий доступ к контактам, теперь обязательно использовать Android Contact Picker. Никакого READ_CONTACTS без реальной необходимости, которую теперь придется доказываться. Тот самый пикер, который появился в Android 17, сразу стал требованием политики — не опцией.
Я писал об этом ещё когда Contact Picker появились в превью Android 17. Google никогда не оставляет такие инструменты просто опцией — новые системные механизмы приватности рано или поздно становятся политикой магахина.
С геолокацией та же история. Location Button из Android 17 — новый системный UI-элемент для разового доступа к точной позиции — уже прописан в политике как рекомендованный минимум для precise location. Фича ещё в бете, требование уже действует.
🔗 Подробности обновления политик Google Play
#GooglePlay #AndroidDev #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
Что нового:
👉 Ограничения на выделяемую память для приложений (некий новый механизм)
👉 Автоматической обнаружение аномалий в использовании приложениями ресурсов устройства
👉 Пост квантовое шифрование в Android Keystore
Подробно читайте в отдельных постах @android_broadcast
🔗 Источник Android Developers Blog
#Android #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯 Android 17 умеет убивать ваше приложение молча. Без стектрейса. Разбираемся. И ЭТО БЕЗ КЛИКБЕЙТА
Начиная с Android 17, появился системный MemoryLimiter — лимит памяти на процесс, привязанный к общему объёму RAM устройства. Превысил лимит — процесс убит. Без exception, без стектрейса.
Как это выглядит:
👉 причина завершения в ApplicationExitInfo =
👉 в описании строка "MemoryLimiter:AnonSwap"
👉 в Crashlytics этого НЕ будет: это не краш, а системное убийство процесса
И сразу разрушим главное заблуждение: это НЕ про heap size.
👉 битмапы (с Android 8 их пиксели в нативной памяти, в Java-куче их нет)
👉 нативные библиотеки, медиакодеки, Skia
👉 веса on-device ML/LLM моделей
Всё это в getMemoryClass() не видно. Можно сидеть втрое ниже heap-лимита, никогда не словить OOM — и всё равно быть убитым, потому что суммарная нативная память процесса вылезла за порог. getMemoryClass и OOM — про Java-кучу. MemoryLimiter — про весь процесс. Это два разных предохранителя, и старый про новый вам ничего не скажет.
Важные оговорки, чтобы не было паники на пустом месте:
👉 в Android 17 лимиты заданы консервативно: цель — экстремальные утечки и выбросы, а не нормальные приложения
👉 включены только на части устройств
👉 конкретных чисел Google не публиковал. Реальный лимит своего девайса можно снять командой: adb shell am memory-limiter status
В зоне риска тяжёлые сценарии на устройствах среднего и бюджетного сегмента.
Уже есть задокументированный случай на бете — крупная on-device модель Gemma падала на Pixel 6a с 6 ГБ RAM именно из-за MemoryLimiter. 6 ГБ — это уже не бюджетник. Java-куча там небольшая, а нативка с весами модели — гигабайты в RAM.
Два мифа, которые гуляют по сети и которые повторять не надо:
👉 НЕТ подтверждения, что система шлёт «вежливое предупреждение» перед убийством
👉 НЕТ официального «дедлайна для разработчиков 30 июня». Google его не объявлял
Это первый раз, когда дисциплина по памяти не совет, а правило от ОС. Сейчас лимиты мягкие, но направление одностороннее — закручивать будут, а не отпускать. И самое неприятное тут не сам лимит, а его невидимость: пользователи будут терять сессии, а вы не узнаете, пока специально не начнёте смотреть.
💬 Как вы думаете, связаны ли меры с тем, что оперативка стала дорожать и вставить по 12–16 ГБ стало дорого?
#Android #Android17 #Производительность
Начиная с Android 17, появился системный MemoryLimiter — лимит памяти на процесс, привязанный к общему объёму RAM устройства. Превысил лимит — процесс убит. Без exception, без стектрейса.
Как это выглядит:
👉 причина завершения в ApplicationExitInfo =
REASON_OTHER👉 в описании строка "MemoryLimiter:AnonSwap"
👉 в Crashlytics этого НЕ будет: это не краш, а системное убийство процесса
И сразу разрушим главное заблуждение: это НЕ про heap size.
getMemoryClass() и largeHeap ограничивают только Java-кучу — объекты под управлением ART. Превысил и получишь OutOfMemoryError со стектрейсом, который ловится. А новый MemoryLimiter считает другое - анонимную память ВСЕГО процесса:👉 битмапы (с Android 8 их пиксели в нативной памяти, в Java-куче их нет)
👉 нативные библиотеки, медиакодеки, Skia
👉 веса on-device ML/LLM моделей
Всё это в getMemoryClass() не видно. Можно сидеть втрое ниже heap-лимита, никогда не словить OOM — и всё равно быть убитым, потому что суммарная нативная память процесса вылезла за порог. getMemoryClass и OOM — про Java-кучу. MemoryLimiter — про весь процесс. Это два разных предохранителя, и старый про новый вам ничего не скажет.
Важные оговорки, чтобы не было паники на пустом месте:
👉 в Android 17 лимиты заданы консервативно: цель — экстремальные утечки и выбросы, а не нормальные приложения
👉 включены только на части устройств
👉 конкретных чисел Google не публиковал. Реальный лимит своего девайса можно снять командой: adb shell am memory-limiter status
В зоне риска тяжёлые сценарии на устройствах среднего и бюджетного сегмента.
Уже есть задокументированный случай на бете — крупная on-device модель Gemma падала на Pixel 6a с 6 ГБ RAM именно из-за MemoryLimiter. 6 ГБ — это уже не бюджетник. Java-куча там небольшая, а нативка с весами модели — гигабайты в RAM.
Два мифа, которые гуляют по сети и которые повторять не надо:
👉 НЕТ подтверждения, что система шлёт «вежливое предупреждение» перед убийством
👉 НЕТ официального «дедлайна для разработчиков 30 июня». Google его не объявлял
Это первый раз, когда дисциплина по памяти не совет, а правило от ОС. Сейчас лимиты мягкие, но направление одностороннее — закручивать будут, а не отпускать. И самое неприятное тут не сам лимит, а его невидимость: пользователи будут терять сессии, а вы не узнаете, пока специально не начнёте смотреть.
#Android #Android17 #Производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Google выпустила финальный Android 17. Исходники открылись в AOSP, обновление катится на поддерживаемые Pixel-устройства.
Главный сигнал релиза: Android официально Compose-first. Все новые API, библиотеки, инструменты и документация будут создаваться только для Jetpack Compose. View (
android.widget), Fragments, RecyclerView, ViewPager переходят в maintenance mode: только критические баги, никаких новых фич. Вопрос «когда View умрёт» закрыт — она уже в maintenance.Breaking changes при таргете SDK 37:
👉
resizeableActivity=false, screenOrientation, minAspectRatio / maxAspectRatio игнорируются системой на large screen (sw > 600 dp). Игры освобождены, остальные нет.👉
static final поля нельзя менять через reflection: IllegalAccessException. Через JNI — краш.👉 Native-библиотеки через
System.load() должны быть read-only, иначе UnsatisfiedLinkError.👉 Доступ к локальной сети заблокирован по умолчанию: нужен
ACCESS_LOCAL_NETWORK.👉 Lock-Free
MessageQueue быстрее, но ломает код с reflection на приватных полях.‼️ ВАЖНО CameraX: обновитесь до
1.5.2 или 1.6.0+ — краш на Android 17 из-за нового режима dynamic range.Из остального: Generational GC в ART, жёсткие лимиты памяти с принудительным завершением процессов, Post-Quantum Cryptography (ML-DSA), AppFunctions как on-device MCP API для AI-агентов (alpha, Gemini в private preview).
#Android #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Короткий разбор что нового в Android 17 от Google
0:00 Вступление
0:14 Intelligence System: AppFunctions
0:48 Adaptive-first: большие экраны
1:09 Производительность: память и ART
1:47 Приватность и безопасность
2:20 Камеры и медиа
2:41 Итоги
#Android17 #Android
0:00 Вступление
0:14 Intelligence System: AppFunctions
0:48 Adaptive-first: большие экраны
1:09 Производительность: память и ART
1:47 Приватность и безопасность
2:20 Камеры и медиа
2:41 Итоги
#Android17 #Android
#Android #AndroidDev #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
Причина на поверхности — стоимость отправки классических SMS для бизнеса выросла настолько, что мобильная связь как канал верификации уходит на второй план. Практически любой крупный ритейлер, банк или сервис сегодня используют каскадную доставку: код сначала летит вам пушом (потому что бесплатный), потом в Telegram, WhatsApp, Viber, и только в крайнем случае — в старую добрую сим-карту. Бизнес банально экономит бюджеты.
И на этом фоне анонсы Android 17 выглядят как привет из прошлого века. Google тратит колоссальные ресурсы на то, чтобы заделать дыры в безопасности SMS, полностью игнорируя тот факт, что коммуникация людей и брендов давно переместилась в мессенджеры.
В новой версии ОС вводится жесткая трехчасовая задержка на доступ к входящим SMS с OTP-кодами для обычных приложений, чтобы защитить пользователей от троянов-перехватчиков. Разработчикам безальтернативно говорят: используйте нативный SMS Retriever API, который автоматически парсит сообщения по специальной хэш-подписи. Но это лечит симптомы старой болезни. Даже с SMS этот API внедрили далеко не все, потому что поддерживать уникальные хэши под разные сборки на бэкенде — та еще головная боль. А для мессенджеров никакого аналога просто не существует.
В итоге мы упёрлись в глухой тупик для UX:
👉 Если код авторизации пришел в Telegram, ваше приложение не может перехватить его легально.
👉 Пытаться читать пуши сторонних приложений через
NotificationListenerService в Google Play строго запрещено — за это прилетает моментальный бан.👉 Никакого доверенного и безопасного
NotificationRetrieverAPI для мессенджеров Google не предлагает.Пользовательский опыт в Android не развивается в соотвествии с трендами. Пользователь вынужден совершать кучу лишних движений: свернуть экран, открыть мессенджер, скопировать код, вернуться и вставить его руками. Пока Apple в iOS пытается развивать автоподстановку кодов из встроенной почты и системных уведомлений, Android-разработчики остаются заложниками ситуации, где безопасность SMS доведена до стерильности, а реальные сценарии из жизни брошены на произвол судьбы. Готовимся к тому, что процесс авторизации в приложениях на Android 17 станет еще чуть более «ручным».
#Android17 #AndroidDev #UX #Безопасность
Please open Telegram to view this post
VIEW IN TELEGRAM
В Android 17 на Pixel уже работают per-app memory limits. Сегодня Google написал, что в течение года их начнут включать всё больше производителей на устройствах от 4 ГБ RAM и больше.
Как это работает на практике:
1. Превысил бюджет → страницы приложения насильно уходят в zRAM (сжатая RAM). CPU-оверхед → jank и тормоза.
2. Приложение продолжает есть много памяти дальше → процесс убивают.
Можно отловить причину это ловится через
ApplicationExitInfo:-
reason == REASON_OTHER-
description содержит "MemoryLimiter:AnonSwap"Можно ещё повесить
TRIGGER_TYPE_ANOMALY в ProfilingManager и автоматически снимать heap dump в момент, когда лимит сработал.Для локального теста поведения можно использовать adb:
adb shell am memory-limiter status
adb shell am memory-limiter manual <pid> <limit_mb>
adb shell am memory-limiter ignore <uid>|all|none
В Android Vitals и Crashlytics 20.1.0 уже есть отдельные сигналы по этим убийствам. Если у тебя в приложении есть тяжёлые экраны, кэши, игры или foreground-сервисы - следи за метриками.
🔗 Источник - блог Android Developers
#Android #AndroidDev #Android17
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Encrypted Client Hello: сеть больше не видит, на какой домен вы переходите
HTTPS шифрует содержимое запроса. Но в самом начале TLS-рукопожатия телефон всё ещё сообщает серверу имя сайта в открытом виде. Это поле называется SNI (Server Name Indication). Оператору, офисному прокси и тому, кто слушает Wi-Fi, тело письма не видно, а адрес получателя виден. По нему собирают профиль и целят фишинг.
ECH (Encrypted Client Hello) как раз шифрует это имя с первого запроса. Вместе с Private DNS наблюдатель видит IP, но не домен. Работает только если сетевой стек приложения поддерживает ECH и сервер отдаёт конфиг в HTTPS-записи DNS. Иначе клиент шлёт заглушку GREASE, защиты нет.
Google просит обновиться на OkHttp 5.5.0 и включить ECH. В Network Security Config XML появился
<domainEncryption> для всей базы или для конкретного домена. HttpEngine / WebView должны подтянуть платформенные API сами.2. Local Network Protection форсируется
Для приложений с targetSdk 37 локальная сеть будет закрыта по умолчанию. Раньше любое приложение с
INTERNET могло просканировать домашнюю Wi-Fi и увидеть устройства. Теперь же потребуется запросить новое runtime permission ACCESS_LOCAL_NETWORK. Без него TCP-соединения в LAN уходят в таймаут, UDP возвращает EPERM. Касается сокетов, OkHttp, Cronet, mDNS, .local.Легаси-формат с
INTERNET и при target < 37 или на старых версиях ОС останется работать как было.3. Certificate Transparency по умолчанию
Публичные сертификаты должны быть в открытых CT-логах. Если центр сертификации скомпрометировали и выпустили фейковый сертификат «как у банка», это станет сложнее спрятать. Для обычного приложения это «просто заработало», пока вы не используете собственный CA или кривой прокси.
4. 2G выключает оператор, и это про SMS-бластеры
С Android 12 пользователь мог выключить 2G вручную (рекомендую сделать). В 17 это может сделать оператор по умолчанию для своих абонентов. К API приложения это не относится, но объясняет, зачем фича вообще есть. В 2G есть уязвимости, но никто не собирается их латать из-за устаревания стандарта.
Из четырёх пунктов прямо сейчас ломает продукт только локальная сеть. ECH даёт пользу, когда обновили клиент и бэкенд. Остальное фоном.
🔗 Источник - блог Google
#Android #Android17 #Security #Privacy
Please open Telegram to view this post
VIEW IN TELEGRAM