Назад к вопросам
Middle
85
questionbank
Что означает атрибут android:exported со значениями 'true' и 'false'?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Атрибут android:exported в манифесте Android App (AndroidManifest.xml) определяет, могут ли компоненты вашего приложения (Activity, Service, BroadcastReceiver, ContentProvider) быть доступны другим приложениям или процессам в системе.
android:exported="true":
- Компонент может быть вызван или доступен из других приложений.
- Например, если Activity отмечена как
exported="true", другое приложение может запустить эту Activity с помощью Intent. - Это необходимо, если ваш компонент должен взаимодействовать с другими приложениями (например, предоставление данных через ContentProvider, запуск сервиса извне).
- При использовании Intent Filters с определенными категориями (например,
android.intent.category.LAUNCHER), компонент по умолчанию становитсяexported="true, даже если атрибут явно не указан или установлен вfalse.
android:exported="false":
- Компонент доступен только внутри собственного приложения или процессов с тем же user ID.
- Другие приложения не могут прямо обратиться к этому компоненту.
- Это значение используется по умолчанию для большинства компонентов с Android 12 (API level 31) и выше, если компонент не имеет intent filters.
- Использование
exported="false"является хорошей практикой с точки зрения безопасности, так как ограничивает потенциальные точки входа для сторонних приложений.
<activity android:name=".MainActivity"
android:exported="true"> // Эта активити доступна из других приложений
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".InternalActivity"
android:exported="false"> // Эта активити доступна только внутри нашего приложения
</activity>
<service android:name=".DataService"
android:exported="true"> // Сервис может быть запущен извне
<intent-filter>
<action android:name="com.example.myapp.START_DATA_SERVICE" />
</intent-filter>
</service>
<provider android:name=".MyContentProvider"
android:authorities="com.example.myapp.provider"
android:exported="false" // Провайдер доступен только внутри приложения
android:grantUriPermissions="true"/>