Создание 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 систем:
└── src └── main └── java └── org └── hello
Создание Android манифеста
Android Manifest содержит всю информацию, необходимую для запуска Android приложения и оно не будет собираться без него.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.hello"
android:versionCode="1"
android:versionName="1.0.0" >
<application android:label="@string/app_name" >
<activity
android:name=".HelloActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Добавьте текстовую строку. Текстовые строки могут ссылаться на файлы приложения или другие источники.
res/values/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Android Maven</string>
</resources>
Теперь определите визуальную структуру пользовательского интерфейса вашего приложения.
res/layout/hello_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/text_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
В директории src/main/java/org/hello
вы можете создать любой Java класс, какой захотите.
В соответствии с задачей урока, создайте следующий класс:
src/main/java/org/hello/HelloActivity.java
package org.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_layout);
}
@Override
public void onStart() {
super.onStart();
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText("Hello world!");
}
}
Установка Maven
Теперь у вас есть проект, который вы можете собрать с помощью Maven. Следующим шагом будет установка Maven.
Загрузите Maven как zip-файл с http://maven.apache.org/download.cgi. Достаточно только бинарники, поэтому смотрите ссылку на apache-maven-{version}-bin.zip или apache-maven-{version}-bin.tar.gz.
Загрузите и распакуйте файл, затем добавьте bin каталог в переменную окружения PATH.
Чтобы протестировать устаноку Maven, запустите mvn
из командной строки:
mvn -v
Если все хорошо, то вы должны увидеть информацию об установке, похожую на эту:
Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-14T11:37:52-06:00) Maven home: /usr/local/apache-maven/apache-maven-3.2.1 Java version: 1.8.0, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "10.9.2", arch: "x86_64", family: "mac"
Теперь у вас есть установленный Maven.
Настройка простой Maven сборки
Теперь, когда Maven установлен, вам необходимо создать определение Maven проекта через XML-файл pom.xml. Помимо всего остального, этот файл содержит имя проекта, версию и зависимости, которые он имеет от внешних библиотек.
Создайте файл с названием pom.xml в корне проекта и поместите в него следующее содержимое:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.hello</groupId>
<artifactId>gs-maven-android</artifactId>
<version>0.1.0</version>
<packaging>apk</packaging>
<properties>
<!-- используйте UTF-8 для всех -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.1.1.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.9.0-rc.1</version>
<configuration>
<sdk>
<platform>19</platform>
</sdk>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Это простейший pom.xml файл, который необходим для сборки Android проекта. Он состоит из следующих настроек проекта:
<modelVersion>
- версия POM модели(всегда 4.0.0)<groupId>
- Группа или организация, которой принадлежит проект<artifactId>
- Имя, которое будет дано артефакту библиотеки проекта(к примеру, название этого АРК файла)<version>
- Версия проекта, с которой он будет собран<packaging>
- Как проект будет собран, в данном случае как Android APK
Секция dependencies
определяет список зависимостей проекта. В частности, она определяет
единственную зависимость от Android библиотеки. В элементе dependency
зависимость
определяется деревом дочерних элементов:
<groupId>
- Группа или огранизация, которой принадлежит зависимость<artifactId>
- Требуемая библиотека<version>
- Конкретная версия требуемой библиотеки<scope>
- Область видимости зависимостей. По умолчанию -compile
, т.е. доступные во время компиляции
В данном случае <scope>
элемент имеет значение provided
.
Зависимости этого типа необходимы для компиляции кода проекта, но будут доступны и
во время выполнения кода. К примеру, Android API всегда доступен, когда Android приложение запущено.
Секция <build>
определяет дополнительную конфигурацию для сборки приложения.
В этой секции есть секция <plugins>
, которая содержит список плагинов,
которые добавляют функциональность процессу сборки. Здесь определена конфигурация для
Android Maven Plugin.
Для этой зависимости также имеются элементы <groupId>
, <artifactId>
и <version>
. Плагин также содержит следующие элементы:
-
<configuration>
- Конфигурация плагина. Здесь вы определяете, с каким Android Platform SDK будет собираться проект -
<extensions>
- Комбинация указания значенийtrue
иapk
для<packaging>
передает управление [Android Maven Plugin] в процессе сборки.
На текущий момент вы определили пока минимальный Maven проект.
Сборка Android кода
Сейчас Maven готов к сборке. Вы можете выполнить выполнить несколько задач сборки уже сейчас, включая компиляцию кода проекта, создание библиотеки пакета(JAR файл) и установить библиотеку в локальный репозиторий Maven зависимостей.
Попробуйте собрать:
mvn compile
Эта команда запускает Maven, говоря ему выполнить задачу compile. Когда он завершит её, вы должны найти скомпилированные .class файлы в каталоге target/classes.
Т.к. вы вряд ли захотите работать или распостранять .class файлы непосредственно, взамен этого возможно запустить package задачу:
mvn package
Эта задача компилирует ваш Java код, запускает тесты и упаковывает код в JAR файл каталоге
target. Имя JAR файла состоит из значений <artifactId>
и
<version>
проекта. К примеру, исходя из содержимого pom.xml файла, отображенного
ранее, JAR файл будет называться gs-maven-android-0.1.0.jar.
Т.к. вы установили значение элемента <packaging>
в "apk", результатом будет АРК
файл в target каталоге в дополнение к JAR файлу. Этот АРК файл является упакованным
Android приложением, готовым к развертыванию на устройстве или эмуляторе.
Android Maven плагин предоставляет несколько Maven задач, которые вы можете использовать в различных фазах процесса сборки или взаимодействия с устройством и эмулятором. Список доступных задач вы можете увидеть, выполнив команду:
mvn android:help
Описание записимостей
Простой Hello World пример полностью самодостаточен и не зависит от каких-либо дополнительных библиотек. Однако, большинство приложений, зависят от внешних библиотек, предоставляющих некоторую функциональность.
К примеру, предположим, что вы хотите, чтобы приложение отображало текущие дату и время. Несмотря на то, что вы фактически можете использовать дату и время из нативных Java библиотек, возможно использовать более интересные для этого вещи, которые предоставляют Joda Time библиотеки.
Для этого, измените HelloActivity.java как показано ниже:
src/main/java/org/hello/HelloActivity.java
package org.hello;
import org.joda.time.LocalTime;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_layout);
}
@Override
public void onStart() {
super.onStart();
LocalTime currentTime = new LocalTime();
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText("The current local time is: " + currentTime);
}
}
В этом примере используемый Joda Time LocalTime
класс возвращает и
отображает текущее время.
Если вы запустите mvn package
сейчас, то сборка завершится с ошибкой,
потому что вы не описали Joda Time как компилируемую зависимость в сборке. Для исправления
этой ошибки, просто добавьте следующие строки в секцию <dependencies>
файла pom.xml.
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.3</version>
</dependency>
Пересборка Android кода с зависимостями
Теперь, если вы выполните mvn compile
или mvn package
, то Maven
должен разрешить Joda Time зависимость из Maven Central репозитория и успешно собрать проект.
Ниже приведена полная версия pom.xml файла:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.hello</groupId>
<artifactId>gs-maven-android</artifactId>
<version>0.1.0</version>
<packaging>apk</packaging>
<properties>
<!-- use UTF-8 for everything -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.1.1.4</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.9.0-rc.1</version>
<configuration>
<sdk>
<platform>19</platform>
</sdk>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Итог
Поздравляем! Вы только что создали простой, но эффективный Maven проект с целью сборки Android проектов.
С оригинальным текстом урока вы можете ознакомиться на spring.io.
comments powered by Disqus