Проекты библиотек Android предоставляют повторно используемый код и ресурсы, которые могут сэкономить ваше время и усилия при разработке приложений — вам не нужно постоянно «изобретать велосипед». Эта статья является первой в серии из трех частей, которая знакомит вас с проектами библиотек Android , В первой части вы узнаете об основах библиотечного проекта.
Основы проекта библиотеки Android
Проект библиотеки Android представляет собой контейнер совместно используемого исходного кода Android и ресурсов, на которые можно ссылаться из проектов приложений Android. Проект библиотеки объединяется в файл Android PacKage (APK) (с расширением файла .apk
) при создании проекта приложения. Несколько проектов приложения могут ссылаться на один и тот же проект библиотеки. Любой отдельный проект приложения может ссылаться на несколько библиотечных проектов.
До выпуска Android 4.0 SDK (r14) проекты библиотеки Android считались дополнительным исходным кодом и папками ресурсов при компиляции исходного кода и ресурсов приложения. Поскольку это расположение оказалось чрезвычайно хрупким в Eclipse, и поскольку разработчики предпочитают распространять библиотеки скомпилированного кода и ресурсов в виде файлов JAR, r14 ввел механизм библиотеки скомпилированного кода для библиотечных проектов. Ознакомьтесь с изменениями в проектах библиотеки в Android SDK Tools, r14 для получения дополнительной информации. Механизм библиотеки скомпилированного кода является первым шагом к распространению библиотек в виде файлов JAR. Природа ресурсов Android с их скомпилированными идентификаторами должна быть рассмотрена, прежде чем эта возможность распространения JAR будет полностью реализована (в будущем выпуске инструментов Android).
Проект библиотеки Android похож на проект приложения Android в том, что он также включает файл манифеста проекта в корневой каталог проекта. Кроме того, этот каталог содержит src
, res
и другие каталоги, которые вы также найдете при создании проекта приложения. Кроме того, проект может содержать те же виды исходного кода и ресурсов, что и в проекте приложения.
Однако есть существенная разница. Вы не можете скомпилировать проект библиотеки в файл APK, потому что проект библиотеки не описывает приложение. Вместо этого он предоставляет повторно используемый код и ресурсы, которые вносят вклад в приложение, когда проект приложения и исходный код ссылаются на проект библиотеки. Во время сборки этот код и эти ресурсы объединяются в APK-файл приложения.
При создании приложения, которое зависит от проекта библиотеки, библиотека сначала компилируется во временный файл JAR, который впоследствии объединяется с кодом и ресурсами проекта приложения. Если один и тот же идентификатор ресурса определен в приложении и в библиотеке, SDK гарантирует, что ресурс приложения получает приоритет; ресурс проекта библиотеки не скомпилирован в файл APK.
Проект приложения может добавлять ссылки на несколько библиотечных проектов и указывать их относительные приоритеты. Когда несколько библиотек, на которые ссылаются из приложения, определяют один и тот же идентификатор ресурса, SDK выбирает ресурс из библиотеки с более высоким приоритетом и отбрасывает другой ресурс. Библиотеки объединяются с приложением по одной библиотеке за раз, начиная с самого низкого приоритета и прогрессируя до самого высокого приоритета.
Библиотечные проекты могут ссылаться на другие библиотечные проекты. Кроме того, они могут импортировать внешние JAR-библиотеки скомпилированного кода Java, которые не ссылаются на API-интерфейсы Android.
При разработке проекта библиотеки Android и его зависимых приложений необходимо помнить несколько моментов:
- Используйте префиксы, чтобы избежать конфликтов ресурсов. Например, чтобы гарантировать уникальность, я бы
@+id/ca_tutortutor_gameboard
свое доменное имя и определил@+id/ca_tutortutor_gameboard
вместо@+id/gameboard
в файле ресурсов проекта библиотеки.
- Вы не можете экспортировать проект библиотеки в файл JAR. Эта возможность будет представлена в следующем выпуске инструментов SDK.
- Проект библиотеки может включать библиотеку JAR. Вы должны вручную отредактировать путь сборки зависимого проекта приложения и добавить путь к файлу JAR.
- Проект библиотеки может зависеть от внешней библиотеки JAR. Зависимый проект приложения должен быть построен против цели, которая включает внешнюю библиотеку. Кроме того, проекты библиотеки и зависимых приложений должны объявить внешнюю библиотеку в своих файлах манифеста в элементе
<uses-library>
.
- Библиотечные проекты не могут включать необработанные активы. Необработанные файлы активов (сохраненные в каталоге
assets
проекта библиотеки) игнорируются. Любые ресурсы активов, используемые приложением, должны храниться в каталогеassets
его проекта.
- Номер версии платформы проекта библиотеки должен быть меньше или равен номеру версии платформы проекта приложения. Уровень API (например, 10, который соответствует Android 2.3.3), используемый библиотечным проектом, должен быть таким же или ниже уровня API, используемого зависимым приложением.
- Нет ограничений на имена библиотечных пакетов. Имя пакета библиотеки не обязательно должно совпадать с именами пакетов ее зависимых приложений.
- Каждый библиотечный проект создает свой собственный класс
R
Каждая библиотека имеет свой собственный классR
, названный в соответствии с именем пакета библиотеки. КлассR
сгенерированный из проекта приложения и его библиотечного проекта, создается во всех необходимых пакетах, включая пакет проекта приложения и библиотечный пакет.
- Место хранения проекта библиотеки является гибким. Библиотечные проекты могут храниться в любом месте на жестком диске, если зависимые проекты приложений могут ссылаться на них (через относительные ссылки).
Проекты библиотек Android создаются с помощью Android SDK аналогично тому, как создаются проекты приложений Android. Следующий синтаксис командной строки (разбитый на несколько строк для удобства чтения) абстрагирует то, что вам нужно указать для создания проекта библиотеки:
android create lib-project --target target_ID --path /path/to/project/project_name --package library_package_namespace
Команда create lib-project
аналогична команде create project
(для создания проекта приложения), но также добавляет следующую строку в файл project.properties
чтобы указать, что проект является библиотекой:
android.library=true
Вы также можете указать --name project_name
при создании проекта библиотеки. Однако обычно вы можете опустить --name
потому что значение, присвоенное этому необязательному параметру, не используется, кроме того, что присваивается атрибуту name
элемента <project>
в файле build.xml
проекта.
Чтобы сослаться на библиотеку из зависимого проекта приложения, сначала создайте проект приложения (например, с помощью android create project
). Затем выполните команду обновления на основе следующего абстрактного синтаксиса (разбитого на несколько строк для удобства чтения) для ссылки на проект библиотеки:
android update project --target target_ID --path /path/to/project/project_name --library relative/path/to/library/project
Команда update project
обновляет проект приложения для ссылки на проект библиотеки, добавив следующую строку в файл project.properties
проекта приложения:
android.library.reference.n=library_project_relative_path
Ссылка на проект библиотеки имеет вид android.library.reference. n
android.library.reference. n
, где n
— это целочисленное значение, начинающееся с 1. Повторные вызовы команды android update project
, где каждая команда идентифицирует отдельный библиотечный проект, вводят дополнительные библиотечные ссылки на project.properties
. Целочисленное значение увеличивается на 1 (2, 3, 4 и т. Д.) Для каждой последующей ссылки. Отверстия между числами (1 и 3 указаны, но не 2, например) не допускаются; ссылки, появляющиеся после отверстия, игнорируются (например, если 2 не указано, 3 будет игнорироваться).
Вывод
Теперь, когда вы изучили основы библиотечных проектов Android, вы готовы изучить пример. Во второй части этой серии я представляю проект библиотеки диалоговых окон about. Хранение повторно используемых диалоговых окон и других элементов пользовательского интерфейса (например, пользовательских виджетов) в библиотеках помогает сократить время разработки приложения.