Изменения в поведении: приложения для Android 16 или более поздней версии.

Как и предыдущие выпуски, Android 16 включает изменения поведения, которые могут повлиять на ваше приложение. Следующие изменения поведения применяются исключительно к приложениям, предназначенным для Android 16 или выше. Если ваше приложение предназначено для Android 16 или выше, вам следует изменить свое приложение для поддержки этих поведений, где это применимо.

Обязательно ознакомьтесь со списком изменений поведения, которые влияют на все приложения, работающие на Android 16, независимо от targetSdkVersion вашего приложения.

Пользовательский опыт и системный пользовательский интерфейс

Android 16 (уровень API 36) включает в себя следующие изменения, направленные на создание более последовательного и интуитивно понятного пользовательского опыта.

Отказ от использования Edge to Edge прекращается

Android 15 обеспечивает сквозную поддержку приложений, ориентированных на Android 15 (уровень API 35), но ваше приложение может отказаться, установив для R.attr#windowOptOutEdgeToEdgeEnforcement значение true . Для приложений, предназначенных для Android 16 (уровень API 36), R.attr#windowOptOutEdgeToEdgeEnforcement устарел и отключен, и ваше приложение не может отказаться от перехода от края к краю.

  • Если ваше приложение предназначено для Android 16 (уровень API 36) и работает на устройстве Android 15, R.attr#windowOptOutEdgeToEdgeEnforcement продолжает работать.
  • Если ваше приложение предназначено для Android 16 (уровень API 36) и работает на устройстве Android 16, R.attr#windowOptOutEdgeToEdgeEnforcement отключен.

Для тестирования в Android 16 Beta 3 убедитесь, что ваше приложение поддерживает сквозную технологию, и удалите любое использование R.attr#windowOptOutEdgeToEdgeEnforcement , чтобы ваше приложение также поддерживало сквозную поддержку на устройстве Android 15. Чтобы обеспечить сквозную поддержку, см. руководство по созданию и представлениям .

,

Android 15 обеспечивает сквозную поддержку приложений, ориентированных на Android 15 (уровень API 35), но ваше приложение может отказаться, установив для R.attr#windowOptOutEdgeToEdgeEnforcement значение true . Для приложений, предназначенных для Android 16 (уровень API 36), R.attr#windowOptOutEdgeToEdgeEnforcement устарел и отключен, и ваше приложение не может отказаться от перехода от края к краю.

  • Если ваше приложение предназначено для Android 16 (уровень API 36) и работает на устройстве Android 15, R.attr#windowOptOutEdgeToEdgeEnforcement продолжает работать.
  • Если ваше приложение предназначено для Android 16 (уровень API 36) и работает на устройстве Android 16, R.attr#windowOptOutEdgeToEdgeEnforcement отключен.

Для тестирования в Android 16 Beta 3 убедитесь, что ваше приложение поддерживает сквозную технологию, и удалите любое использование R.attr#windowOptOutEdgeToEdgeEnforcement , чтобы ваше приложение также поддерживало сквозную поддержку на устройстве Android 15. Чтобы обеспечить сквозную поддержку, см. руководство по созданию и представлениям .

,

Android 15 обеспечивает сквозную поддержку приложений, ориентированных на Android 15 (уровень API 35), но ваше приложение может отказаться, установив для R.attr#windowOptOutEdgeToEdgeEnforcement значение true . Для приложений, предназначенных для Android 16 (уровень API 36), R.attr#windowOptOutEdgeToEdgeEnforcement устарел и отключен, и ваше приложение не может отказаться от перехода от края к краю.

  • Если ваше приложение предназначено для Android 16 (уровень API 36) и работает на устройстве Android 15, R.attr#windowOptOutEdgeToEdgeEnforcement продолжает работать.
  • Если ваше приложение предназначено для Android 16 (уровень API 36) и работает на устройстве Android 16, R.attr#windowOptOutEdgeToEdgeEnforcement отключен.

Для тестирования в Android 16 Beta 3 убедитесь, что ваше приложение поддерживает сквозную технологию, и удалите любое использование R.attr#windowOptOutEdgeToEdgeEnforcement , чтобы ваше приложение также поддерживало сквозную поддержку на устройстве Android 15. Чтобы обеспечить сквозную поддержку, см. руководство по созданию и представлениям .

,

Android 15 обеспечивает сквозную поддержку приложений, ориентированных на Android 15 (уровень API 35), но ваше приложение может отказаться, установив для R.attr#windowOptOutEdgeToEdgeEnforcement значение true . Для приложений, предназначенных для Android 16 (уровень API 36), R.attr#windowOptOutEdgeToEdgeEnforcement устарел и отключен, и ваше приложение не может отказаться от перехода от края к краю.

  • Если ваше приложение предназначено для Android 16 (уровень API 36) и работает на устройстве Android 15, R.attr#windowOptOutEdgeToEdgeEnforcement продолжает работать.
  • Если ваше приложение предназначено для Android 16 (уровень API 36) и работает на устройстве Android 16, R.attr#windowOptOutEdgeToEdgeEnforcement отключен.

Для тестирования в Android 16 Beta 3 убедитесь, что ваше приложение поддерживает сквозную технологию, и удалите любое использование R.attr#windowOptOutEdgeToEdgeEnforcement , чтобы ваше приложение также поддерживало сквозную поддержку на устройстве Android 15. Чтобы обеспечить сквозную поддержку, см. руководство по созданию и представлениям .

Для прогнозируемого возврата требуется миграция или отказ

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.

The predictive back-to-home animation.
The predictive cross-activity animation.
The predictive cross-task animation.

API элегантных шрифтов устарели и отключены

В приложениях, предназначенных для 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, или для приложений, ориентированных на Android 15 (уровень API 35), которые не переопределили значение по умолчанию, установив для атрибута elegantTextHeight значение false .

Основная функциональность

Android 16 (уровень API 36) включает в себя следующие изменения, которые изменяют или расширяют различные основные возможности системы Android.

Оптимизация графика работы с фиксированной ставкой

До ориентации на Android 16, когда scheduleAtFixedRate пропускало выполнение задачи из-за того, что оно находилось за пределами допустимого жизненного цикла процесса , все пропущенные выполнения выполнялись немедленно, когда приложение возвращалось к допустимому жизненному циклу.

При настройке Android 16 не более одного пропущенного выполнения scheduleAtFixedRate выполняется немедленно, когда приложение возвращается к допустимому жизненному циклу. Ожидается, что это изменение поведения улучшит производительность приложения. Проверьте это поведение в своем приложении, чтобы проверить, не затронуто ли оно ваше приложение. Вы также можете протестировать, используя платформу совместимости приложений и включив флаг совместимости STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS .

Форм-факторы устройств

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), Android 16 includes changes to how the system manages orientation, resizability, and aspect ratio restrictions. On displays with smallest width >= 600dp, the restrictions no longer apply. Apps also 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, so we recommend making 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:

The following values for screenOrientation, setRequestedOrientation(), and getRequestedOrientation() are ignored:

  • portrait
  • reversePortrait
  • sensorPortrait
  • userPortrait
  • landscape
  • reverseLandscape
  • sensorLandscape
  • userLandscape

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, but 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:appCategory flag)
  • 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 are transitioning to the granular permissions under android.permissions.health also used by Health Connect. Any API previously requiring BODY_SENSORS or BODY_SENSORS_BACKGROUND now requires the corresponding android.permissions.health permission. This affects the following data types, APIs, and foreground service types:

If your app uses these APIs, it should now request the respective granular permissions:

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 также представлены две новые функции, позволяющие приложениям лучше понимать потери по облигациям и изменения в шифровании.

Приложения, ориентированные на Android 16, теперь могут:

  • Получать намерение ACTION_KEY_MISSING при обнаружении удаленной потери связи, что позволяет им предоставлять более информативную обратную связь с пользователем и предпринимать соответствующие действия.
  • Получайте намерение ACTION_ENCRYPTION_CHANGE при каждом изменении статуса шифрования ссылки. Сюда входит изменение статуса шифрования, изменение алгоритма шифрования и изменение размера ключа шифрования. Приложения должны считать связь восстановленной, если ссылка успешно зашифрована после получения намерения ACTION_ENCRYPTION_CHANGE позже.

Если ваше приложение в настоящее время использует специальные механизмы обработки потерь по облигациям, перейдите на новое намерение ACTION_KEY_MISSING для обнаружения и управления событиями потери по облигациям. Мы рекомендуем, чтобы ваше приложение помогало пользователю убедиться, что удаленное устройство находится в зоне действия, прежде чем начинать забывание устройства и повторное сопряжение.

Более того, если устройство отключается после получения намерения ACTION_KEY_MISSING , вашему приложению следует помнить о повторном подключении к устройству, поскольку это устройство больше не может быть связано с системой.

,

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

Приложения, ориентированные на Android 16, теперь могут:

  • Получать намерение ACTION_KEY_MISSING при обнаружении удаленной потери связи, что позволяет им предоставлять более информативную обратную связь с пользователем и предпринимать соответствующие действия.
  • Получайте намерение ACTION_ENCRYPTION_CHANGE при каждом изменении статуса шифрования ссылки. Сюда входит изменение статуса шифрования, изменение алгоритма шифрования и изменение размера ключа шифрования. Приложения должны считать связь восстановленной, если ссылка успешно зашифрована после получения намерения ACTION_ENCRYPTION_CHANGE позже.

Если ваше приложение в настоящее время использует специальные механизмы обработки потерь по облигациям, перейдите на новое намерение ACTION_KEY_MISSING для обнаружения и управления событиями потери по облигациям. Мы рекомендуем, чтобы ваше приложение помогало пользователю убедиться, что удаленное устройство находится в зоне действия, прежде чем начинать забывание устройства и повторное сопряжение.

Более того, если устройство отключается после получения намерения ACTION_KEY_MISSING , вашему приложению следует помнить о повторном подключении к устройству, поскольку это устройство больше не может быть связано с системой.

,

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

Приложения, ориентированные на Android 16, теперь могут:

  • Получать намерение ACTION_KEY_MISSING при обнаружении удаленной потери связи, что позволяет им предоставлять более информативную обратную связь с пользователем и предпринимать соответствующие действия.
  • Получайте намерение ACTION_ENCRYPTION_CHANGE при каждом изменении статуса шифрования ссылки. Сюда входит изменение статуса шифрования, изменение алгоритма шифрования и изменение размера ключа шифрования. Приложения должны считать связь восстановленной, если ссылка успешно зашифрована после получения намерения ACTION_ENCRYPTION_CHANGE позже.

Если ваше приложение в настоящее время использует специальные механизмы обработки потерь по облигациям, перейдите на новое намерение ACTION_KEY_MISSING для обнаружения и управления событиями потери по облигациям. Мы рекомендуем, чтобы ваше приложение помогало пользователю убедиться, что удаленное устройство находится в зоне действия, прежде чем начинать забывание устройства и повторное сопряжение.

Более того, если устройство отключается после получения намерения ACTION_KEY_MISSING , вашему приложению следует помнить о повторном подключении к устройству, поскольку это устройство больше не может быть связано с системой.

,

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

Приложения, ориентированные на Android 16, теперь могут:

  • Получать намерение ACTION_KEY_MISSING при обнаружении удаленной потери связи, что позволяет им предоставлять более информативную обратную связь с пользователем и предпринимать соответствующие действия.
  • Получайте намерение ACTION_ENCRYPTION_CHANGE при каждом изменении статуса шифрования ссылки. Сюда входит изменение статуса шифрования, изменение алгоритма шифрования и изменение размера ключа шифрования. Приложения должны считать связь восстановленной, если ссылка успешно зашифрована после получения намерения ACTION_ENCRYPTION_CHANGE позже.

Если ваше приложение в настоящее время использует специальные механизмы обработки потерь по облигациям, перейдите на новое намерение ACTION_KEY_MISSING для обнаружения и управления событиями потери по облигациям. Мы рекомендуем, чтобы ваше приложение помогало пользователю убедиться, что удаленное устройство находится в зоне действия, прежде чем начинать забывание устройства и повторное сопряжение.

Более того, если устройство отключается после получения намерения ACTION_KEY_MISSING , вашему приложению следует помнить о повторном подключении к устройству, поскольку это устройство больше не может быть связано с системой.

Новый способ удаления связи 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.

Более безопасные намерения

The Safer Intents feature is a multi-phase security initiative designed to improve the security of Android's intent resolution mechanism. The goal is to protect apps from malicious actions by adding checks during intent processing and filtering intents that don't meet specific criteria.

In Android 15 the feature focused on the sending app, now with Android 16, shifts control to the receiving app, allowing developers to opt-in to strict intent resolution using their app manifest.

Two key changes are being implemented:

  1. Explicit Intents Must Match the Target Component's Intent Filter: If an intent explicitly targets a component, it should match that component's intent filter.

  2. Intents Without an Action Cannot Match any Intent Filter: Intents that don't have an action specified shouldn't be resolved to any intent filter.

These changes only apply when multiple apps are involved and don't affect intent handling within a single app.

Impact

The opt-in nature means that developers must explicitly enable it in their app manifest for it to take effect. As a result, the feature's impact will be limited to apps whose developers:

  • Are aware of the Safer Intents feature and its benefits.
  • Actively choose to incorporate stricter intent handling practices into their apps.

This opt-in approach minimizes the risk of breaking existing apps that may rely on the current less-secure intent resolution behavior.

While the initial impact in Android 16 may be limited, the Safer Intents initiative has a roadmap for broader impact in future Android releases. The plan is to eventually make strict intent resolution the default behavior.

The Safer Intents feature has the potential to significantly enhance the security of the Android ecosystem by making it more difficult for malicious apps to exploit vulnerabilities in the intent resolution mechanism.

However, the transition to opt-out and mandatory enforcement must be carefully managed to address potential compatibility issues with existing apps.

Implementation

Developers need to explicitly enable stricter intent matching using the intentMatchingFlags attribute in their app manifest. Here is an example where the feature is opt-in for the entire app, but disabled/opt-out on a receiver:

<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>

More on the supported flags:

Flag Name Description
enforceIntentFilter Enforces stricter matching for incoming intents
none Disables all special matching rules for incoming intents. When specifying multiple flags, conflicting values are resolved by giving precedence to the "none" flag
allowNullAction Relaxes the matching rules to allow intents without an action to match. This flag to be used in conjunction with "enforceIntentFilter" to achieve a specific behavior

Testing and Debugging

When the enforcement is active, apps should function correctly if the intent caller has properly populated the intent. However, blocked intents will trigger warning log messages like "Intent does not match component's intent filter:" and "Access blocked:" with the tag "PackageManager." This indicates a potential issue that could impact the app and requires attention.

Logcat filter:

tag=:PackageManager & (message:"Intent does not match component's intent filter:" | message: "Access blocked:")

Конфиденциальность

Android 16 (уровень API 36) включает следующие изменения в конфиденциальности.

Разрешение локальной сети

Доступ к устройствам в локальной сети может получить любое приложение, имеющее разрешение INTERNET . Это упрощает подключение приложений к локальным устройствам, но также имеет последствия для конфиденциальности, такие как формирование отпечатка пальца пользователя и использование прокси-сервера для определения местоположения.

Проект «Защита локальной сети» направлен на защиту конфиденциальности пользователя путем ограничения доступа к локальной сети с помощью нового разрешения во время выполнения.

План выпуска

Это изменение будет внедрено между двумя выпусками: 25Q2 и TBD соответственно. Крайне важно, чтобы разработчики следовали этому руководству для второго квартала 25 и делились отзывами, поскольку эти меры защиты будут реализованы в более поздней версии Android . Более того, им потребуется обновить сценарии, которые зависят от неявного доступа к локальной сети, используя следующие рекомендации, и подготовиться к отклонению пользователем и отзыву нового разрешения.

Влияние

На текущем этапе LNP — это функция по согласию, что означает, что будут затронуты только те приложения, которые согласились. Цель этапа согласия — дать разработчикам приложений понять, какие части их приложения зависят от неявного доступа к локальной сети, чтобы они могли подготовиться к защите разрешений для следующего выпуска.

Приложения будут затронуты, если они получат доступ к локальной сети пользователя, используя:

  • Прямое или библиотечное использование необработанных сокетов на адресах локальной сети (например, протокол обнаружения службы mDNS или SSDP).
  • Использование классов уровня платформы, имеющих доступ к локальной сети (например, NsdManager).

Для входящего и исходящего трафика по локальному сетевому адресу требуется разрешение на доступ к локальной сети. В следующей таблице перечислены некоторые распространенные случаи:

Низкоуровневая работа приложения в сети Требуется разрешение локальной сети
Создание исходящего TCP-соединения да
Прием входящих TCP-соединений да
Отправка UDP одноадресной, многоадресной, широковещательной рассылки да
Получение входящего одноадресного, многоадресного или широковещательного сообщения UDP да

Эти ограничения реализованы глубоко в сетевом стеке и, следовательно, применимы ко всем сетевым API . Сюда входят сокеты, созданные в собственном или управляемом коде, сетевые библиотеки, такие как Cronet и OkHttp, а также любые API, реализованные поверх них. Попытка разрешить службы в локальной сети (т. е. службы с суффиксом .local) потребует разрешения локальной сети.

Исключения из правил выше:

  • Если DNS-сервер устройства находится в локальной сети, входящий или исходящий от него трафик (через порт 53) не требует разрешения на доступ к локальной сети.
  • Приложениям, использующим переключатель вывода в качестве средства выбора внутри приложения, не потребуются разрешения локальной сети (дополнительные рекомендации появятся в четвертом квартале 2025 года).

Руководство для разработчиков (согласие)

Чтобы включить ограничения локальной сети, выполните следующие действия:

  1. Перепрограммируйте устройство на сборку 25Q2 Beta 3 или новее.
  2. Установите приложение для тестирования.
  3. Переключите флаг Appcompat в adb:

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. Перезагрузите устройство

Теперь доступ вашего приложения к локальной сети ограничен, и любая попытка доступа к локальной сети приведет к ошибкам сокета. Если вы используете API, которые выполняют операции в локальной сети вне процесса вашего приложения (например, NsdManager), на этапе согласия на них это не повлияет.

Чтобы восстановить доступ, вы должны предоставить своему приложению разрешение NEARBY_WIFI_DEVICES .

  1. Убедитесь, что приложение декларирует разрешение NEARBY_WIFI_DEVICES в своем манифесте.
  2. Откройте «Настройки» > «Приложения» > [Имя приложения] > «Разрешения» > «Устройства поблизости» > «Разрешить» .

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

Как только начнется принудительное применение защиты локальной сети, это повлияет на сетевой трафик приложений.

Разрешение Исходящий запрос локальной сети Исходящий/входящий интернет-запрос Входящий запрос локальной сети
Предоставленный Работает Работает Работает
Не предоставлено Не удалось Работает Не удалось

Используйте следующую команду, чтобы отключить флаг App-Compat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Ошибки

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

Примеры ошибок:

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 // ЦГНАТ
  • 10.0.0.0/8 // RFC1918
  • 172.16.0.0/12 // RFC1918
  • 192.168.0.0/16 // RFC1918

IPv6:

  • Ссылка-локальная
  • Маршруты с прямым соединением
  • Сети-заглушки, такие как Thread
  • Несколько подсетей (TBD)

Кроме того, как многоадресные адреса (224.0.0.0/4, ff00::/8), так и широковещательный адрес IPv4 (255.255.255.255) классифицируются как адреса локальной сети.

,

Доступ к устройствам в локальной сети может получить любое приложение, имеющее разрешение INTERNET . Это упрощает подключение приложений к локальным устройствам, но также имеет последствия для конфиденциальности, такие как формирование отпечатка пальца пользователя и использование прокси-сервера для определения местоположения.

Проект «Защита локальной сети» направлен на защиту конфиденциальности пользователя путем ограничения доступа к локальной сети с помощью нового разрешения во время выполнения.

План выпуска

Это изменение будет внедрено между двумя выпусками: 25Q2 и TBD соответственно. Крайне важно, чтобы разработчики следовали этому руководству для второго квартала 25 и делились отзывами, поскольку эти меры защиты будут реализованы в более поздней версии Android . Более того, им потребуется обновить сценарии, которые зависят от неявного доступа к локальной сети, используя следующие рекомендации, и подготовиться к отклонению пользователем и отзыву нового разрешения.

Влияние

На текущем этапе LNP — это функция по согласию, что означает, что будут затронуты только те приложения, которые согласились. Цель этапа согласия — дать разработчикам приложений понять, какие части их приложения зависят от неявного доступа к локальной сети, чтобы они могли подготовиться к защите разрешений для следующего выпуска.

Приложения будут затронуты, если они получат доступ к локальной сети пользователя, используя:

  • Прямое или библиотечное использование необработанных сокетов на адресах локальной сети (например, протокол обнаружения службы mDNS или SSDP).
  • Использование классов уровня платформы, имеющих доступ к локальной сети (например, NsdManager).

Для входящего и исходящего трафика по локальному сетевому адресу требуется разрешение на доступ к локальной сети. В следующей таблице перечислены некоторые распространенные случаи:

Низкоуровневая работа приложения в сети Требуется разрешение локальной сети
Создание исходящего TCP-соединения да
Прием входящих TCP-соединений да
Отправка UDP одноадресной, многоадресной, широковещательной рассылки да
Получение входящего одноадресного, многоадресного или широковещательного сообщения UDP да

Эти ограничения реализованы глубоко в сетевом стеке и, следовательно, применимы ко всем сетевым API . Сюда входят сокеты, созданные в собственном или управляемом коде, сетевые библиотеки, такие как Cronet и OkHttp, а также любые API, реализованные поверх них. Попытка разрешить службы в локальной сети (т. е. службы с суффиксом .local) потребует разрешения локальной сети.

Исключения из правил выше:

  • Если DNS-сервер устройства находится в локальной сети, входящий или исходящий от него трафик (через порт 53) не требует разрешения на доступ к локальной сети.
  • Приложениям, использующим переключатель вывода в качестве средства выбора внутри приложения, не потребуются разрешения локальной сети (дополнительные рекомендации появятся в четвертом квартале 2025 года).

Руководство для разработчиков (согласие)

Чтобы включить ограничения локальной сети, выполните следующие действия:

  1. Перепрограммируйте устройство на сборку 25Q2 Beta 3 или новее.
  2. Установите приложение для тестирования.
  3. Переключите флаг Appcompat в adb:

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. Перезагрузите устройство

Теперь доступ вашего приложения к локальной сети ограничен, и любая попытка доступа к локальной сети приведет к ошибкам сокета. Если вы используете API, которые выполняют операции в локальной сети вне процесса вашего приложения (например, NsdManager), на этапе согласия на них это не повлияет.

Чтобы восстановить доступ, вы должны предоставить своему приложению разрешение NEARBY_WIFI_DEVICES .

  1. Убедитесь, что приложение декларирует разрешение NEARBY_WIFI_DEVICES в своем манифесте.
  2. Откройте «Настройки» > «Приложения» > [Имя приложения] > «Разрешения» > «Устройства поблизости» > «Разрешить» .

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

Как только начнется принудительное применение защиты локальной сети, это повлияет на сетевой трафик приложений.

Разрешение Исходящий запрос локальной сети Исходящий/входящий интернет-запрос Входящий запрос локальной сети
Предоставленный Работает Работает Работает
Не предоставлено Не удалось Работает Не удалось

Используйте следующую команду, чтобы отключить флаг App-Compat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Ошибки

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

Примеры ошибок:

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 // ЦГНАТ
  • 10.0.0.0/8 // RFC1918
  • 172.16.0.0/12 // RFC1918
  • 192.168.0.0/16 // RFC1918

IPv6:

  • Ссылка-локальная
  • Маршруты с прямым соединением
  • Сети-заглушки, такие как Thread
  • Несколько подсетей (TBD)

Кроме того, как многоадресные адреса (224.0.0.0/4, ff00::/8), так и широковещательный адрес IPv4 (255.255.255.255) классифицируются как адреса локальной сети.

,

Доступ к устройствам в локальной сети может получить любое приложение, имеющее разрешение INTERNET . Это упрощает подключение приложений к локальным устройствам, но также имеет последствия для конфиденциальности, такие как формирование отпечатка пальца пользователя и использование прокси-сервера для определения местоположения.

Проект «Защита локальной сети» направлен на защиту конфиденциальности пользователя путем ограничения доступа к локальной сети с помощью нового разрешения во время выполнения.

План выпуска

Это изменение будет внедрено между двумя выпусками: 25Q2 и TBD соответственно. Крайне важно, чтобы разработчики следовали этому руководству для второго квартала 25 и делились отзывами, поскольку эти меры защиты будут реализованы в более поздней версии Android . Более того, им потребуется обновить сценарии, которые зависят от неявного доступа к локальной сети, используя следующие рекомендации, и подготовиться к отклонению пользователем и отзыву нового разрешения.

Влияние

На текущем этапе LNP — это функция по согласию, что означает, что будут затронуты только те приложения, которые согласились. Цель этапа согласия — дать разработчикам приложений понять, какие части их приложения зависят от неявного доступа к локальной сети, чтобы они могли подготовиться к защите разрешений для следующего выпуска.

Приложения будут затронуты, если они получат доступ к локальной сети пользователя, используя:

  • Прямое или библиотечное использование необработанных сокетов на адресах локальной сети (например, протокол обнаружения службы mDNS или SSDP).
  • Использование классов уровня платформы, имеющих доступ к локальной сети (например, NsdManager).

Для входящего и исходящего трафика по локальному сетевому адресу требуется разрешение на доступ к локальной сети. В следующей таблице перечислены некоторые распространенные случаи:

Низкоуровневая работа приложения в сети Требуется разрешение локальной сети
Создание исходящего TCP-соединения да
Прием входящих TCP-соединений да
Отправка UDP одноадресной, многоадресной, широковещательной рассылки да
Получение входящего одноадресного, многоадресного или широковещательного сообщения UDP да

Эти ограничения реализованы глубоко в сетевом стеке и, следовательно, применимы ко всем сетевым API . Сюда входят сокеты, созданные в собственном или управляемом коде, сетевые библиотеки, такие как Cronet и OkHttp, а также любые API, реализованные поверх них. Попытка разрешить службы в локальной сети (т. е. службы с суффиксом .local) потребует разрешения локальной сети.

Исключения из правил выше:

  • Если DNS-сервер устройства находится в локальной сети, входящий или исходящий от него трафик (через порт 53) не требует разрешения на доступ к локальной сети.
  • Приложениям, использующим переключатель вывода в качестве средства выбора внутри приложения, не потребуются разрешения локальной сети (дополнительные рекомендации появятся в четвертом квартале 2025 года).

Руководство для разработчиков (согласие)

Чтобы включить ограничения локальной сети, выполните следующие действия:

  1. Перепрограммируйте устройство на сборку 25Q2 Beta 3 или новее.
  2. Установите приложение для тестирования.
  3. Переключите флаг Appcompat в adb:

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. Перезагрузите устройство

Теперь доступ вашего приложения к локальной сети ограничен, и любая попытка доступа к локальной сети приведет к ошибкам сокета. Если вы используете API, которые выполняют операции в локальной сети вне процесса вашего приложения (например, NsdManager), на этапе согласия на них это не повлияет.

Чтобы восстановить доступ, вы должны предоставить своему приложению разрешение NEARBY_WIFI_DEVICES .

  1. Убедитесь, что приложение декларирует разрешение NEARBY_WIFI_DEVICES в своем манифесте.
  2. Откройте «Настройки» > «Приложения» > [Имя приложения] > «Разрешения» > «Устройства поблизости» > «Разрешить» .

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

Как только начнется принудительное применение защиты локальной сети, это повлияет на сетевой трафик приложений.

Разрешение Исходящий запрос локальной сети Исходящий/входящий интернет-запрос Входящий запрос локальной сети
Предоставленный Работает Работает Работает
Не предоставлено Не удалось Работает Не удалось

Используйте следующую команду, чтобы отключить флаг App-Compat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Ошибки

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

Примеры ошибок:

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 // ЦГНАТ
  • 10.0.0.0/8 // RFC1918
  • 172.16.0.0/12 // RFC1918
  • 192.168.0.0/16 // RFC1918

IPv6:

  • Ссылка-локальная
  • Маршруты с прямым соединением
  • Сети-заглушки, такие как Thread
  • Несколько подсетей (TBD)

Кроме того, как многоадресные адреса (224.0.0.0/4, ff00::/8), так и широковещательный адрес IPv4 (255.255.255.255) классифицируются как адреса локальной сети.

,

Доступ к устройствам в локальной сети может получить любое приложение, имеющее разрешение INTERNET . Это упрощает подключение приложений к локальным устройствам, но также имеет последствия для конфиденциальности, такие как формирование отпечатка пальца пользователя и использование прокси-сервера для определения местоположения.

Проект «Защита локальной сети» направлен на защиту конфиденциальности пользователя путем ограничения доступа к локальной сети с помощью нового разрешения во время выполнения.

План выпуска

Это изменение будет внедрено между двумя выпусками: 25Q2 и TBD соответственно. Крайне важно, чтобы разработчики следовали этому руководству для второго квартала 25 и делились отзывами, поскольку эти меры защиты будут реализованы в более поздней версии Android . Более того, им потребуется обновить сценарии, которые зависят от неявного доступа к локальной сети, используя следующие рекомендации, и подготовиться к отклонению пользователем и отзыву нового разрешения.

Влияние

На текущем этапе LNP — это функция по согласию, что означает, что будут затронуты только те приложения, которые согласились. Цель этапа согласия — дать разработчикам приложений понять, какие части их приложения зависят от неявного доступа к локальной сети, чтобы они могли подготовиться к защите разрешений для следующего выпуска.

Приложения будут затронуты, если они получат доступ к локальной сети пользователя, используя:

  • Прямое или библиотечное использование необработанных сокетов на адресах локальной сети (например, протокол обнаружения службы mDNS или SSDP).
  • Использование классов уровня платформы, имеющих доступ к локальной сети (например, NsdManager).

Для входящего и исходящего трафика по локальному сетевому адресу требуется разрешение на доступ к локальной сети. В следующей таблице перечислены некоторые распространенные случаи:

Низкоуровневая работа приложения в сети Требуется разрешение локальной сети
Создание исходящего TCP-соединения да
Прием входящих TCP-соединений да
Отправка UDP одноадресной, многоадресной, широковещательной рассылки да
Получение входящего одноадресного, многоадресного или широковещательного сообщения UDP да

Эти ограничения реализованы глубоко в сетевом стеке и, следовательно, применимы ко всем сетевым API . Сюда входят сокеты, созданные в собственном или управляемом коде, сетевые библиотеки, такие как Cronet и OkHttp, а также любые API, реализованные поверх них. Попытка разрешить службы в локальной сети (т. е. службы с суффиксом .local) потребует разрешения локальной сети.

Исключения из правил выше:

  • Если DNS-сервер устройства находится в локальной сети, входящий или исходящий от него трафик (через порт 53) не требует разрешения на доступ к локальной сети.
  • Приложениям, использующим переключатель вывода в качестве средства выбора внутри приложения, не потребуются разрешения локальной сети (дополнительные рекомендации появятся в четвертом квартале 2025 года).

Руководство для разработчиков (согласие)

Чтобы включить ограничения локальной сети, выполните следующие действия:

  1. Перепрограммируйте устройство на сборку 25Q2 Beta 3 или новее.
  2. Установите приложение для тестирования.
  3. Переключите флаг Appcompat в adb:

    adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
    
  4. Перезагрузите устройство

Теперь доступ вашего приложения к локальной сети ограничен, и любая попытка доступа к локальной сети приведет к ошибкам сокета. Если вы используете API, которые выполняют операции в локальной сети вне процесса вашего приложения (например, NsdManager), на этапе согласия на них это не повлияет.

Чтобы восстановить доступ, вы должны предоставить своему приложению разрешение NEARBY_WIFI_DEVICES .

  1. Убедитесь, что приложение декларирует разрешение NEARBY_WIFI_DEVICES в своем манифесте.
  2. Откройте «Настройки» > «Приложения» > [Имя приложения] > «Разрешения» > «Устройства поблизости» > «Разрешить» .

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

Как только начнется принудительное применение защиты локальной сети, это повлияет на сетевой трафик приложений.

Разрешение Исходящий запрос локальной сети Исходящий/входящий интернет-запрос Входящий запрос локальной сети
Предоставленный Работает Работает Работает
Не предоставлено Не удалось Работает Не удалось

Используйте следующую команду, чтобы отключить флаг App-Compat

adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>

Ошибки

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

Примеры ошибок:

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 // ЦГНАТ
  • 10.0.0.0/8 // RFC1918
  • 172.16.0.0/12 // RFC1918
  • 192.168.0.0/16 // RFC1918

IPv6:

  • Ссылка-локальная
  • Маршруты с прямым соединением
  • Сети-заглушки, такие как Thread
  • Несколько подсетей (TBD)

Кроме того, как многоадресные адреса (224.0.0.0/4, ff00::/8), так и широковещательный адрес IPv4 (255.255.255.255) классифицируются как адреса локальной сети.

Фотографии, принадлежащие приложению

{% включают "/training/data-storage/shared/___owned-photos" %}