В многомодульных проектах каждый модуль может иметь свой
AndroidManifest.xml, чтобы: Задавать зависимости (
uses-permission, uses-feature) для конкретного модуля. Определять компоненты (
Activity, Service, BroadcastReceiver) для каждого модуля. Автоматически объединять манифесты всех модулей в
AndroidManifest.xml главного (app) модуля. 🚩Как объединяются манифесты в многомодульном проекте?
При сборке Gradle автоматически сливает (
merge) все AndroidManifest.xml в один итоговый файл. app/
├── src/main/AndroidManifest.xml ← Главный манифест
├── java/com/example/MainActivity.kt
├── res/
├── build.gradle
feature_login/
├── src/main/AndroidManifest.xml ← Манифест модуля `login`
├── java/com/example/login/LoginActivity.kt
├── res/
├── build.gradle
feature_chat/
├── src/main/AndroidManifest.xml ← Манифест модуля `chat`
├── java/com/example/chat/ChatActivity.kt
├── res/
├── build.gradle
🚩Как работает объединение манифестов?
При сборке манифесты модулей сливаются в манифест главного модуля.
<manifest package="com.example.app">
<application>
<activity android:name=".MainActivity" />
</application>
</manifest>
feature_login (feature_login/src/main/AndroidManifest.xml) <manifest>
<application>
<activity android:name=".login.LoginActivity" />
</application>
</manifest>
feature_chat (feature_chat/src/main/AndroidManifest.xml) <manifest>
<application>
<activity android:name=".chat.ChatActivity" />
</application>
</manifest>
После объединения итоговый
AndroidManifest.xml выглядит так <manifest package="com.example.app">
<application>
<activity android:name=".MainActivity" />
<activity android:name=".login.LoginActivity" />
<activity android:name=".chat.ChatActivity" />
</application>
</manifest>
🚩Зачем модулям свой `AndroidManifest.xml`?
🟠Разные разрешения (`uses-permission`) для каждого модуля
Например, модуль
camera требует CAMERA, но другие модули — нет. <uses-permission android:name="android.permission.CAMERA" />
🟠Разные `Activity`, `Service`, `BroadcastReceiver` в каждом модуле
Каждый модуль добавляет только свои компоненты (например,
LoginActivity в feature_login). 🟠Разные зависимости для разных модулей
Например, модуль
feature_map использует Google Maps, но feature_login — нет. <uses-library android:name="com.google.android.maps" />
Ставь 👍 и забирай 📚 Базу знаний