Вступление
Наша жизнь как разработчиков Android была бы намного сложнее, если бы не все те сторонние библиотеки, которые мы любим включать в наши проекты. В этом руководстве вы узнаете, как отдать предпочтение сообществу разработчиков, создав и опубликовав свои собственные библиотеки Android, которые люди могут легко добавлять и использовать в своих проектах.
1. Создание библиотеки Android
Если ваша библиотека будет состоять только из классов Java, упаковывание ее в виде JAR и распространение ее с помощью файлового хоста, возможно, самый быстрый и простой способ поделиться ею. Если бы вы создали его из консоли, то подойдет следующая команда:
bash jar cvf mylibrary.jar Class1.class Class2.class ... ClassN.class
Однако в этом руководстве показано, как работать с более сложными библиотеками, которые содержат не только классы Java, но также различные типы файлов и ресурсов XML. Такие библиотеки создаются в виде модулей библиотеки Android и обычно упаковываются в файлы AAR .
Давайте создадим простую библиотеку Android, которая предлагает пользовательский View
для разработчиков, которые ее используют.
Шаг 1: Добавить новый модуль
Для начала добавьте новый Android-модуль в ваш проект, выбрав New> New Module из меню File . Вам будет показан следующий экран, который предлагает множество вариантов:
Выберите библиотеку Android и нажмите Далее . В следующей форме введите имя вашей библиотеки и нажмите Далее . Я буду называть эту библиотеку моей маленькой библиотекой.
На последнем экране выберите Add no Activity и нажмите Finish .
Ваш проект теперь будет иметь два модуля, один для приложения и один для библиотеки. Вот как выглядит его структура:
Шаг 2. Создайте макет
Создайте новый макет XML, щелкнув правой кнопкой мыши на папке res вашего библиотечного модуля и выбрав New> XML> Layout XML File . Назовите это my_view.xml .
Чтобы этот учебник был простым, мы LinearLayout
собственный View
котором есть два виджета TextView
внутри LinearLayout
. После добавления текста в виджеты TextView
XML-файл макета должен выглядеть следующим образом:
« `XML
« `
Шаг 3: Создайте класс Java
Создайте новый класс Java и назовите его MyView.java . Обязательно поместите этот файл в каталог src модуля библиотеки, а не в модуль приложения.
Чтобы этот класс вел себя как представление, сделайте его подклассом класса LinearLayout
. Android Studio предложит вам добавить несколько конструкторов в класс. После их добавления новый класс должен выглядеть так:
« `Открытый класс Java MyView расширяет LinearLayout {
public MyView (Контекстный контекст) { супер (контекст); } public MyView (Контекстный контекст, атрибуты AttributeSet) { супер (контекст, attrs); }
} « `
Как видите, теперь у нас есть два конструктора. Чтобы избежать добавления кода инициализации в каждый конструктор, вызовите метод с именем initialize для каждого конструктора. Добавьте следующий код в каждый конструктор:
java initialize(context);
В методе initialize
вызовите inflate
чтобы связать макет, созданный на предыдущем шаге, с классом.
java private void initialize(Context context){ inflate(context, R.layout.my_view, this); }
2. Использование библиотеки локально
Теперь, когда библиотека готова, давайте использовать ее в модуле приложения того же проекта, чтобы убедиться в отсутствии проблем. Для этого добавьте его в качестве зависимости compile
в файл build.gradle модуля приложения:
groovy compile project(":mylittlelibrary")
Создайте новый Java-класс MainActivity внутри модуля приложения. Сделайте его подклассом класса Activity
и переопределите его метод onCreate
.
« `открытый класс Java MainActivity extends Activity {
@Override protected void onCreate (BundlevedInstanceState) { super.onCreate (savedInstanceState); }} `` `
Внутри метода onCreate
создайте экземпляр пользовательского представления, используя его конструктор. Передайте его методу setContentView
чтобы он заполнил все пространство экрана Activity
:
« `java @Override protected void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState);
View v = новый MyView (это); setContentView (v);
} « `
Ваша Activity
сейчас готова. После добавления его в манифест приложения создайте свой проект и разверните приложение на устройстве Android. Вы должны увидеть пользовательский вид при запуске приложения.
3. Публикация вашей библиотеки на Bintray
Bintray — это популярная платформа, которую вы можете использовать для публикации библиотек Android. Это бесплатно и легко в использовании.
Начните с создания учетной записи на Bintray. После входа в свою учетную запись вы увидите, что у вас уже есть шесть репозиториев. Вы можете использовать один из них или создать новый репозиторий. Для этого урока я буду использовать репозиторий Maven, который является репозиторием Maven.
Посетите страницу своего профиля и нажмите кнопку « Изменить» . На следующей странице щелкните ссылку API Key для просмотра вашего API-ключа.
Запишите ключ, потому что он понадобится вам для аутентификации при использовании плагина Bintray.
Шаг 1: Добавьте необходимые плагины
Чтобы взаимодействовать с 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"
Шаг 2: применить плагины
Откройте файл build.gradle вашего библиотечного модуля и добавьте следующий код, чтобы применить плагины, которые мы добавили на предыдущем шаге.
groovy apply plugin: 'com.jfrog.bintray' apply plugin: 'com.github.dcendents.android-maven'
Шаг 3: Укажите детали POM
Плагин 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
.
Шаг 4. Создайте JAR-файл источника
Для соответствия стандартам Maven ваша библиотека также должна иметь JAR-файл, содержащий исходные файлы библиотеки. Чтобы сгенерировать файл JAR, создайте новую задачу Jar
, generateSourcesJar и укажите расположение исходных файлов с помощью функции from
.
groovy task generateSourcesJar(type: Jar) { from android.sourceSets.main.java.srcDirs classifier 'sources' }
Шаг 5: Сгенерируйте Javadoc JAR
Также рекомендуется, чтобы в вашей библиотеке был 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
Шаг 6: Включите сгенерированные файлы JAR
Чтобы включить исходные файлы и JAR-файлы Javadoc в список артефактов, которые будут загружены в репозиторий Maven, необходимо добавить имена их задач в configuration
называемую архивами . Для этого используйте следующий фрагмент кода:
groovy artifacts { archives generateJavaDocsJar archives generateSourcesJar }
Шаг 7: Запустите задачи
Теперь пришло время выполнить задачи, которые мы создали на предыдущих шагах. Откройте окно Gradle Projects и найдите задачу с именем install .
Дважды щелкните его, чтобы запустить задачи, связанные с модулем библиотеки. По завершении работы у вас будет все необходимое для публикации библиотеки, действительный файл POM, файл AAR, JAR-файл с исходным кодом и JAR-файл Javadocs.
Шаг 8. Настройте плагин Bintray
Чтобы настроить плагин, вы должны использовать закрытие 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’
версия { name = '1.0.1-tuts' desc = 'Моя тестовая загрузка' выпущено = новая дата () vcsTag = '1.0.1' } licenses = ['Apache-2.0'] vcsUrl = 'https://github.com/hathibelagal/LibraryTutorial.git' websiteUrl = 'https://github.com/hathibelagal/LibraryTutorial' } конфигурации = ['архивы']} `` `
Шаг 9: загрузка файлов с помощью плагина Bintray
Снова откройте окно Gradle Projects и найдите задачу bintrayUpload . Дважды щелкните по нему, чтобы начать загрузку файлов.
После завершения задачи откройте браузер, чтобы перейти на страницу сведений о пакете Bintray. Вы увидите уведомление о том, что у вас есть четыре неопубликованных файла. Чтобы опубликовать эти файлы, нажмите на ссылку « Опубликовать» .
4. Использование библиотеки из 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
.
5. Добавление библиотеки в JCenter
По умолчанию Android Studio выполняет поиск библиотек в хранилище под названием JCenter . Если вы включите свою библиотеку в репозиторий JCenter, разработчикам не нужно будет ничего добавлять в свой список repositories
.
Чтобы добавить свою библиотеку в JCenter, откройте браузер и перейдите на страницу сведений о пакете Bintray. Нажмите кнопку с надписью Добавить в JCenter .
Затем вы попадете на страницу, которая позволяет вам составить сообщение. Вы можете использовать поле « Комментарии», чтобы при желании упомянуть любую информацию о библиотеке.
Нажмите кнопку « Отправить» , чтобы начать процесс проверки Bintray. В течение одного или двух дней сотрудники Bintray свяжут вашу библиотеку с репозиторием JCenter, и вы сможете увидеть ссылку на JCenter на странице сведений о вашем пакете.
Любой разработчик может теперь использовать вашу библиотеку без изменения списка repositories
.
Вывод
Из этого руководства вы узнали, как создать простой модуль библиотеки Android и опубликовать его как в своем собственном репозитории Maven, так и в репозитории JCenter. Попутно вы также узнали, как создавать и выполнять различные типы заданий.
Чтобы узнать больше о Bintray, посетите руководство пользователя Bintray .