Какие настройки в AndroidManifest.xml нужны для межприложенного взаимодействия
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Настройки манифеста для межприложенного взаимодействия
Для организации межприложенного взаимодействия (Inter-App Communication) в Android требуется корректная настройка компонентов и разрешений в AndroidManifest.xml. Основными механизмами являются Activity, Service, BroadcastReceiver и ContentProvider, каждый из которых требует декларации и опциональных параметров.
1. Экспорт компонентов и система безопасности
Ключевой атрибут android:exported определяет, могут ли другие приложения обращаться к компоненту:
android:exported="true"— компонент доступен другим приложениям (при необходимости добавьте intent-фильтры или разрешения).android:exported="false"— компонент приватный (только для своего приложения).
Важно: Начиная с Android 12 (API 31), для компонентов с intent-фильтрами необходимо явно указывать android:exported.
2. Настройка Activity для запуска извне
Для Activity, которая должна реагировать на неявные intent'ы из других приложений:
<activity
android:name=".ShareActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
Атрибуты intent-фильтра:
<action>— определяет действие (например,ACTION_VIEW,ACTION_SEND).<category>— категория intent'а (DEFAULTобязательна для неявных intent'ов).<data>— схема, MIME-тип или другие данные.
3. Настройка Service для межпроцессного взаимодействия
Для Service используйте явные intent'ы или задайте android:permission для контроля доступа:
<service
android:name=".MyBoundService"
android:exported="true"
android:permission="com.example.MY_PERMISSION">
<intent-filter>
<action android:name="com.example.ACTION_START_SERVICE" />
</intent-filter>
</service>
Для связанных сервисов (bound service) также определите интерфейс AIDL в папке aidl.
4. Настройка BroadcastReceiver
Для широковещательных приёмников, получающих системные или кастомные события:
<receiver
android:name=".MyReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="com.example.CUSTOM_ACTION" />
</intent-filter>
</receiver>
Ограничения: Начиная с Android 8.0, для большинства несистемных broadcast'ов требуется явная регистрация в коде.
5. Настройка ContentProvider
ContentProvider — мощный механизм для общего доступа к данным:
<provider
android:name=".MyContentProvider"
android:authorities="com.example.myapp.provider"
android:exported="true"
android:readPermission="com.example.READ_PERMISSION"
android:writePermission="com.example.WRITE_PERMISSION">
<!-- Опциональные пути данных -->
<path-permission ... />
</provider>
Атрибуты:
android:authorities— уникальный идентификатор провайдера.android:permission— общее разрешение или отдельноreadPermission/writePermission.android:grantUriPermissions— временный доступ к URI.
6. Объявление и запрос разрешений
Для защиты компонентов объявите кастомные разрешения:
<permission
android:name="com.example.MY_PERMISSION"
android:protectionLevel="signature|dangerous" />
Уровни защиты:
signature— только приложения, подписанные тем же ключом.dangerous— требует явного согласия пользователя.normal— предоставляется автоматически.
Запрос разрешений в клиентском приложении:
<uses-permission android:name="com.example.MY_PERMISSION" />
7. Дополнительные настройки и рекомендации
- URI permissions — для временного доступа к данным ContentProvider через
FLAG_GRANT_READ_URI_PERMISSION. - android:enabled — можно временно отключать компоненты.
- android:process — запуск компонента в отдельном процессе (редко требуется).
- Тестирование — всегда проверяйте взаимодействие через
adb shell am startили инструменты вроде Android Debug Bridge.
Пример комплексной настройки
<!-- Объявление кастомного разрешения -->
<permission
android:name="com.example.ACCESS_DATA"
android:protectionLevel="signature" />
<!-- Activity для общего доступа -->
<activity
android:name=".DataViewActivity"
android:exported="true"
android:permission="com.example.ACCESS_DATA">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content"
android:host="com.example.data" />
</intent-filter>
</activity>
Важные предостережения:
- Минимизируйте
android:exported="true"для снижения поверхностей атаки. - Всегда проверяйте входящие intent'ы на корректность данных.
- Используйте
android:permissionдля защиты экспортируемых компонентов. - Для взаимодействия между своими приложениями применяйте уровень защиты
signature.
Правильная настройка манифеста обеспечивает безопасность, производительность и соответствие политикам Google Play.