Недавно я занялся новым миром разработки Android: публикацией библиотеки Android с открытым исходным кодом.

Я могу сказать, что борьба за публикацию библиотеки была реальной после того, как я понял, что потратил больше времени на публикацию библиотеки, чем на написание самой библиотеки! 🤦‍♂️

Получив помощь от множества сообщений в блогах в Интернете и множества проб и ошибок, я, наконец, смог опубликовать это (я благодарен Мартону Брауну, чей блогпост был для меня огромным подспорьем).

Я узнал, что публикация библиотеки - это не только тяжелая ручная работа, но и отсутствие единого источника простых инструкций, которым можно было бы следовать.

И я виню авторов не за причину, а за то, что существует несколько способов публикации библиотеки Android (я выбрал жесткий), и эти способы постоянно обновляются.

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

Итак, без лишних слов ... приступим!

Предпосылка ☝️

Для этого урока я использовал Android Studio 4.1, но полагаю, что инструкции, которые я даю, будут аналогичны более старым версиям AS или другим подобным IDE.

Настройка проекта ⚙️

Для начала вот что вам нужно сделать:

  1. Откройте новый проект.
  2. Выберите шаблон проекта Пустое действие. Это создаст пустой проект Android.

Создание библиотеки 📚

  1. Щелкните Файл ›Новый› Новый модуль.
  2. Выберите Android Library.

3. Напишите имя для вашей новой библиотеки.

4. Щелкните Готово.

Это создает новую библиотеку с пустыми каталогами и некоторыми примерами тестовых классов.

На этом этапе мы очистим файл Gradle нашей библиотеки и добавим нашу библиотеку в наш пример приложения.

  1. Откройте build.gradle вашей библиотеки.
  2. Удалите все ненужные инструкции, которые мы не делаем для нашей библиотеки, и просто установите ее как минимум, как показано ниже (вам даже не нужно добавлять compileOptions или библиотеку exoplayer, как мне здесь нужно):

3. Затем откройте build.gradle вашего приложения.

4. Добавьте свою библиотеку в зависимости, например:

5. Запустите образец приложения, чтобы убедиться, что все настроено должным образом.

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

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

Но прежде чем мы это сделаем, вот ...

Совет: это не проблема, но сделайте это практикой, когда ваша библиотека добавляется в образец проекта, обязательно проверяйте каждое новое изменение библиотеки в образце приложения, чтобы знать, как это влияет на приложение и насколько легко вы можете сделать так, чтобы разработчик реализовал вашу библиотеку.

Если в какой-то момент Android Studio выдает вам ошибку сборки (в случае, если ваша библиотека и приложение имеют одно и то же имя пакета):

Проект уже содержит модуль с таким именем - Android Studio

Вам нужно переместить свое приложение в новый подпакет, чтобы заглушить ошибку (в основном дифференцируя имя пакета в AndroidManifest.xml):

  1. Щелкните правой кнопкой мыши каталог с образцом приложения на панели «Проект».
  2. Перейдите в Новый ›Пакет.

  1. Добавьте новое ключевое слово «sample» в конце имени пакета.
  2. Это создает новый каталог внутри последнего каталога.
  3. Теперь отключите MainActivity (Cmd + X) и
  4. Вставьте его в новый подкаталог «sample».
  5. Когда вас попросят провести рефакторинг, нажмите Refactor, чтобы изменить имя пакета во всем проекте.

Если он пропустил место или два для изменения имени пакета, убедитесь, что вы вручную изменили его в этих местах, но, что наиболее важно, в AndroidManifest образца приложения в родительском теге ‹manifest›, например:

И мы в порядке!

Переход к публикации

Создайте заявку с Sonatype

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

Примечание. Если мое руководство по настройке Sonatype ниже выглядит устаревшим, вы можете воспользоваться официальным руководством Центрального репозитория здесь: https://central.sonatype.org/pages/ossrh-guide.html

  1. Перво-наперво убедитесь, что у вас есть аккаунт в Sonatype Jira.

2. Войдите в систему со своими учетными данными.

3. Создайте новый тикет проекта, используя эту ссылку.

4. Заполните данные вашей библиотеки. (несмотря на то, что под текстовыми полями есть образец текста, который поможет вам, ниже представлена ​​заполненная форма, чтобы вы могли получить представление):

5. Щелкните "Создать".

Это создает новый билет для Sonatype для просмотра вашей информации. Примерно через 2–3 минуты вы получите автоматический комментарий к вашему билету:

У вас есть домен waseefakhtar.com? Если да, подтвердите право собственности одним из следующих способов:

* Добавьте запись TXT в свой DNS со ссылкой на этот билет JIRA: OSSRH-61704 (самый быстрый)

* Настройте перенаправление на свою страницу Github (если она еще не существует)

Если вы не являетесь владельцем этого домена, прочтите:
http://central.sonatype.org/pages/choosing-your-coordinates.html
Вы также можете выбрать groupId, который отражает ваш проект хостинг, в данном случае что-то вроде io.github.waseefakhtar или com.github.waseefakhtar

Обратите внимание, что они спрашивают о доменном имени на основе идентификатора группы, который вы указали в описании заявки, а также о вашей библиотеке, например, com.waseefakhtar в моем случае.

На этом этапе мы выберем первый вариант, чтобы подтвердить свое право собственности.

Ссылки на DNS

Поскольку у меня уже есть домен, который я купил у GoDaddy, инструкции или снимки экрана, которые я публикую в этом разделе, могут отличаться в вашем случае, если вы использовали другого поставщика домена.

В этом разделе мы предполагаем, что у вас уже есть домен, и вам просто нужно добавить запись TXT.

  1. Перво-наперво войдите в свою учетную запись.
  2. Перейдите в свою учетную запись ›Мои продукты.
  3. Найдите свой домен и нажмите DNS, чтобы перейти в Управление DNS.

4. В разделе «Управление DNS» в разделе «Записи» нажмите «Добавить», чтобы добавить новую запись.

5. Добавьте следующую информацию в соответствующие поля:

Тип: TXT | Хост: @ | Значение TXT: [ссылка на ваш билет в Sonatype Jira] | TTL: 1 час

6. Щелкните Сохранить.

И готово!

Вы можете проверить, правильно ли введена запись TXT, открыв Терминал и набрав:

$ host -t txt waseefakhtar.com

Что должно вернуться:

waseefakhtar.com descriptive text "OSSRH-61704"

На этом этапе вы должны добавить комментарий к своему билету Jira, в котором говорится:

Запись DNS добавлена ​​на waseefakhtar.com.

Это должно уведомить команду о том, что они могут начать проверку вас, что должно быть выполнено в течение 2 рабочих дней.

Когда вы наконец пройдете проверку, вы получите комментарий к тикету:

com.waseefakhtar подготовлен, теперь пользователи waseefakhtar могут:

Развернуть артефакты моментальных снимков в репозиторий https://oss.sonatype.org/content/repositories/snapshots

Разверните артефакты выпуска в промежуточном репозитории https://oss.sonatype.org/service/local/staging/deploy/maven2

Выпустить поэтапные артефакты в репозиторий Releases

пожалуйста, прокомментируйте этот билет, когда вы продвигали свой первый релиз, спасибо

Если вы войдете в систему на https://oss.sonatype.org/service/local/staging/deploy/maven2 на этом этапе, вы увидите, что в ваших репозиториях еще ничего не опубликовано. Этим мы и займемся дальше.

Совет: поскольку Sonatype занимает максимум 2 дня, все этапы проверки могут быть выполнены до или одновременно, когда вы работаете с библиотекой, так что, как только библиотека будет готова, вы можете просто опубликовать ее прямо сейчас.

Публикация вашей библиотеки через Android Studio

При публикации нашей библиотеки мы собираемся использовать плагин Gradle от Niklas Baudy, который упрощает загрузку в Sonatype OSS (Maven Central): https://github.com/vanniktech/gradle-maven -публикация-плагин

Для этого:

  1. Откройте build.gradle вашего проекта.
  2. Добавьте эти строки в buildscript:

3. Откройте build.gradle своей библиотеки и добавьте свой плагин вверху, например:

4. Теперь в каталоге вашей библиотеки создайте новый файл gradle.properties.

5. Введите информацию о вашей библиотеке, введя значения для каждого ключа, как показано ниже:

Это должно помочь библиотеке выбирать информацию при загрузке.

Затем мы собираемся предоставить Android Studio доступ к нашему Sonatype OSS (Maven Central) и подписать наш артефакт выпуска с помощью GPG, что является требованием при публикации в Maven Central.

Создание ключа GPG

Чтобы создать ключ GPG для подписи артефакта выпуска:

  1. Загрузите инструменты командной строки GPG с https://www.gnupg.org/download/ и установите их.
  2. Откройте свой Терминал.
  3. Введите gpg - full-generate-key.
  4. Когда вас спросят, какой тип ключа вы хотите, нажмите Enter, чтобы выбрать RSA и RSA по умолчанию.
  5. Когда вас спросят о размере ключа, введите 4096.
  6. Когда вас спросят о сроке действия ключа, нажмите Enter, чтобы выбрать значение по умолчанию, указывающее, что срок действия ключа не истекает.
  7. Когда вас спросят об информации для создания нового идентификатора пользователя, укажите свое имя и адрес электронной почты.
  8. Введите "O" для ОК.
  9. При появлении запроса создайте парольную фразу для защиты вашего ключа.

Это создаст ваш ключ в ~ / .gnupg / openpgp-revocs.d / с форматом .rev. Поскольку нам нужен ключ в формате .gpg, вот как его создать:

  1. В вашем Терминале введите gpg --export-secret-keys -o secring.gpg.
  2. При появлении запроса с парольной фразой введите парольную фразу, которую вы установили для созданного вами ключа.

Это должно создать файл с именем secring.gpg в вашем корневом каталоге.

Настройка параметров подписи

Теперь, когда у нас есть все, что нужно для настройки параметров подписи, нам нужно настроить их в Android Studio.

Поскольку мы будем предоставлять наш ключевой пароль и наш пароль OSS, нам необходимо убедиться, что мы предоставили его в файле, который является частным для вашей системы и игнорируется, например, Git.

Поэтому мы выбираем local.properties вашего проекта для этой конфигурации:

  1. Откройте local.properties.
  2. Введите следующую информацию, убедившись, что все они верны.

В качестве подписи .keyId введите последние 8 цифр ключа .rev (часто это имя файла, например 52D3BD1C).

И мы почти закончили!

Загрузка артефакта из библиотеки

  1. Откройте терминал из Android Studio.
  2. Введите ./gradlew uploadArchives - no-daemon - no-parallel.
  3. Нажмите Ввод.

Если все настроено правильно, теперь это должно занять некоторое время и загрузить вашу библиотеку на https://oss.sonatype.org. Осталось только опубликовать библиотеку через Sonatype OSS.

Издание библиотеки

После завершения загрузки библиотеки вы можете перейти на https://oss.sonatype.org/ и в разделе Промежуточные репозитории вы должны увидеть, что ваш репозиторий появится.

Чтобы наконец опубликовать свою библиотеку, сделайте следующее:

  1. Выберите репозиторий.
  2. Нажмите Закрыть в верхнем меню и подтвердите диалоговое окно.

Это займет некоторое время, и вы сможете увидеть активность, щелкнув Activity рядом с Summary на панели инструментов ниже. Обратите внимание, что действие не обновляется само по себе, поэтому вам необходимо обновить его, чтобы увидеть фактическое действие.

Как только вы увидите статус Активность как Последняя операция успешно завершена в Сводке, вы можете заметить, что действие выпуска активируется в меню вверху.

3. Щелкните Освободить и подтвердите диалоговое окно.

Это должно, наконец, сделать вашу библиотеку доступной через 10–15 минут. Вы можете попробовать использовать библиотеку в любом проекте, добавив ее в качестве зависимости в build.gradle вашего приложения:

Https://search.maven.org/, однако, должен занять около 2 часов, чтобы обработать вашу библиотеку и отобразить ее в поиске.

И последнее, что вам следует сделать, это вернуться к своему билету в Sonatype Jira и оставить комментарий, что вы продвигали свой первый выпуск, и он работает хорошо. Это должно уведомить их команду, чтобы пометить заявку как решенную.

Вот и все! 🎉

Единственное, что вам осталось сделать сейчас, это похлопать себя по плечу, поскольку этот процесс немного затянут и сбивает с толку большинство из нас. Так что чувствовать гордость за себя или за свои достижения в этот момент - меньшее, что вы можете сделать! 😉

Удачного кодирования! 💻

Исходный код для библиотеки примеров



Есть что сказать? Оставляйте мне комментарии в Twitter, DM или подписывайтесь на: www.twitter.com/waseefakhtar ✌️

Если вам это понравилось, возможно, вас заинтересуют и другие истории, которые я недавно опубликовал:



Android MotionLayout: создание заставки Твиттера самым простым способом
Вспомните« о, как знаменитый
заставку Твиттера, о которой все говорили и имели свою версию, чтобы имитировать… proandroiddev.com »