Настройка библиотеки поддержки Android с помощью Maven
Я новичок в Android.
Я устанавливаю модуль maven для приложения для Android (он находится в существующем многомодульном проекте), который использует библиотеки поддержки Google (v4, v7, v13). Что является наиболее адекватным способом заставить его работать с Maven.
Я хочу, чтобы мой проект можно было собирать с помощью Jenkins (Maven), поэтому я не могу связать какие-либо конкретные проекты IDE или какие-либо средства, отличные от maven-зависимостей.
Любые варианты объединения maven/gradle в Jenkins также приемлемы.
6 ответов
К сожалению, эти библиотеки не находятся в центральном хранилище Maven. поэтому вы должны использовать maven-android-sdk-deployer ( ссылка) для установки библиотек в ваш репозиторий maven. затем добавьте необходимые библиотеки в файл pom.xml, как описано в файле readme.
Помимо https://github.com/mosabua/maven-android-sdk-deployer, если у вас всегда установлен Android SDK с такими дополнительными компонентами Google, как я, вы можете определить локальный репозиторий в POM-файле вашего проекта и позволить maven загружать зависимости из этого локального.
Смысл этого заключается в том, что Google уже выпустил дополнительные дополнения в макете каталога, совместимого с репозиторием maven. Для моей собственной машины это так:
jerry-mac-mini:android jerry$ pwd
/Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android
jerry-mac-mini:android jerry$ tree m2repository
m2repository
├── NOTICE.txt
├── com
│ └── android
│ └── support
│ ├── appcompat-v7
│ │ ├── 18.0.0
│ │ │ ├── appcompat-v7-18.0.0.aar
│ │ │ ├── appcompat-v7-18.0.0.aar.md5
│ │ │ ├── appcompat-v7-18.0.0.aar.sha1
│ │ │ ├── appcompat-v7-18.0.0.pom
│ │ │ ├── appcompat-v7-18.0.0.pom.md5
│ │ │ └── appcompat-v7-18.0.0.pom.sha1
│ │ ├── 19.0.0
│ │ │ ├── appcompat-v7-19.0.0.aar
│ │ │ ├── appcompat-v7-19.0.0.aar.md5
.............
Итак, мне просто нужно добавить несколько дополнительных строк в мой POM-файл, например, "env.ANDROID_HOME" - это переменная среды, указывающая путь установки Android SDK.
<repositories>
<repository>
<id>android-support</id>
<url>file://${env.ANDROID_HOME}/extras/android/m2repository</url>
</repository>
</repositories>
......
<dependency>
<groupId>com.android.support</groupId>
<artifactId>support-v4</artifactId>
<version>19.0.1</version>
</dependency>
После этих шагов Maven в моем ADT-совместимом Eclipse и консоли оба успешно разрешают нужные зависимости, например так:
jerry-mac-mini:android-app-project jerry$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building android-app-project 0.0.5-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: file:///Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android/m2repository/com/android/support/support-v4/19.0.1/support-v4-19.0.1.pom
Downloaded: file:///Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android/m2repository/com/android/support/support-v4/19.0.1/support-v4-19.0.1.pom (403 B at 28.1 KB/sec)
Downloading: file:///Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android/m2repository/com/android/support/support-v4/19.0.1/support-v4-19.0.1.jar
Downloaded: file:///Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android/m2repository/com/android/support/support-v4/19.0.1/support-v4-19.0.1.jar (621 KB at 16783.8 KB/sec)
[INFO]
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ android-app-project ---
[INFO] team.apollo:android-app-project:apk:0.0.5-SNAPSHOT
[INFO] +- com.google.android:android:jar:2.3.3:provided
[INFO] | +- org.apache.httpcomponents:httpclient:jar:4.0.1:provided
[INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.0.1:provided
[INFO] | | \- commons-codec:commons-codec:jar:1.3:provided
[INFO] | +- org.khronos:opengl-api:jar:gl1.1-android-2.1_r1:provided
[INFO] | +- xerces:xmlParserAPIs:jar:2.6.2:provided
[INFO] | \- org.json:json:jar:20080701:provided
[INFO] +- com.android.support:support-v4:jar:19.0.1:compile
[INFO] +- com.google.code.gson:gson:jar:2.2.2:compile
[INFO] +- de.mindpipe.android:android-logging-log4j:jar:1.0.3:compile
[INFO] \- log4j:log4j:jar:1.2.16:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.339s
[INFO] Finished at: Mon Mar 24 14:32:00 CST 2014
[INFO] Final Memory: 10M/325M
[INFO] ------------------------------------------------------------------------
Я только что столкнулся с той же проблемой и закончил развертывание в публичном хранилище gitgub.
Если вам все еще нужно его использовать, вы можете выполнить одно из следующих действий:
Добавьте репозиторий github в раздел репозиториев в вашем pom.xml:
<repository>
<id>android.support-mvn-repo</id>
<url>https://raw.github.com/kmchugh/android.support/mvn-repo</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</snapshots>
</repository>
Затем вы можете добавить зависимость следующим образом:
<!-- Android Support Libraries -->
<dependency>
<groupId>uk.co.icatalyst</groupId>
<artifactId>android-support-v4</artifactId>
<version>18</version>
<scope>compile</scope>
</dependency>
Или, разветвите хранилище, затем вы можете использовать свой собственный URL для URL хранилища.
[Изменить] Я обновил библиотеки, альтернативная зависимость будет:
<dependency>
<groupId>com.android.support</groupId>
<artifactId>support-v4</artifactId>
<version>18.0.0</version>
<scope>compile</scope>
</dependency>
И для сетки:
<dependency>
<groupId>com.android.support</groupId>
<artifactId>gridlayout-v7</artifactId>
<version>18.0.0</version>
<scope>compile</scope>
</dependency>
Я просто использовал функцию области действия системы, предоставленную maven
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>19.0.1</version>
<scope>system</scope>
<systemPath>${env.ANDROID_HOME}/extras/android/support/v4/android-support-v4.jar</systemPath>
</dependency>
Спасибо Google. Теперь вы можете сделать это
- Убедитесь, что раздел репозиториев включает в себя Maven
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
}
- Добавьте библиотеку поддержки в раздел зависимостей
dependencies {
...
compile "com.android.support:support-core-utils:25.3.1"
}
Я бы порекомендовал хранить артефакты Android как часть вашего основного хранилища MAVEN. Используя такой подход, вы избежите дополнительных настроек и, как следствие, любых путаниц. Тогда вы сможете использовать простые файлы POM для всех ваших проектов на стороне клиента.
Чтобы сделать это или выполнить команду следующим образом:
mvn install:install-file -DgroupId=com.google.android -Dversion=23.1.1 -Dpackaging=jar -DartifactId=support-v13 -Dfile=support-v13-23.1.1-sources.jar
или просто скопируйте./extras/android/m2repository/com/android/ в./rootMavenRepo/com/google/android своего хранилища.