- Создание Android-проектов с использованием Maven
- Что вы создадите
- Что вам потребуется
- Как проходить этот урок
- Настройка проекта
- Создание структуры каталогов
- Создание Android манифеста
- Установка Maven
- Настройка простой Maven сборки
- Сборка Android кода
- Описание записимостей
- Пересборка Android кода с зависимостями
- Как импортировать зависимость Maven в Android Studio / IntelliJ?
- 5 ответов
- Как импортировать зависимость Maven в Android Studio / IntelliJ?
- Публикация Android библиотеки в jCenter
- Как Android Studio подгружает зависимости
- Шаг 0: Выбираем имя будущего пакета библиотеки
- Шаг 1: создаем контейнер в Bintray
- Шаг 2: Регистрируем GROUP_ID с помощью Sonatype
- Шаг 3: Настраиваем автоматическую подпись пакетов в Bintray
- Шаг 4: настраиваем проект в Android Studio
Создание Android-проектов с использованием Maven
Этот урок освещает создание простого Android проекта с Maven.
Что вы создадите
Вы создадите Android приложение, которое отображает время дня, а потом соберете его Maven’ом.
Что вам потребуется
- Примерно 15 минут свободного времени
- Любимый текстовый редактор или IDE
- JDK 6 и выше
- Android SDK
- Android устройство или эмулятор
Как проходить этот урок
Как и большинство уроков по Spring, вы можете начать с нуля и выполнять каждый шаг, либо пропустить базовые шаги, которые вам уже знакомы. В любом случае, вы в конечном итоге получите рабочий код.
Чтобы начать с нуля, перейдите в Настройка проекта.
Чтобы пропустить базовые шаги, выполните следующее:
- Загрузите и распакуйте архив с кодом этого урока, либо кнонируйте из репозитория с помощью Git: git clone https://github.com/spring-guides/gs-maven-android.git
- Перейдите в каталог gs-maven-android/initial
- Забегая вперед, установите Maven
Когда вы закончите, можете сравнить получившийся результат с образцом в gs-maven-android/complete .
Настройка проекта
Для начала, вам необходимо настроить Android проект для сборки Maven. Т.к. основное внимание данного урока уделено Maven, сделайте проект настолько простым, насколько это возможно. Если вы впервые работаете с Android проектами, установите и настройте ADT.
Создание структуры каталогов
В выбранном вами каталоге проекта создайте следующую структуру каталогов; к примеру, командой mkdir -p src/main/java/org/hello для *nix систем:
Создание Android манифеста
Android Manifest содержит всю информацию, необходимую для запуска Android приложения и оно не будет собираться без него.
Добавьте текстовую строку. Текстовые строки могут ссылаться на файлы приложения или другие источники.
Теперь определите визуальную структуру пользовательского интерфейса вашего приложения.
В директории src/main/java/org/hello вы можете создать любой Java класс, какой захотите. В соответствии с задачей урока, создайте следующий класс:
Установка Maven
Теперь у вас есть проект, который вы можете собрать с помощью Maven. Следующим шагом будет установка Maven.
Загрузите Maven как zip-файл с http://maven.apache.org/download.cgi. Достаточно только бинарники, поэтому смотрите ссылку на apache-maven-
Загрузите и распакуйте файл, затем добавьте bin каталог в переменную окружения PATH.
Чтобы протестировать устаноку Maven, запустите mvn из командной строки:
Если все хорошо, то вы должны увидеть информацию об установке, похожую на эту:
Теперь у вас есть установленный Maven.
Настройка простой Maven сборки
Теперь, когда Maven установлен, вам необходимо создать определение Maven проекта через XML-файл pom.xml. Помимо всего остального, этот файл содержит имя проекта, версию и зависимости, которые он имеет от внешних библиотек.
Создайте файл с названием pom.xml в корне проекта и поместите в него следующее содержимое:
Это простейший pom.xml файл, который необходим для сборки Android проекта. Он состоит из следующих настроек проекта:
— Как проект будет собран, в данном случае как Android APK
Секция dependencies определяет список зависимостей проекта. В частности, она определяет единственную зависимость от Android библиотеки. В элементе dependency зависимость определяется деревом дочерних элементов:
В данном случае элемент имеет значение provided . Зависимости этого типа необходимы для компиляции кода проекта, но будут доступны и во время выполнения кода. К примеру, Android API всегда доступен, когда Android приложение запущено.
Секция определяет дополнительную конфигурацию для сборки приложения. В этой секции есть секция
, которая содержит список плагинов, которые добавляют функциональность процессу сборки. Здесь определена конфигурация для Android Maven Plugin. Для этой зависимости также имеются элементы , и . Плагин также содержит следующие элементы:
- — Конфигурация плагина. Здесь вы определяете, с каким Android Platform SDK будет собираться проект
- — Комбинация указания значений true и apk для
передает управление [Android Maven Plugin] в процессе сборки.
На текущий момент вы определили пока минимальный Maven проект.
Сборка Android кода
Сейчас Maven готов к сборке. Вы можете выполнить выполнить несколько задач сборки уже сейчас, включая компиляцию кода проекта, создание библиотеки пакета(JAR файл) и установить библиотеку в локальный репозиторий Maven зависимостей.
Эта команда запускает Maven, говоря ему выполнить задачу compile. Когда он завершит её, вы должны найти скомпилированные .class файлы в каталоге target/classes.
Т.к. вы вряд ли захотите работать или распостранять .class файлы непосредственно, взамен этого возможно запустить package задачу:
Эта задача компилирует ваш Java код, запускает тесты и упаковывает код в JAR файл каталоге target. Имя JAR файла состоит из значений и проекта. К примеру, исходя из содержимого pom.xml файла, отображенного ранее, JAR файл будет называться gs-maven-android-0.1.0.jar.
Т.к. вы установили значение элемента
в «apk», результатом будет АРК файл в target каталоге в дополнение к JAR файлу. Этот АРК файл является упакованным Android приложением, готовым к развертыванию на устройстве или эмуляторе.
Android Maven плагин предоставляет несколько Maven задач, которые вы можете использовать в различных фазах процесса сборки или взаимодействия с устройством и эмулятором. Список доступных задач вы можете увидеть, выполнив команду:
Описание записимостей
Простой Hello World пример полностью самодостаточен и не зависит от каких-либо дополнительных библиотек. Однако, большинство приложений, зависят от внешних библиотек, предоставляющих некоторую функциональность.
К примеру, предположим, что вы хотите, чтобы приложение отображало текущие дату и время. Несмотря на то, что вы фактически можете использовать дату и время из нативных Java библиотек, возможно использовать более интересные для этого вещи, которые предоставляют Joda Time библиотеки.
Для этого, измените HelloActivity.java как показано ниже:
В этом примере используемый Joda Time LocalTime класс возвращает и отображает текущее время.
Если вы запустите mvn package сейчас, то сборка завершится с ошибкой, потому что вы не описали Joda Time как компилируемую зависимость в сборке. Для исправления этой ошибки, просто добавьте следующие строки в секцию файла pom.xml.
Пересборка Android кода с зависимостями
Теперь, если вы выполните mvn compile или mvn package , то Maven должен разрешить Joda Time зависимость из Maven Central репозитория и успешно собрать проект.
Ниже приведена полная версия pom.xml файла:
Поздравляем! Вы только что создали простой, но эффективный Maven проект с целью сборки Android проектов.
Источник
Как импортировать зависимость Maven в Android Studio / IntelliJ?
Я создал новый проект Android, используя мастер по умолчанию в Android Studio. Скомпилировано и развернуто приложение на моем устройстве. Все хорошо.
теперь я хочу импортировать внешнюю библиотеку, которая доступна на Maven. (http://square.github.io/picasso/). Я пошел в свойства модуля и добавил библиотеку Maven. Он правильно отображается в списке зависимостей. Кроме того, он отображается в редакторе и я могу правильно использовать его в код.
, в время компиляции, я получаю ошибку Gradle: не удалось найти класс
5 ответов
начиная с версии 0.8.9, Android Studio поддерживает центральный репозиторий Maven по умолчанию. Поэтому для добавления внешней зависимости maven все, что вам нужно сделать, это отредактировать сборку модуля.gradle файл и вставить строку в раздел зависимостей, как это:
вы увидите сообщение появится как » синхронизация сейчас. — щелкните его и дождитесь загрузки репозитория maven вместе со всеми его зависимостями. В строке состояния внизу будет несколько сообщений, сообщающих вам, что происходит по загрузке. После этого импортированный файл JAR вместе с его зависимостями будет отображаться в дереве внешних репозиториев в окне обозревателя проектов, как показано ниже.
Я использую артефакт springframework android в качестве примера
открыть сборки.Gradle в
затем добавьте следующее на том же уровне, что и применить плагин: ‘android’
вы также можете использовать эту нотацию для артефактов maven
ваша IDE должна показывать jar и его зависимости в разделе «внешние библиотеки» если он не появляется, попробуйте перезапустить IDE (это произошло со мной совсем немного)
здесь пример, который вы предоставили, что работает
Android Studio 3
ответы, которые говорят о Maven Central, датируются, так как Android Studio использует JCenter в качестве центра репозитория по умолчанию. Ваш проект построен.файл gradle должен иметь что-то вроде этого:
пока разработчик имеет свой репозиторий Maven (что делает Picasso), все, что вам нужно будет сделать, это добавить одну строку в раздел зависимостей сборки вашего приложения.файл gradle.
- снимите флажок «Автономная работа» в файле>настройки>Gradle>глобальный Gradle Настройки
- повторно синхронизировать проект, например, перезапустив Android Studio
- после синхронизации, вы можете снова проверить возможность работы в автономном режиме.
попробовать itext . Добавьте зависимость к вашему build.gradle за последний в этой должности
Примечание: специальная версия для android, трейлинг «g»:
Источник
Как импортировать зависимость Maven в Android Studio / IntelliJ?
Я создал новый проект Android, используя мастер по умолчанию в Android Studio. Скомпилирован и развернул приложение на моем устройстве. Все хорошо.
Теперь я хочу импортировать внешнюю библиотеку, доступную на Maven. ( Http://square.github.io/picasso/ ). Я пошел в свойства модуля и добавил библиотеку Maven. Он корректно отображается в списке зависимостей. Кроме того, он появляется в редакторе, и я могу правильно использовать его в коде.
Однако во время компиляции я получаю ошибку Gradle: невозможно найти класс
Начиная с версии 0.8.9, Android Studio поддерживает центральный репозиторий Maven по умолчанию. Поэтому, чтобы добавить внешнюю зависимость maven, вам нужно только отредактировать файл build.gradle модуля и вставить строку в раздел зависимостей следующим образом:
Появится сообщение «Sync now …» – щелкните его и дождитесь загрузки maven-репо вместе со всеми его зависимостями. В строке состояния появятся некоторые сообщения о том, что происходит с загрузкой. По завершении этого, импортированный файл JAR вместе со своими зависимостями будет указан в дереве внешних репозиториев в окне «Браузер проекта», как показано ниже.
В качестве примера я использую артефакт для артефактов springframework
Затем добавьте следующее на том же уровне, что и плагин: ‘android’
Вы также можете использовать это обозначение для артефактов maven
Ваша IDE должна отображать банку и ее зависимости в разделе «Внешние библиотеки», если она не появляется. Попробуйте перезапустить среду IDE (это произошло со мной совсем немного)
Вот пример, который вы указали, что работает
- Снимите флажок «Работа в автономном режиме» в меню «Файл»> «Настройки»> «Град»> «Глобальные настройки»).
- Повторно протестируйте проект, например, перезагрузив Android Studio
- После синхронизации вы можете снова проверить этот параметр, чтобы работать в автономном режиме.
Обновленный ответ
Ответы, которые говорят о Maven Central, датируются с тех пор, как Android Studio теперь использует JCenter в качестве центра репозитория по умолчанию. Файл build.gradle вашего проекта должен иметь что-то вроде этого:
Так что пока у разработчика есть свой репозиторий Maven (который есть в Picasso), тогда вам нужно будет добавить одну строку в раздел зависимостей файла build.gradle вашего приложения.
Попробуйте itext . Добавьте зависимость от вашего build.gradle для последней build.gradle этого сообщения.
Примечание: специальная версия для android, завершающая «g»:
Источник
Публикация Android библиотеки в jCenter
В жизни каждого андроид разработчика настаёт момент, когда количество самописных утилит и хелперов, качующих из проекта в проект, переваливает за десяток. В этом случае хорошей практикой будет оформление подобных хелперов в виде самостоятельных «модулей» в терминах Android Studio. Еще лучше, если Вы собираетесь поделиться Вашими наработками с комьюнити, снабдив исходный код подходящей лицензией. Но просто залить исходники на GitHub в этом случае будет недостаточно – хочется, чтобы любой желающий мог подключить библиотеку с помощью однострочной Gradle зависимости, например такой:
О том, как этого добиться и пойдет речь в данной статье.
Как Android Studio подгружает зависимости
Вместе с выходом Android Studio разработчикам была предложена новая система автоматической сборки проектов Gradle. Теперь, чтобы добавить библиотеку в Ваш проект, достаточно поправить файл build.gradle, указав однострочную зависимость (в рассматриваемом случае она называется Remote Binary Dependency) в блоке dependencies:
После этого Android Studio загрузит указанную библиотеку нужной версии с сервера-хранилища и добавит в проект, что действительно очень удобно. Пожалуй, самыми популярным серверами-хранилищами Java библиотек являются jCenter и Maven Central. Аналогами можно назвать NPM для Node.js, NuGet для .Net, pip для Python и т.д.
Заглянем в build.gradle, расположенный в корне проекта:
Здесь jcenter() указывает, что Android Studio следует искать указанные зависимости в репозиториях jCenter. Аналогичная запись заставит Android Studio искать зависимости на Maven Central:
Последние версии Android Studio по умолчанию указывают jCenter — от части это связано с тем, что загрузка библиотеки в Maven Central требует больше усилий со стороны разработчика. jCenter считается крупнейшим хранилищем Java библиотек, но в то же время многие разработчики предпочитают Maven Central. Не стоит забывать, что jCenter и Maven Central являются физически разными серверами, и наличие библиотеки в одном не гарантирует её наличие в другом.
Наша задача загрузить библиотеку только в jCenter. Схематично процесс будет выглядеть так:
Шаг 0: Выбираем имя будущего пакета библиотеки
Существует конвенция именования пакетов, которой мы должны придерживаться. Название пакета состоит из 3-ех частей:
GROUP_ID: можно представить себе как идентификатор аккаунта, организации или package name, под которым распространяется библиотека или несколько библиотек. GROUP_ID должен быть в формате Reverse FQDN;
ARTIFACT_ID: название библиотеки или в терминологии Maven название «артефакта»;
VERSION: рекомендуется использовать паттерн вида x.y.z, но допустимо использование любых строковых значений.
Здесь com.squareup.okhttp это GROUP_ID, под которым распространяется множество библиотек, в частности okhttp и okhttp-urlconnection.
Примечание: при выборе GROUP_ID следует иметь в виду, что Вам должен принадлежать выбранный домен. В противном случае возникнут проблемы при его регистрации на Шаге 2.
В качестве демонстрационного примера я буду использовать тривиальный класс SimplePrefs.java, который упрощает обращение к SharedPreferences. Подразумевается, что Вы можете самостоятельно смастерить из него библиотеку-модуль в Android Studio и разместить исходный код в публичном репозитории.
Поскольку исходный код я буду размещать на Github, то GROUP_ID мне следует выбрать в формате:
В качестве идентификатора артефакта будем использовать название библиотеки, версию выбираем любую. В моём случае название будущего пакета выглядит так:
Шаг 1: создаем контейнер в Bintray
Дело в том, что деплой библиотеки в Maven Central это весьма трудоёмкая задача, поэтому существуют сервисы, упрощающие этот процесс. Bintray — это система хранения библиотек, выступающая посредником между jCenter, Mavel Central и другими хранилищами. Ей-то мы и воспользуемся.
Создаём аккаунт на Bintray (достаточно бесплатного аккаунта) и подготавливаем контейнер, в который будет загружена наша библиотека: в разделе Owned Repositories выбираем Maven:
Жмём на Add New package:
Заполняем все поля, не забываем указать выбранную лицензию, жмём Create Package:
После этого Bintray подготовит наш контейнер:
Шаг 2: Регистрируем GROUP_ID с помощью Sonatype
Sonatype OSS Repository Hosting Service – это доверенное хранилище артефактов для Maven Central. Сервера Maven Central регулярно синхронизируются с OSSRH, и те артефакты, которые пользователь помечает как готовые к релизу, загружаются в центральное хранилище Maven Central. Чтобы зарегистрировать GROUP_ID, от имени которого Вы будете распространять библиотеки, нужно завести issue в их JIRA. После рассмотрения заявки Вам откроют нужный репозиторий на Sonatype, и Вы сможете загрузить артефакт.
Регистрируемся здесь, открываем и заполняем новую issue:
Остаётся дождаться ответа, после которого Вам создадут репозитории Sonatype с выбранным GROUP_ID. Мне ответили в течение часа:
изначально я не знал о том, что на GROUP_ID накладываются ограничения и выбрал такой: com.romangromov, на что получил ответ:
вот сылка из письма
После этого я сменил GROUP_ID на предложенный com.github.romangromov и успокоился.
Нам остаётся связать наш аккаунт Sonatype с Bintray, для этого идём в Настройки Профиля -> Accounts и указываем юзернейм, который зарегистрировали в джире Sonatype:
Шаг 3: Настраиваем автоматическую подпись пакетов в Bintray
Перед загрузкой артефактов в Maven Central они должны быть подписаны цифровой подписью. Bintray позволяет настроить автоматическую подпись новых пакетов или при загрузке обновлений для уже существующих. Для начала необходимо сгененировать приватный и публичный ключ. Стандарной утилитой для шифрования на линуксе является PGP( Pretty Good Privacy). Она бесплатна для частных лиц, но для использования её в коммерческих целях требуется лицензия. Полностью открытый аналог этой программы GnuPG (Gnu Privacy Guard) — делает то же самое, но абсолютно бесплатно.
Генерируем пару открытый-закрытый ключ:
Здесь Вам предложат выбрать алгоритмы шифрования, указать Ваше полное имя и почтовый адрес, а так же придумать пароль. Оставляем всё по умолчанию, запоминаем почту и пароль, получаем примерно такой результат:
Нам интересен идентификатор публичного ключа в строке pub: 2048R/
. Необходимо загрузить этот PUBLIC_KEY_ID на сервер криптографических ключей, для этого выполним:
gpg —keyserver hkp://pool.sks-keyservers.net —send-keys PUBLIC_KEY_ID
Теперь экспортируем созданную пару ключей в виде текстовых файлов, не забывая подставить значение для почты, которую вы указали на шаге генерации ключей:
gpg -a —export yourmail@email.com > public_key_sender.asc
gpg -a —export-secret-key yourmail@email.com > private_key_sender.asc
Появятся два текстовых файла, копируем их содержимое, идём в Настройки Профиля на Bintray, раздел GPG Signing:
Остаётся поставить галочку, разрешающую автоматическую подпись: снова идём в редактирование профиля и ищем GPG Sign Uploaded files automatically.
Теперь загружаемые артефакты будут автоматически подписаны в Bintray.
Подробней можно почитать тут.
Шаг 4: настраиваем проект в Android Studio
Создаём типовой проект, который содержит два модуля:
1) Модуль библиотеки, SimplePrefsLibrary, который мы будем загружать в jCenter;
2) Модуль приложения, sample, демонстрирующего возможности библиотеки (не подлежит загрузке).
Для того, чтобы загрузить нашу библиотеку в Bintray мы воспользуемся плагином bintray-release для Gradle.
Дело в том, что перед загрузкой библиотеки в Bintray её необходимо снабдить определенными мета-данными, которые соответствуют требованиям jCenter или Maven Central. Чтобы не делать это вручную, мы воспользуемся плагином, который берёт на себя генерацию необходимых мета-файлов.
Сперва заберём API ключ, который нам любезно предоставляет Bintray: Настройки Профиля -> API Key:
Теперь идём в build.gradle в корне проекта, добавляем плагин:
Правим build.gradle для модуля библиотеки:
Здесь мы указали необходимые параметры конфигурации maven в Bintray, подробное описание параметров есть на wiki.
После этого открываем терминал в Android Studio и выполняем:
gradlew clean build bintrayUpload -PbintrayUser= -PbintrayKey= -PdryRun=false
Это запустит gradle скрипт сборки проекта и деплой в Bintray, и, если всё в порядке, мы увидим надпись BUILD SUCCESSFUL, иначе читаем сообщение и устраняем ошибки, как правило сообщения внятные/гуглятся.
Теперь идём в Bintray во вкладку Files и проверяем, загрузился ли пакет:
Если всё в порядке, то мы увидим содержимое нашего пакета. Отлично, теперь его может загрузить любой желающий! Но на данный момент пакет размещен в нашем персональном Maven репозитории, а не в Maven Central или jCenter. Чтобы его использовать необходимо указывать maven репозиторий автора в явном виде:
Мне самому не нравятся подобные зависимости, поэтому сразу же избавимся от этого с помощью синхронизации с jCenter (благо это делается в один клик!): идём в Bintray на страницу нашего пакета, жмём вкладку Maven Central и ссылку из всплывающего окна «Add to jCenter».
Ну вот и всё, после этого будет сформирован запрос на добавление библитеки в jCenter:
После того, как библиотека добавится в jCenter, появится значок c надписью Linked to jCenter, теперь любой желающий сможет использовать Вашу библиотеку с помощью однострочной зависимости:
Источник