--- title: Нативные расширения - Инструменты Слияния Манифестов brief: В данном руководстве описывается работа по слиянию манифестов приложений --- # Манифесты приложений Для некоторых платформ мы поддерживаем расширения, поставляющие фрагменты (или заглушки) манифестов приложений. Он может быть частью `AndroidManifest.xml`, `Info.plist` или `engine_template.html`. Каждая заглушка манифеста расширения будет применяться последовательно, начиная с базового манифеста приложения. Базовый манифест - это либо манифест по умолчанию (в `builtins\manifests\\...`), либо пользовательский манифест, указанный пользователем. ## Именования и Структуры Манифесты расширения должны быть помещены в определенную структуру, чтобы расширение функционировало по назначению. /myextension ext.manifest /manifests /android AndroidManifest.xml /ios Info.plist /osx Info.plist /web engine_template.html ## Android Платформа Android уже имеет инструмент слияния манифестов (основанный на `ManifestMerger2`), и мы используем его внутри `bob.jar` для слияния манифестов. Для получения полного набора инструкций по изменению манифестов Android, пожалуйста, обратитесь к [документации](https://developer.android.com/studio/build/manifest-merge) ::: important Если вы не установите `android:targetSdkVersion` в манифесте расширения, следующие разрешения, они будут добавлены автоматически: `WRITE_EXTERNAL_STORAGE`, `READ_PHONE_STATE`, `READ_EXTERNAL_STORAGE`. Подробнее об этом можно прочитать в официальной [документации](https://developer.android.com/studio/build/manifest-merge#implicit_system_permissions). Мы рекомендуем использовать: `` ::: ### Пример Базовый манифест: ```xml ``` Манифест расширения: ```xml ``` Результат: ```xml ``` ## iOS / macOS Для `Info.plist` мы используем собственную реализацию для объединения списков и словарей. Можно указывать атрибуты слияния `merge`, `keep` или `replace` для ключей, при этом значение по умолчанию — `merge`. ### Пример Базовый манифест: ```xml NSAppTransportSecurity NSExceptionDomains foobar.net testproperty INT 8 REAL 8.0 BASE64 SEVMTE8gV09STEQ= Array1 Foobar a Array2 Foobar a ``` Манифест расширения: ```xml NSAppTransportSecurity NSExceptionDomains facebook.com NSIncludesSubdomains NSThirdPartyExceptionRequiresForwardSecrecy INT 42 REAL 16.0 BASE64 Rk9PQkFS Array1 Foobar b Array2 Foobar b ``` Результат: ```xml NSAppTransportSecurity NSExceptionDomains foobar.net testproperty facebook.com NSIncludesSubdomains NSThirdPartyExceptionRequiresForwardSecrecy INT 8 REAL 16.0 BASE64 SEVMTE8gV09STEQ= INT 42 Array1 Foobar a b Array2 Foobar a Foobar b ``` ## HTML5 Для html-шаблона мы дали название каждому разделу, чтобы можно было их сопоставить (например, "engine-start"). Вы можете указать атрибуты `merge` или `keep`. По умолчанию используется `merge`. ### Пример Базовый манифест: ```html ``` Манифест расширения: ```html ``` Результат: ```html ```