Статьи

Создание и публикация библиотеки Android

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

Если ваша библиотека будет состоять только из классов Java, упаковывание ее в виде JAR и распространение ее с помощью файлового хоста, возможно, самый быстрый и простой способ поделиться ею. Если бы вы создали его из консоли, то подойдет следующая команда:

bash jar cvf mylibrary.jar Class1.class Class2.class ... ClassN.class

Однако в этом руководстве показано, как работать с более сложными библиотеками, которые содержат не только классы Java, но также различные типы файлов и ресурсов XML. Такие библиотеки создаются в виде модулей библиотеки Android и обычно упаковываются в файлы AAR .

Давайте создадим простую библиотеку Android, которая предлагает пользовательский View для разработчиков, которые ее используют.

Для начала добавьте новый Android-модуль в ваш проект, выбрав New> New Module из меню File . Вам будет показан следующий экран, который предлагает множество вариантов:

Диалог нового модуля

Выберите библиотеку Android и нажмите Далее . В следующей форме введите имя вашей библиотеки и нажмите Далее . Я буду называть эту библиотеку моей маленькой библиотекой.

На последнем экране выберите Add no Activity и нажмите Finish .

Ваш проект теперь будет иметь два модуля, один для приложения и один для библиотеки. Вот как выглядит его структура:

Структура проекта

Создайте новый макет XML, щелкнув правой кнопкой мыши на папке res вашего библиотечного модуля и выбрав New> XML> Layout XML File . Назовите это my_view.xml .

Чтобы этот учебник был простым, мы LinearLayout собственный View котором есть два виджета TextView внутри LinearLayout . После добавления текста в виджеты TextView XML-файл макета должен выглядеть следующим образом:

« `XML

« `

Создайте новый класс Java и назовите его MyView.java . Обязательно поместите этот файл в каталог src модуля библиотеки, а не в модуль приложения.

Чтобы этот класс вел себя как представление, сделайте его подклассом класса LinearLayout . Android Studio предложит вам добавить несколько конструкторов в класс. После их добавления новый класс должен выглядеть так:

« `Открытый класс Java MyView расширяет LinearLayout {

} « `

Как видите, теперь у нас есть два конструктора. Чтобы избежать добавления кода инициализации в каждый конструктор, вызовите метод с именем initialize для каждого конструктора. Добавьте следующий код в каждый конструктор:

java initialize(context);

В методе initialize вызовите inflate чтобы связать макет, созданный на предыдущем шаге, с классом.

java private void initialize(Context context){ inflate(context, R.layout.my_view, this); }

Теперь, когда библиотека готова, давайте использовать ее в модуле приложения того же проекта, чтобы убедиться в отсутствии проблем. Для этого добавьте его в качестве зависимости compile в файл build.gradle модуля приложения:

groovy compile project(":mylittlelibrary")

Создайте новый Java-класс MainActivity внутри модуля приложения. Сделайте его подклассом класса Activity и переопределите его метод onCreate .

« `открытый класс Java MainActivity extends Activity {

Внутри метода onCreate создайте экземпляр пользовательского представления, используя его конструктор. Передайте его методу setContentView чтобы он заполнил все пространство экрана Activity :

« `java @Override protected void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState);

} « `

Ваша Activity сейчас готова. После добавления его в манифест приложения создайте свой проект и разверните приложение на устройстве Android. Вы должны увидеть пользовательский вид при запуске приложения.

Bintray — это популярная платформа, которую вы можете использовать для публикации библиотек Android. Это бесплатно и легко в использовании.

Начните с создания учетной записи на Bintray. После входа в свою учетную запись вы увидите, что у вас уже есть шесть репозиториев. Вы можете использовать один из них или создать новый репозиторий. Для этого урока я буду использовать репозиторий Maven, который является репозиторием Maven.

домашняя страница

Посетите страницу своего профиля и нажмите кнопку « Изменить» . На следующей странице щелкните ссылку API Key для просмотра вашего API-ключа.

Ключ API

Запишите ключ, потому что он понадобится вам для аутентификации при использовании плагина Bintray.

Чтобы взаимодействовать с Bintray в Android Studio, вы должны включить плагин Bintray в dependencies файла build.gradle вашего проекта.

groovy classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'

Поскольку вы будете загружать библиотеку в репозиторий Maven, вы также должны добавить плагин Maven, как показано ниже.

groovy classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"

Откройте файл build.gradle вашего библиотечного модуля и добавьте следующий код, чтобы применить плагины, которые мы добавили на предыдущем шаге.

groovy apply plugin: 'com.jfrog.bintray' apply plugin: 'com.github.dcendents.android-maven'

Плагин Bintray будет искать файл POM при загрузке библиотеки. Даже если плагин Maven генерирует его для вас, вы должны указать значение тега groupId и значение тега version самостоятельно. Для этого используйте переменные group и version в файле Gradle.

groovy group = 'com.github.hathibelagal.librarytutorial' // Change this to match your package name version = '1.0.1' // Change this to match your version number

Если вы знакомы с Maven и вам интересно, почему мы не указали значение тега artifactId , это потому, что плагин Maven по умолчанию будет использовать имя вашей библиотеки в качестве artifactId .

Для соответствия стандартам Maven ваша библиотека также должна иметь JAR-файл, содержащий исходные файлы библиотеки. Чтобы сгенерировать файл JAR, создайте новую задачу Jar , generateSourcesJar и укажите расположение исходных файлов с помощью функции from .

groovy task generateSourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs classifier 'sources' }

Также рекомендуется, чтобы в вашей библиотеке был JAR-файл, содержащий Javadocs. Поскольку в настоящее время у вас нет Javadocs, создайте новую задачу Javadoc , генерируйте Javadocs, чтобы сгенерировать их. Используйте переменную source чтобы указать расположение исходных файлов. Вам также следует обновить переменную classpath чтобы задача могла найти классы, принадлежащие Android SDK. Вы можете сделать это, добавив к нему возвращаемое значение метода android.getBootClasspath .

groovy task generateJavadocs(type: Javadoc) { source = android.sourceSets.main.java.srcDirs classpath += project.files(android.getBootClasspath() .join(File.pathSeparator)) }

Затем, чтобы сгенерировать JAR из Javadocs, создайте задачу Jar , generateJavadocsJar и передайте свойство destinationDir generateJavadocs в функцию from . Ваша новая задача должна выглядеть так:

groovy task generateJavadocsJar(type: Jar) { from generateJavadocs.destinationDir classifier 'javadoc' }

Чтобы убедиться в том, что задача generateJavadocsJar запускается только после завершения задачи generateJavadocs , добавьте следующий фрагмент кода, который использует метод dependsOn для упорядочивания задач:

groovy generateJavadocsJar.dependsOn generateJavadocs

Чтобы включить исходные файлы и JAR-файлы Javadoc в список артефактов, которые будут загружены в репозиторий Maven, необходимо добавить имена их задач в configuration называемую архивами . Для этого используйте следующий фрагмент кода:

groovy artifacts { archives generateJavaDocsJar archives generateSourcesJar }

Теперь пришло время выполнить задачи, которые мы создали на предыдущих шагах. Откройте окно Gradle Projects и найдите задачу с именем install .

Установить задачу

Дважды щелкните его, чтобы запустить задачи, связанные с модулем библиотеки. По завершении работы у вас будет все необходимое для публикации библиотеки, действительный файл POM, файл AAR, JAR-файл с исходным кодом и JAR-файл Javadocs.

Чтобы настроить плагин, вы должны использовать закрытие bintray в вашем файле Gradle. Сначала выполните аутентификацию, используя переменные user и key , соответствующие вашему имени пользователя Bintray и ключу API соответственно.

На Bintray ваша библиотека будет находиться внутри пакета Bintray . Вы должны предоставить подробную информацию об этом, используя интуитивно названные параметры repo , name , licenses и vcsUrl в закрытии pkg . Если пакет не существует, он будет создан автоматически для вас.

Когда вы загружаете файлы в Bintray, они будут связаны с версией пакета Bintray. Следовательно, pkg должен содержать закрытие version , для свойства name которого установлено уникальное имя. При желании вы также можете предоставить описание, дату выпуска и тег Git, используя параметры desc , vcsTag и vcsTag .

Наконец, чтобы указать файлы для загрузки, установите значение параметра configuration в архивы .

Это пример конфигурации:

« `groovy bintray {user = ‘test-user’ key = ‘01234567890abcdef01234567890abcdef’ pkg {repo = ‘maven’ name = ‘com.github.hathibelagal.mylittlelibrary’

Снова откройте окно Gradle Projects и найдите задачу bintrayUpload . Дважды щелкните по нему, чтобы начать загрузку файлов.

Загрузка Bintray

После завершения задачи откройте браузер, чтобы перейти на страницу сведений о пакете Bintray. Вы увидите уведомление о том, что у вас есть четыре неопубликованных файла. Чтобы опубликовать эти файлы, нажмите на ссылку « Опубликовать» .

Уведомление о неопубликованных файлах

Ваша библиотека теперь доступна в виде пакета Bintray. После того, как вы предоставите URL-адрес своего хранилища Maven, а также идентификатор группы, идентификатор артефакта и номер версии, любой разработчик сможет получить доступ к вашей библиотеке. Например, чтобы использовать созданную нами библиотеку, разработчики должны включить следующий фрагмент кода:

« `groovy репозитории {maven {url ‘https://dl.bintray.com/eruzza/maven’}}

Зависимости {compile ‘com.github.hathibelagal.librarytutorial: mylittlelibrary: 1.0.1@aar’} « `

Обратите внимание, что разработчик должен явно включить ваш репозиторий в список repositories прежде чем добавлять библиотеку в качестве зависимости compile .

По умолчанию Android Studio выполняет поиск библиотек в хранилище под названием JCenter . Если вы включите свою библиотеку в репозиторий JCenter, разработчикам не нужно будет ничего добавлять в свой список repositories .

Чтобы добавить свою библиотеку в JCenter, откройте браузер и перейдите на страницу сведений о пакете Bintray. Нажмите кнопку с надписью Добавить в JCenter .

Кнопка JCenter

Затем вы попадете на страницу, которая позволяет вам составить сообщение. Вы можете использовать поле « Комментарии», чтобы при желании упомянуть любую информацию о библиотеке.

Страница составления сообщения

Нажмите кнопку « Отправить» , чтобы начать процесс проверки Bintray. В течение одного или двух дней сотрудники Bintray свяжут вашу библиотеку с репозиторием JCenter, и вы сможете увидеть ссылку на JCenter на странице сведений о вашем пакете.

Ссылка на JCenter

Любой разработчик может теперь использовать вашу библиотеку без изменения списка repositories .

Из этого руководства вы узнали, как создать простой модуль библиотеки Android и опубликовать его как в своем собственном репозитории Maven, так и в репозитории JCenter. Попутно вы также узнали, как создавать и выполнять различные типы заданий.

Чтобы узнать больше о Bintray, посетите руководство пользователя Bintray .