Как и в предыдущих версиях, Android 16 включает изменения в поведении, которые могут повлиять на ваше приложение. Следующие изменения в поведении применяются исключительно к приложениям, ориентированным на Android 16 или выше. Если ваше приложение ориентировано на Android 16 или выше, вам следует внести в него изменения для поддержки этих изменений, где это применимо.
Обязательно ознакомьтесь также со списком изменений в поведении, которые затрагивают все приложения, работающие на Android 16, независимо от targetSdkVersion вашего приложения.
Пользовательский опыт и пользовательский интерфейс системы
В Android 16 (уровень API 36) внесены следующие изменения, призванные обеспечить более согласованный и интуитивно понятный пользовательский интерфейс.
Возможность отказа от участия на всех этапах исчезает.
Android 15 enforced edge-to-edge for apps targeting Android 15 (API
level 35), but your app could opt-out by setting
R.attr#windowOptOutEdgeToEdgeEnforcement to true. For apps
targeting Android 16 (API level 36),
R.attr#windowOptOutEdgeToEdgeEnforcement is deprecated and disabled, and your
app can't opt-out of going edge-to-edge.
- If your app targets Android 16 (API level 36) and is running on an
Android 15 device,
R.attr#windowOptOutEdgeToEdgeEnforcementcontinues to work. - If your app targets Android 16 (API level 36) and is running on an
Android 16 device,
R.attr#windowOptOutEdgeToEdgeEnforcementis disabled.
For testing in Android 16, ensure your app supports edge-to-edge and
remove any use of R.attr#windowOptOutEdgeToEdgeEnforcement so that your app
also supports edge-to-edge on an Android 15 device. To support edge-to-edge,
see the Compose and Views guidance.
Для использования функции прогнозирования требуется миграция или отказ от нее.
For apps targeting Android 16 (API level 36) or higher and running on an
Android 16 or higher device, the predictive back system animations
(back-to-home, cross-task, and cross-activity) are enabled by default.
Additionally, onBackPressed is not called and
KeyEvent.KEYCODE_BACK is not dispatched anymore.
If your app intercepts the back event and you haven't migrated to predictive
back yet, update your app to use supported back navigation APIs, or
temporarily opt out by setting the
android:enableOnBackInvokedCallback attribute to false in the
<application> or <activity> tag of your app's AndroidManifest.xml file.
API-интерфейсы Elegant Font устарели и отключены.
В приложениях для Android 15 (уровень API 35) атрибут elegantTextHeight TextView по умолчанию установлен в true , что заменяет компактный шрифт на более читабельный. Вы можете переопределить это, установив атрибут elegantTextHeight в false .
В Android 16 атрибут elegantTextHeight устарел, и он будет игнорироваться, как только ваше приложение перейдет на Android 16. Поддержка «шрифтов пользовательского интерфейса», контролируемых этими API, прекращается, поэтому вам следует адаптировать все макеты для обеспечения единообразного и перспективного отображения текста на арабском, лаосском, мьянманском, тамильском, гуджарати, каннада, малаялам, ория, телугу и тайском языках.

elegantTextHeight для приложений, ориентированных на Android 14 (уровень API 34) и ниже, или для приложений, ориентированных на Android 15 (уровень API 35), которые переопределяют значение по умолчанию, устанавливая атрибут elegantTextHeight в false . 
elegantTextHeight для приложений, ориентированных на Android 16 (уровень API 36), или для приложений, ориентированных на Android 15 (уровень API 35), которые не переопределяют значение по умолчанию путем установки атрибута elegantTextHeight в false .Основная функциональность
В Android 16 (уровень API 36) внесены следующие изменения, которые модифицируют или расширяют различные основные возможности системы Android.
Оптимизация планирования работ по фиксированной ставке
Prior to targeting Android 16, when scheduleAtFixedRate
missed a task execution due to being outside a valid
process lifecycle, all missed executions immediately
execute when the app returns to a valid lifecycle.
When targeting Android 16, at most one missed execution of
scheduleAtFixedRate is immediately executed when the app
returns to a valid lifecycle. This behavior change is expected to improve app
performance. Test this behavior in your app to check if your app is impacted.
You can also test by using the app compatibility framework
and enabling the STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS compat flag.
форм-факторы устройств
В Android 16 (уровень API 36) внесены следующие изменения для приложений при отображении на устройствах с большими экранами.
Адаптивные макеты
With Android apps now running on a variety of devices (such as phones, tablets, foldables, desktops, cars, and TVs) and windowing modes on large screens (such as split screen and desktop windowing), developers should build Android apps that adapt to any screen and window size, regardless of device orientation. Paradigms like restricting orientation and resizability are too restrictive in today's multidevice world.
Ignore orientation, resizability, and aspect ratio restrictions
For apps targeting Android 16 (API level 36), orientation, resizability, and aspect ratio restrictions no longer apply on displays with smallest width >= 600dp. Apps fill the entire display window, regardless of aspect ratio or a user's preferred orientation, and pillarboxing isn't used.
This change introduces a new standard platform behavior. Android is moving toward a model where apps are expected to adapt to various orientations, display sizes, and aspect ratios. Restrictions like fixed orientation or limited resizability hinder app adaptability. Make your app adaptive to deliver the best possible user experience.
You can also test this behavior by using the
app compatibility framework and enabling the
UNIVERSAL_RESIZABLE_BY_DEFAULT compat flag.
Common breaking changes
Ignoring orientation, resizability, and aspect ratio restrictions might impact your app's UI on some devices, especially elements that were designed for small layouts locked in portrait orientation: for example, issues like stretched layouts and off-screen animations and components. Any assumptions about aspect ratio or orientation can cause visual issues with your app. Learn more about how to avoid them and improve your app's adaptive behaviour.
Allowing device rotation results in more activity re-creation, which can result in losing user state if not properly preserved. Learn how to correctly save UI state in Save UI states.
Implementation details
The following manifest attributes and runtime APIs are ignored across large screen devices in full-screen and multi-window modes:
screenOrientationresizableActivityminAspectRatiomaxAspectRatiosetRequestedOrientation()getRequestedOrientation()
The following values for screenOrientation, setRequestedOrientation(), and
getRequestedOrientation() are ignored:
portraitreversePortraitsensorPortraituserPortraitlandscapereverseLandscapesensorLandscapeuserLandscape
Regarding display resizability, android:resizeableActivity="false",
android:minAspectRatio, and android:maxAspectRatio have no effect.
For apps targeting Android 16 (API level 36), app orientation, resizability, and aspect ratio constraints are ignored on large screens by default. Every app that isn't fully ready can temporarily override this behavior by opting out, which results in the previous behavior of being placed in compatibility mode.
Exceptions
The Android 16 orientation, resizability, and aspect ratio restrictions don't apply in the following situations:
- Games (based on the
android:appCategoryflag) - Users explicitly opting in to the app's default behavior in aspect ratio settings of the device
- Screens that are smaller than
sw600dp
Opt out temporarily
To opt out a specific activity, declare the
PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY manifest property:
<activity ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
...
</activity>
If too many parts of your app aren't ready for Android 16, you can opt out completely by applying the same property at the application level:
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
Здоровье и фитнес
В Android 16 (уровень API 36) внесены следующие изменения, касающиеся данных о здоровье и физической активности.
Разрешения на занятия спортом и поддержание физической формы
For apps targeting Android 16 (API level 36) or higher,
BODY_SENSORS permissions use more granular permissions
under android.permissions.health, which Health Connect
also uses. As of Android 16, any API previously requiring BODY_SENSORS
or BODY_SENSORS_BACKGROUND requires the corresponding
android.permissions.health permission instead. This affects the following data
types, APIs, and foreground service types:
HEART_RATE_BPMfrom Health Services on Wear OSSensor.TYPE_HEART_RATEfrom Android Sensor ManagerheartRateAccuracyandheartRateBpmfromProtoLayouton Wear OSFOREGROUND_SERVICE_TYPE_HEALTHwhere the respectiveandroid.permission.healthpermission is needed in place ofBODY_SENSORS
If your app uses these APIs, it should request the respective granular permissions:
- For while-in-use monitoring of Heart Rate, SpO2, or Skin Temperature:
request the granular permission under
android.permissions.health, such asREAD_HEART_RATEinstead ofBODY_SENSORS. - For background sensor access: request
READ_HEALTH_DATA_IN_BACKGROUNDinstead ofBODY_SENSORS_BACKGROUND.
These permissions are the same as those that guard access to reading data from Health Connect, the Android datastore for health, fitness, and wellness data.
Mobile apps
Mobile apps migrating to use the READ_HEART_RATE and other granular
permissions must also declare an activity to display
the app's privacy policy. This is the same requirement as Health Connect.
Подключение
В Android 16 (уровень API 36) внесены следующие изменения в стек Bluetooth для улучшения связи с периферийными устройствами.
Новые намерения по обработке убытков по облигациям и изменения в шифровании
В рамках улучшенной обработки потери облигаций в Android 16 также представлены 2 новых намерения, которые предоставляют приложениям более подробную информацию об изменениях в потере облигаций и шифровании.
Приложения для Android 16 теперь могут:
- Получать намерение
ACTION_KEY_MISSINGпри обнаружении удаленной потери связи, что позволяет им предоставлять более информативную обратную связь пользователю и предпринимать соответствующие действия. - Получайте намерение
ACTION_ENCRYPTION_CHANGEвсякий раз, когда изменяется статус шифрования ссылки. Это включает изменение статуса шифрования, изменение алгоритма шифрования и изменение размера ключа шифрования. Приложения должны считать связь восстановленной, если ссылка успешно зашифрована при получении намеренияACTION_ENCRYPTION_CHANGEпозже.
Адаптация к различным реализациям OEM
Хотя Android 16 представляет эти новые намерения, их реализация и трансляция могут различаться у разных производителей устройств (OEM). Чтобы гарантировать, что ваше приложение обеспечивает единообразный и надежный опыт на всех устройствах, разработчикам следует разработать обработку потери связи, чтобы изящно адаптироваться к этим потенциальным изменениям.
Мы рекомендуем следующее поведение приложения:
Если транслируется намерение
ACTION_KEY_MISSING:Система отключит соединение ACL (асинхронное соединение без установления соединения), но информация о соединении для устройства будет сохранена (как описано здесь ).
Ваше приложение должно использовать это намерение в качестве основного сигнала для обнаружения потери связи и предоставления пользователю указания подтвердить, что удаленное устройство находится в зоне действия, прежде чем инициировать процедуру забывания устройства или его повторного сопряжения.
Если устройство отключается после получения
ACTION_KEY_MISSING, вашему приложению следует с осторожностью выполнять повторное подключение, поскольку устройство может быть больше не связано с системой.Если намерение
ACTION_KEY_MISSINGНЕ транслируется:Ссылка ACL останется подключенной, а информация о связи для устройства будет удалена системой, аналогично поведению в Android 15.
В этом случае ваше приложение должно продолжать использовать существующие механизмы обработки потерь облигаций, как и в предыдущих версиях Android, для обнаружения и управления событиями потери облигаций.
Новый способ устранения проблемы с Bluetooth.
Все приложения, ориентированные на Android 16, теперь могут отключать сопряжение устройств Bluetooth с помощью общедоступного API в CompanionDeviceManager . Если сопутствующее устройство управляется как ассоциация CDM, то приложение может инициировать удаление связи Bluetooth с помощью нового API removeBond(int) на связанном устройстве. Приложение может отслеживать изменения состояния связи, прослушивая событие широковещательной передачи устройства Bluetooth ACTION_BOND_STATE_CHANGED .
Безопасность
В Android 16 (уровень API 36) внесены следующие изменения в систему безопасности.
Блокировка версий MediaStore
Для приложений, предназначенных для Android 16 или более поздних версий, MediaStore#getVersion() теперь будет уникальным для каждого приложения. Это исключает идентификацию свойств из строки версии, чтобы предотвратить злоупотребление и использование методов снятия отпечатков пальцев. Приложения не должны делать никаких предположений относительно формата этой версии. Приложения уже должны обрабатывать изменения версий при использовании этого API, и в большинстве случаев им не нужно менять свое текущее поведение, если только разработчик не попытался получить дополнительную информацию, выходящую за рамки предполагаемой области действия этого API.
Более безопасные намерения
Функция Safer Intents — это многоэтапная инициатива в области безопасности, призванная повысить защиту механизма распознавания намерений в Android. Цель состоит в защите приложений от вредоносных действий путем добавления проверок во время обработки намерений и фильтрации намерений, не соответствующих определенным критериям.
В Android 15 эта функция была ориентирована на отправляющее приложение. Теперь, в Android 16, управление переходит к принимающему приложению, что позволяет разработчикам включать строгую обработку намерений с помощью манифеста приложения.
Внедряются два ключевых изменения:
Явно заданные намерения должны соответствовать фильтру намерений целевого компонента: если намерение явно нацелено на компонент, оно должно соответствовать фильтру намерений этого компонента.
Интенты без указанного действия не могут соответствовать ни одному фильтру интента: Интенты, у которых не указано действие, не должны обрабатываться ни одним фильтром интента.
Эти изменения применяются только при использовании нескольких приложений и не влияют на обработку намерений в рамках одного приложения.
Влияние
Поскольку эта функция является добровольной, разработчики должны явно включить её в манифесте своего приложения, чтобы она вступила в силу. В результате, влияние этой функции будет ограничено приложениями, разработчики которых:
- Осведомлены о функции «Безопасные намерения» и ее преимуществах.
- Активно внедрять более строгие методы обработки намерений в свои приложения.
Такой подход, предполагающий добровольное участие, минимизирует риск нарушения работы существующих приложений, которые могут полагаться на нынешнее менее безопасное поведение разрешения намерений.
Хотя первоначальное влияние в Android 16 может быть ограниченным, инициатива Safer Intents имеет дорожную карту более широкого воздействия в будущих версиях Android. План состоит в том, чтобы в конечном итоге сделать строгое разрешение намерений поведением по умолчанию.
Функция Safer Intents потенциально может значительно повысить безопасность экосистемы Android, затруднив использование вредоносными приложениями уязвимостей в механизме разрешения намерений.
Однако переход к системе с возможностью отказа от участия и обязательному применению должен осуществляться тщательно, чтобы устранить потенциальные проблемы совместимости с существующими приложениями.
Выполнение
Разработчикам необходимо явно включить более строгий поиск намерений, используя атрибут intentMatchingFlags в манифесте приложения. Вот пример, где эта функция является необязательной для всего приложения, но отключена/отключена для получателя:
<application android:intentMatchingFlags="enforceIntentFilter">
<receiver android:name=".MyBroadcastReceiver" android:exported="true" android:intentMatchingFlags="none">
<intent-filter>
<action android:name="com.example.MY_CUSTOM_ACTION" />
</intent-filter>
<intent-filter>
<action android:name="com.example.MY_ANOTHER_CUSTOM_ACTION" />
</intent-filter>
</receiver>
</application>
Подробнее о поддерживаемых флагах:
| Название флага | Описание |
|---|---|
| enforceIntentFilter | Применяет более строгий контроль соответствия для входящих запросов. |
| никто | Отключает все специальные правила сопоставления для входящих интентов. При указании нескольких флагов конфликтующие значения разрешаются путем отдачи приоритета флагу «none». |
| allowNullAction | Смягчает правила сопоставления, позволяя сопоставлять намерения без действия. Этот флаг используется совместно с "enforceIntentFilter" для достижения определенного поведения. |
Тестирование и отладка
Когда функция принудительного применения включена, приложения должны работать корректно, если вызывающий интент правильно заполнил свой интент. Однако заблокированные интенты будут вызывать предупреждающие сообщения в журнале, такие как "Intent does not match component's intent filter:" и "Access blocked:" с тегом "PackageManager." Это указывает на потенциальную проблему, которая может повлиять на работу приложения и требует внимания.
Фильтр Logcat:
tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")
Фильтрация системных вызовов графического процессора
Для повышения безопасности графического процессора Mali, в производственных сборках заблокированы IOCTL-операции Mali GPU, которые устарели или предназначены исключительно для разработки под GPU. Кроме того, использование IOCTL-операций для профилирования GPU ограничено процессом оболочки или отлаживаемыми приложениями. Более подробную информацию о политике на уровне платформы см. в обновлении SAC.
Это изменение затрагивает устройства Pixel, использующие графический процессор Mali (Pixel 6-9). Компания Arm предоставила официальную классификацию своих IOCTL в Documentation/ioctl-categories.rst в своем релизе r54p2 . Этот список будет поддерживаться в будущих версиях драйверов.
Это изменение не затронет поддерживаемые графические API (включая Vulkan и OpenGL) и, как ожидается, не повлияет на разработчиков или существующие приложения. Инструменты профилирования графического процессора, такие как Streamline Performance Analyzer и Android GPU Inspector, останутся без изменений.
Тестирование
Если вы видите сообщение об отказе SELinux, подобное приведенному ниже, вероятно, ваше приложение пострадало от этого изменения:
06-30 10:47:18.617 20360 20360 W roidJUnitRunner: type=1400 audit(0.0:85): avc: denied { ioctl }
for path="/dev/mali0" dev="tmpfs" ino=1188 ioctlcmd=0x8023
scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:gpu_device:s0 tclass=chr_file
permissive=0 app=com.google.android.selinux.pts
Если вашему приложению необходимо использовать заблокированные IOCTL, пожалуйста, сообщите об ошибке и назначьте ответственного за ее исправление по адресу android-partner-security@google.com.
Часто задаваемые вопросы
Распространяется ли это изменение политики на всех производителей оригинального оборудования (OEM)? Это изменение будет добровольным, но доступным для любых OEM-производителей, желающих использовать этот метод повышения безопасности. Инструкции по внедрению изменения можно найти в документации по внедрению.
Обязательно ли вносить изменения в код OEM-производителя для реализации этого, или это будет включено в новый релиз AOSP по умолчанию? Изменение на уровне платформы будет включено в новый релиз AOSP по умолчанию. Поставщики могут включить это изменение в свой код, если хотят его применить.
Несут ли производители SoC ответственность за поддержание актуальности списка IOCTL? Например, если в моем устройстве используется графический процессор ARM Mali, нужно ли мне обращаться в ARM по поводу каких-либо изменений? Каждый SoC должен обновлять свой список IOCTL для каждого устройства после выпуска драйверов. Например, ARM обновляет свой опубликованный список IOCTL при обновлении драйверов. Однако производители оборудования должны убедиться, что они включают обновления в свою политику SEPolicy и добавляют любые выбранные пользовательские IOCTL в списки по мере необходимости.
Применяется ли это изменение автоматически ко всем устройствам Pixel, представленным на рынке, или для его применения требуется какое-либо действие со стороны пользователя? Это изменение применяется ко всем устройствам Pixel, представленным на рынке, использующим графический процессор Mali (Pixel 6-9). Для применения этого изменения никаких действий со стороны пользователя не требуется.
Повлияет ли использование этой политики на производительность драйвера ядра? Эта политика была протестирована на графическом процессоре Mali с помощью GFXBench, и никаких измеримых изменений в производительности графического процессора не наблюдалось.
Необходимо ли, чтобы список IOCTL соответствовал текущим версиям драйверов пользовательского пространства и ядра? Да, список разрешенных IOCTL должен быть синхронизирован с IOCTL, поддерживаемыми как драйверами пользовательского пространства, так и драйверами ядра. Если IOCTL в драйвере пользовательского пространства или ядра обновляются, список IOCTL SEPolicy также должен быть обновлен в соответствии с ними.
ARM классифицировала IOCTL как «ограниченные» / «инструментальные», но мы хотим использовать некоторые из них в производственных сценариях и/или запретить другие. Отдельные OEM-производители/SoC несут ответственность за определение классификации используемых ими IOCTL на основе конфигурации своих пользовательских библиотек Mali. Список ARM может помочь в принятии этих решений, но сценарий использования для каждого OEM-производителя/SoC может быть разным.
Конфиденциальность
В Android 16 (уровень API 36) внесены следующие изменения, касающиеся конфиденциальности.
Права доступа в локальной сети
Любое приложение, имеющее разрешение на доступ INTERNET , может получить доступ к устройствам в локальной сети. Это упрощает подключение приложений к локальным устройствам, но также имеет последствия для конфиденциальности, например, формирование «отпечатка пальца» пользователя и использование его в качестве прокси-сервера для определения местоположения.
Проект Local Network Protections направлен на защиту конфиденциальности пользователей путем ограничения доступа к локальной сети с помощью нового механизма разрешений во время выполнения.
План выпуска
Это изменение будет внедрено между двумя релизами: 25-м кварталом 2025 года и 26-м кварталом 2026 года соответственно. Разработчикам крайне важно следовать этим рекомендациям для 25-го квартала 2025 года и делиться отзывами, поскольку эти меры защиты будут внедрены в более позднем релизе Android . Кроме того, им потребуется обновить сценарии, зависящие от неявного доступа к локальной сети, используя следующие рекомендации, и подготовиться к отклонению и аннулированию пользователем нового разрешения.
Влияние
На данном этапе LNP — это функция, требующая добровольного участия, то есть она затронет только те приложения, которые согласятся на её использование. Цель этапа добровольного участия — помочь разработчикам приложений понять, какие части их приложения зависят от неявного доступа к локальной сети, чтобы они могли подготовиться к защите этих разрешений в следующем релизе.
Приложения будут затронуты, если они получают доступ к локальной сети пользователя с помощью следующих способов:
- Прямое или библиотечное использование необработанных сокетов по локальным сетевым адресам (например, протокол обнаружения служб mDNS или SSDP).
- Использование классов уровня фреймворка, которые обращаются к локальной сети (например, NsdManager).
Для передачи данных в локальную сеть и из нее требуются разрешения на доступ к локальной сети. В таблице ниже перечислены некоторые распространенные случаи:
| Низкоуровневое управление сетью приложения | Требуется разрешение для локальной сети. |
|---|---|
| Установление исходящего TCP-соединения | да |
| Приём входящих TCP-соединений | да |
| Отправка UDP-сообщений в одноадресной, многоадресной или широковещательной рассылке. | да |
| Приём входящего UDP-сообщения (одноадресная, многоадресная, широковещательная передача) | да |
Эти ограничения реализованы глубоко в сетевом стеке и, следовательно, применяются ко всем сетевым API . Это включает в себя сокеты, созданные в нативном или управляемом коде, сетевые библиотеки, такие как Cronet и OkHttp, и любые API, реализованные поверх них. Попытка разрешения доступа к службам в локальной сети (т.е. к службам с суффиксом .local) потребует разрешения доступа к локальной сети.
Исключения из вышеуказанных правил:
- Если DNS-сервер устройства находится в локальной сети, то для передачи данных к нему или от него (через порт 53) не требуется разрешение на доступ к локальной сети.
- Приложениям, использующим Output Switcher в качестве встроенного средства выбора, не потребуются разрешения на доступ к локальной сети (более подробная информация появится в 4 квартале 2025 года).
Руководство для разработчиков (с возможностью добровольного участия)
Чтобы включить ограничения локальной сети, выполните следующие действия:
- Прошейте устройство версией прошивки 25Q2 Beta 3 или более поздней.
- Установите тестируемое приложение.
Переключите флаг Appcompat в adb:
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>Перезагрузите устройство.
Теперь доступ вашего приложения к локальной сети ограничен, и любая попытка доступа к ней приведет к ошибкам сокета. Если вы используете API, выполняющие операции в локальной сети вне процесса вашего приложения (например, NsdManager), на этапе включения этой функции на них это не повлияет.
Для восстановления доступа необходимо предоставить приложению разрешение на использование NEARBY_WIFI_DEVICES .
- Убедитесь, что приложение указывает разрешение
NEARBY_WIFI_DEVICESв своем манифесте. - Перейдите в Настройки > Приложения > [Название приложения] > Разрешения > Ближайшие устройства > Разрешить .
Теперь доступ вашего приложения к локальной сети должен быть восстановлен, и все ваши сценарии должны работать так же, как и до включения приложения в систему.
После начала применения мер по защите локальной сети, вот как это повлияет на сетевой трафик приложений.
| Разрешение | Исходящий запрос по локальной сети | Исходящий/входящий интернет-запрос | Входящий запрос локальной сети |
|---|---|---|---|
| Предоставленный | Работы | Работы | Работы |
| Не предоставлено | Неудачи | Работы | Неудачи |
Используйте следующую команду, чтобы отключить флаг совместимости приложений.
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Ошибки
Ошибки, возникающие из-за этих ограничений, будут возвращаться вызывающему сокету всякий раз, когда он вызывает функцию send или её вариант для отправки по локальному сетевому адресу.
Примеры ошибок:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Определение локальной сети
В данном проекте под локальной сетью понимается IP-сеть, использующая сетевой интерфейс с возможностью широковещательной передачи, такой как Wi-Fi или Ethernet, но исключающая сотовые (WWAN) или VPN-соединения.
К локальным сетям относятся следующие:
IPv4:
- 169.254.0.0/16 // Локальная ссылка
- 100.64.0.0/10 // CGNAT
- 10.0.0.0/8 // RFC1918
- 172.16.0.0/12 // RFC1918
- 192.168.0.0/16 // RFC1918
IPv6:
- Локальная ссылка
- Маршруты, имеющие прямое соединение
- Заглушки сетей, такие как Thread
- Несколько подсетей (будет определено позже)
Кроме того, как многоадресные адреса (224.0.0.0/4, ff00::/8), так и широковещательные адреса IPv4 (255.255.255.255) классифицируются как адреса локальной сети.
Фотографии, принадлежащие приложению
При запросе разрешений на фото и видео от приложения, ориентированного на SDK 36 или более поздней версии, на устройствах под управлением Android 16 или более поздней версии пользователи, которые решили ограничить доступ к выбранным медиафайлам, увидят любые фотографии, принадлежащие приложению, предварительно выбранному в средстве выбора фотографий. Пользователи могут отменить выбор любого из этих предварительно выбранных элементов, что лишит приложение доступа к этим фотографиям и видео.