Манифест библиотеки Android и манифест приложения
Я читал подобные вопросы здесь, но до сих пор не ясно на пару вещей. Использование проекта Библиотеки означает, что мой общий проект будет иметь два манифеста-один для библиотеки, а другой для "основного" проекта приложения-и я не понимаю, что происходит в котором или если есть некоторая избыточность.
Я разрабатываю виджет приложения с версиями" lite "и" paid", поэтому у меня будет почти весь код в проекте библиотеки. Виджет, библиотека будет иметь по крайней мере приемник, сервис, действие настройки, плюс несколько других действий. Итак, где должны быть полные объявления этих компонентов , включая намерения, фильтры и т. д. -- быть объявленным? Идут ли они в манифесте для библиотеки или в манифесте для самого пакета приложения, ссылаясь на классы в библиотеке (например, android:name="com.foo.папку "MyLibrary".MyService с")?
некоторые примеры, на которые я смотрел, похоже, объявляют их в обоих манифестах, но я подозреваю, что помещая их в один или других нет.
3 ответов
использование проекта Библиотеки означает, что мой общий проект будет иметь два манифеста-один для библиотеки, а другой для "основного" проекта приложения-и я не понимаю, что происходит в котором или если есть некоторая избыточность.
манифест проекта библиотеки в настоящее время не используется.
Gradle для Android и, следовательно, Android Studio, поддерживают библиотечные проекты и публикуют манифест AARs. Это может включать такие вещи, как активность объявления, необходимые разрешения или функции или минимальные поддерживаемые уровни Android SDK.
правила для того, как манифесты библиотеки объединяются с собственным манифестом приложения , особенно если вы принимаете во внимание типы сборки и вкусы продукта-это немного сложно.
Итак, где должны быть полные объявления этих компонентов, включая намерения, фильтры и т. д. -- быть объявленным?
в принимающей проект.
библиотека может опубликовать эти компоненты, а проект хоста Android Studio может удалить их, если это необходимо.
они входят в манифест для библиотеки или в манифест для самого пакета приложения, ссылаясь на классы в библиотеке (например, android:name="com.foo.папку "MyLibrary".MyService с")?
последнего.
в любом (с Gradle для Android и Android Studio). В теория, для библиотеки проще публиковать компоненты, поэтому автору приложения не нужно. Лично я не большой поклонник этого, так как слишком много разработчиков закончат доставку ненужных записей манифеста.
начиная с ADT R20 Preview 3 Теперь можно объединить манифесты. Таким образом, общая конфигурация теперь может быть помещена в манифест библиотеки. См.https://stackoverflow.com/a/10400355/262789 для получения дополнительной информации.
версия 13 Intellij IDEA необходима для поддержки слияния манифеста (manifestmerger.enabled=true
). Также система сборки на основе класса необходим для поддержки Android Studio.
любые ссылки на элементы android, такие как деятельность, приемники, услуги и т. д. Необходимо войти в манифест приложения, иначе они не будут распознаны ОС. Как вы уже догадались, файл манифеста библиотеки в значительной степени является пустой реализацией
обновление
Как указывает CommonsWare выше, инструменты сборки Android теперь попытаются объединить различные манифесты от вашего имени. Оставляя оригинальный ответ для потомков