Android Manifest vs. App Manifest
Я читал подобные вопросы здесь, но до сих пор неясно, на что поделать. Использование проекта библиотеки означает, что мой общий проект будет иметь два манифеста - один для библиотеки, а другой для основного проекта приложения - и я не понимаю, что происходит, или если есть некоторая избыточность.
Я разрабатываю виджет приложения с "облегченными" и "платными" версиями, поэтому будет иметься почти весь код в проекте библиотеки. Будучи виджетами, библиотека будет иметь, по крайней мере, приемник, услугу, конфигурационную деятельность, а также пару других видов деятельности. Итак, где должны быть объявлены полные декларации этих компонентов, включая намерения, фильтры и т.д.? Они идут в манифест для библиотеки или в манифест для самого пакета приложения, ссылаясь на классы в библиотеке (например, android: name= "com.foo.mylibrary.MyService" )?
Некоторые примеры, на которые я смотрел, похоже, объявляют их в обоих манифестях, но я подозреваю, что их размещение в одном или другом случае не является оператором.
Ответы
Ответ 1
Использование проекта библиотеки означает, что мой общий проект будет иметь два манифеста - один для библиотеки, а другой для основного проекта приложения - и я не понимаю, что происходит, или если есть некоторая избыточность.
В настоящее время не используется манифест проекта библиотеки.
Gradle для Android, и поэтому Android Studio, поддержка проектов библиотеки и AARs, публикующих манифест. Это может включать в себя такие вещи, как объявления активности, требуемые разрешения или функции или минимальные уровни поддержки Android SDK.
Правила того, как проявляются библиотеки, объединены с собственным манифестом приложения - особенно когда вы берете типы сборки и вкусы продукта во внимание - бит сложный.
Итак, где должны быть объявлены полные декларации этих компонентов, включая намерения, фильтры и т.д.?
В хост-проекте.
Библиотека может публиковать эти компоненты, и проект хоста Android Studio затем может удалить их, если это необходимо.
Они идут в манифест для библиотеки или в манифест для самого пакета приложения, ссылаясь на классы в библиотеке (например, android: name= "com.foo.mylibrary.MyService" )?
Последний.
В любом (с Gradle для Android и Android Studio). Теоретически библиотеке легче публиковать компоненты, поэтому автору приложения это не нужно. Лично я не являюсь большим поклонником этого, так как слишком много разработчиков завершат доставку ненужных манифестных записей.
Ответ 2
Как и ADT r20 Preview 3, теперь можно объединить манифесты. Таким образом, общая конфигурация теперь может быть помещена в манифест библиотеки. Подробнее см. fooobar.com/questions/44798/....
Версия 13 Intellij IDEA необходима для поддержки слияния манифеста (manifestmerger.enabled=true
). Кроме того, для поддержки Android Studio необходима система сборки на основе класса .
Ответ 3
Любые связанные элементы андроида, такие как действия, приемники, службы и т.д. ДОЛЖНЫ войти в ваш манифест приложения или они не будут распознаны ОС. Как вы уже догадались, файл манифеста библиотеки в значительной степени представляет собой пустую реализацию
UPDATE
Как уже упоминалось в CommonsWare, инструменты сборки Android теперь будут пытаться объединить различные манифесты от вашего имени. Оставив исходный ответ для потомков