Манифест библиотеки Android и манифест приложения

Я читал подобные вопросы здесь, но до сих пор не понимаю пару вещей. Использование библиотечного проекта означает, что мой общий проект будет иметь два манифеста — один для библиотеки, а другой для «основного» проекта приложения — и мне не ясно, что в чем происходит, или есть ли какая-то избыточность.

Я разрабатываю виджет приложения с «облегченной» и «платной» версиями, поэтому почти весь код будет в проекте библиотеки. Будучи виджетом, библиотека будет иметь как минимум приемник, службу, действие по настройке и еще пару действий. Итак, где должны быть объявлены полные объявления этих компонентов, включая намерения, фильтры и т. д.? Попадают ли они в манифест библиотеки или в манифест самого пакета приложения, ссылаясь на классы в библиотеке (например, android:name="com.foo.mylibrary.MyService")?

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


person gordonwd    schedule 16.04.2012    source источник


Ответы (3)


Использование библиотечного проекта означает, что мой общий проект будет иметь два манифеста — один для библиотеки, а другой для «основного» проекта приложения — и мне не ясно, что в чем происходит, или есть ли какая-то избыточность.

Манифест проекта библиотеки в настоящее время не используется.

Gradle для Android и, следовательно, Android Studio поддерживают проекты библиотек и AAR, публикующие манифест. Это может включать такие вещи, как объявления действий, необходимые разрешения или функции или минимальные поддерживаемые уровни Android SDK.

Правила объединения библиотечных манифестов с собственным манифестом приложения, особенно когда вы принимаете во внимание типы сборки и разновидности продукта, следующие: немного сложно.

Итак, где должны быть объявлены полные объявления этих компонентов, включая намерения, фильтры и т. д.?

В основном проекте.

Библиотека может опубликовать эти компоненты, а хост-проект Android Studio может удалить их при необходимости.

Попадают ли они в манифест библиотеки или в манифест самого пакета приложения, ссылаясь на классы в библиотеке (например, android:name="com.foo.mylibrary.MyService")?

Последнее

В любом (с Gradle для Android и Android Studio). Теоретически, библиотеке проще публиковать компоненты, поэтому автору приложения это не нужно. Лично я не большой поклонник этого, так как слишком много разработчиков будут отправлять ненужные записи манифеста.

person CommonsWare    schedule 16.04.2012
comment
Спасибо. Это имеет наибольший смысл (не то, чтобы смысл всегда применим!). - person gordonwd; 18.04.2012
comment
@CommonsWare - мне всегда нравятся ваши прямые ответы. И в данном случае мне помогло! - person Matt; 13.03.2013
comment
@CommonsWare, начиная с предварительной версии 3 ADT r20, теперь можно объединять манифесты. Таким образом, общую конфигурацию теперь можно поместить в манифест библиотеки. stackoverflow.com/a/10400355/262789 - person Jade; 06.11.2013

Начиная с ADT r20 Preview 3 теперь можно объединять манифесты. Таким образом, общую конфигурацию теперь можно поместить в манифест библиотеки. См. https://stackoverflow.com/a/10400355/262789 для получения дополнительной информации.

Версия 13 Intellij IDEA необходима для поддержки слияния манифестов (manifestmerger.enabled=true). Кроме того, для Android необходима система сборки на основе Grade. Поддержка студии.

person Jade    schedule 06.11.2013

Любые упомянутые элементы Android, такие как действия, приемники, службы и т. д., ДОЛЖНЫ войти в манифест вашего приложения, иначе они не будут распознаны ОС. Как вы уже догадались, файл манифеста библиотеки в значительной степени является пустой реализацией.

ОБНОВЛЕНИЕ

Как указано выше в CommonsWare, инструменты сборки Android теперь будут пытаться объединить различные манифесты от вашего имени. Оставив исходный ответ для потомков

person JRaymond    schedule 16.04.2012
comment
Спасибо. Читая некоторые статьи, казалось, что манифесты будут объединены или что-то в этом роде. Приятно получить разъяснения. - person gordonwd; 18.04.2012
comment
Поскольку этому ответу четыре года, возможно, стоит указать, что сейчас он неверен. См. обновленный ответ Commonsware выше. - person JHH; 26.10.2016