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

Создание библиотеки для авторизации с помощью AzureAD для Android

Итак, цель данной статьи — показать, как работать с OAuth 2.0 на примере авторизации через Azure AD API. В итоге у нас получится полноценный модуль, выносящий максимально возможное количество кода из проекта, к которому он будет подключен.

В данной статье будут использованы библиотеки Retrofit, rxJava, retrolambda. Их использование обусловлено лишь моим желанием минимизировать бойлерплейт, и ничем больше. А потому сложностей по переводу на полностью ванильную сборку быть не должно.

Первое, что нам нужно будет сделать — осознать, что представляет собой протокол авторизации OAuth 2.0 (в данном случае будет использоваться исключительно code flow) и как это будет выглядеть применительно к нашей цели:

1. Если есть кэшированный токен, перепрыгиваем на пункт 4.

2. Инициализируем ‘WebView’, в котором откроем страницу авторизации нашего приложения.

3. После ввода данных пользователем и клика по Sign in, будет автоматический редирект на другую страницу, в query parameters которой имеется параметр code. Он то нам и нужен!

4. Обмениваем code на токен через POST запрос.

Теперь что это значит с точки зрения непосредственно разработчика?
Первое, что мы должны будем сделать — расписать в отдельных классах необходимые нам константы

Назначим заодно параметры дефолтного OkHttp-клиента:

Теперь приступим к делу. По факту, наиболее важная часть нашей библиотеки будет состоять из двух файлов — интерфейс OAuth2 , содержащий сигнатуры запросов и фабрику API, и OAuth2WebViewClient , который представляет собой кастомизированный под наши нужды WebViewClient.

Начнем по порядку.

Сигнатуры обращений для обмена code на token выглядят следующим образом:

Здесь первый метод — сигнатура запроса, описанного в пункте 4, а второй — рефреш токена, который будет периодически требоваться, так как токен сессии чаще всего валиден в течение часа.

Теперь приступим к созданию фабрики API. Итак, что она будет собой представлять? За время моей тесной дружбы с Retrofit-ом я пришел к данному варианту реализации сего механизма:

Данный класс должен находиться в ранее описанном интерфейсе.

Приступим к реализации кастомного WebViewClient-а. Для этого нам нужно определиться, что именно мы хотим сделать. По факту, на вход при его инициализации должны подаваться ссылки на callback-и, или на BehaviourSubject-ы (по вкусу, мне нравится в данном случае первое). Всего их будет три: первый — будет триггериться при успешном получении кода, второй — при наличии ‘error=’ подстроки в url после редиректа и третий — слушающий все остальные переходы.

Для реализации нам понадобится переопределить два метода WebViewClient : shouldOverrideUrlLoading(WebView webView, String url) и onPageFinished(WebView webView, String url) .

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

В принципе, на этом можно остановиться, если реализовывать исключительно процесс авторизации, но мне показалось, что будет уместен также менеджер токенов, поскольку очень уж часто приходилось выполнять какие-то манипуляции с токенами. А потому, в качестве бонуса идет еще один класс, который в дополнение к предыдущим реализует хранение токенов, а также простой рефреш. Вуаля:

Читайте также:  Backup all installed apps android

Вот и все, полноценная библиотека авторизации готова. Она легко кастомизируема, и, что самое главное — она работает!

Небольшое примечание — в случае, если вы захотите использовать WebView в диалоге — обязательно выставьте ей конкретную высоту, поскольку в противном случае она просто будет иметь нулевую высоту.

Статья была написана по мотивам моей курсовой работы, которую я делаю на данный момент, в связи с тем что я ожидаю, пока мне выдадут аккаунт Azure AD, в котором можно будет делегировать необходимые для дальнейшей работы разрешения приложениям. В дальнейшем будет еще несколько статей, посвященных работе с OneNote for Business API (в основном — с classNotebooks секцией их api).

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

Источник

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

Вступление

Наша жизнь как разработчиков 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-файл макета должен выглядеть следующим образом:

Шаг 3: Создайте класс Java

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

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

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

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

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

Читайте также:  Аквариумные рыбки для андроида

java private void initialize(Context context)

2. Использование библиотеки локально

Теперь, когда библиотека готова, давайте использовать ее в модуле приложения того же проекта, чтобы убедиться в отсутствии проблем. Для этого добавьте его в качестве зависимости 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)

Ваша 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)

Шаг 5: Сгенерируйте Javadoc JAR

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

groovy task generateJavadocs(type: Javadoc)

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

groovy task generateJavadocsJar(type: Jar)

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

Читайте также:  Ios and android presentation

groovy generateJavadocsJar.dependsOn generateJavadocs

Шаг 6: Включите сгенерированные файлы JAR

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

Шаг 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 в архивы .

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

Шаг 9: загрузка файлов с помощью плагина Bintray

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

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

4. Использование библиотеки из Bintray

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

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

5. Добавление библиотеки в JCenter

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

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

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

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

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

Вывод

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

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

Источник

Оцените статью