Android 14: обновления в области конфиденциальности и безопасности

Android 14 уже выпущен, так что разработчикам пора обновить свои приложения.

Пользователи Android 14 (версии, получившей название “Upside Down Cake”, то есть “Перевернутый пирог”) получат новые возможности и повышенный уровень безопасности. Для разработчиков переход на Android 14 с его новыми API и функциями безопасности является обязательным.

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

Предоставление доступа только к выбранным фото и видео

Новая функция Android Photo Picker будет согласовывать с пользователем вопрос о том, хочет ли он предоставить приложению доступ ко всем фотографиям или только к выбранным.

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

Чтобы использовать доступ к выбранным фотографиям, приложение должно сначала запросить разрешение READ_MEDIA_VISUAL_USER_SELECTED. Как только пользователь предоставит это разрешение, приложение с помощью функции Photo Picker отобразит список фото и видео. Пользователь выберет те из них, к которым он хочет предоставить доступ приложению.

Ограничение на использование неявных и отложенных намерений

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

Неявные намерения

Неявные намерения (Implicit Intents) используются для запуска Activity или служб без указания запускаемого компонента. Это дает пользователям возможность выбрать, какое приложение использовать для выполнения определенной задачи. Например, приложение может использовать неявное намерение для запуска веб-браузера, чтобы открыть URL-адрес.

Чтобы использовать неявное намерение в Android 14, компонент должен быть экспортирован, иначе будет выброшено исключение. Например:

<activity
android:name=".AppActivity"
android:exported="true"> <!-- Должно быть TRUE, иначе при запуске Activity будет выброшено исключение -->
<intent-filter>
<action android:name="com.example.action.APP_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

Для запуска неэкспортированной Activity приложение должно использовать явное намерение. Например:

// Это делает намерение явным.
val explicitIntent = Intent("com.example.action.APP_ACTION")
explicitIntent.apply {
package = context.packageName
}
context.startActivity(explicitIntent)

Неявные намерения могут использоваться вредоносными приложениями для запуска компонентов без ведома или согласия пользователя.

Отложенные намерения

Отложенные намерения (Pending Intents) используются для создания намерений, которые могут быть отправлены или выполнены в более позднее время. Это пригодится при выполнении таких задач, как планирование сигналов оповещений или запуск Activity из фоновых служб.

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

Зарегистрированные во время выполнения BroadcastReceiver’ы должны указывать поведение в отношении экспорта

В Android 14 все контекстно-регистрируемые BroadcastReceiver’ы должны указывать, должны ли они экспортироваться во все остальные приложения на устройстве. Это можно сделать, передав в метод registerReceiver() флаг RECEIVER_EXPORTED или RECEIVER_NOT_EXPORTED. Например:

// Зарегистрировать экспортированный BroadcastReceiver.
context.registerReceiver(broadcastReceiver, IntentFilter(), RECEIVER_EXPORTED);

// Зарегистрировать неэкспортированный BroadcastReceiver.
context.registerReceiver(broadcastReceiver, IntentFilter(), RECEIVER_NOT_EXPORTED)

Это предотвратит отправку вредоносными приложениями сообщений экспортированным BroadcastReceiver’ам.

Обновления в области обмена данными

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

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

Запуск Activity из фонового режима

Приложения Android 14 не могут запускать Activity из фонового режима без согласия пользователя.

Для запуска Activity из фонового режима, приложение должно сначала отправить PendingIntent другому приложению. Затем другое приложение должно дать явное согласие на запуск своих действий из фонового режима. Это можно сделать, передав флаг BIND_ALLOW_ACTIVITY_STARTS в метод bindService().

// Приложение A хочет запустить Activity в приложении B из фонового режима.
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// Приложение B должно явно согласиться с тем, чтобы его Activity запускались из фонового режима.
context.bindService(new Intent(context, AppBService.class), serviceConnection, Context.BIND_AUTO_CREATE | BIND_ALLOW_ACTIVITY_STARTS);

// После того как приложение B подтвердило свое согласие, приложение A может отправить PendingIntent в приложение B.
AppBService.startActivity(pendingIntent);

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

Сеанс захвата MediaProjection

Приложения Android 14 должны запрашивать согласие пользователя перед каждым сеансом захвата MediaProjection. Это может быть сделано путем отображения диалогового окна или с помощью другого метода, подходящего для данного приложения.

Один сеанс захвата  —  это одно обращение к MediaProjection#createVirtualDisplay. Каждый экземпляр MediaProjection должен использоваться только один раз.

Это означает, что приложения больше не могут кэшировать намерение, возвращаемое от MediaProjectionManager#createScreenCaptureIntent, и передавать его несколько раз в MediaProjectionManager#getMediaProjection. Приложения также больше не могут вызывать MediaProjection#createVirtualDisplay несколько раз для одного и того же экземпляра MediaProjection.

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

Предотвращение установки устаревших приложений

Нельзя будет установить приложения с targetSdkVersion ниже 23, что означает невозможность использования приложений Android 5.1 и более старых версий на устройствах с Android 14. Это довольно важное изменение, поскольку вредоносные программы часто нацеливаются на устаревшие API-уровни, чтобы обойти защиту безопасности и конфиденциальности, появившуюся в новых версиях Android.

Обнаружение скриншотов

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

Стоит отметить, что данная функция позволяет только узнать, что скриншот был сделан, не давая доступа к самому скриншоту.


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

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Bhoomi Vaghasiya: Developers, Take Note: Android 14’s Privacy & Security Upgrades

Предыдущая статьяКак создать сетевой API с помощью Express.js, Bun и MongoDB
Следующая статьяОбнаружение и предотвращение утечек памяти в Java