web-dev-qa-db-fra.com

Android supporte la configuration de la bibliothèque avec maven

Je suis un peu nouveau sur Android.

Je mets en place un module maven pour Android (elle se trouve dans un projet multi-modules existant), qui utilise les bibliothèques de support Google (v4, v7, v13). Quelle est la manière la plus adéquate de le faire fonctionner avec maven.

Je veux que mon projet puisse être construit avec Jenkins (Maven), donc je ne peux pas lier de projets spécifiques IDE ou tout moyen de dépendances non-maven).

Toutes les options pour combiner maven/gradle dans Jenkins sont également acceptables.

26
inteloid

malheureusement, ces bibliothèques ne sont pas dans le référentiel central maven. vous devez donc utiliser le maven-Android-sdk-deployer ( link ) pour installer les bibliothèques dans votre référentiel maven. puis ajoutez les bibliothèques nécessaires à votre fichier pom.xml comme décrit dans le fichier Lisez-moi.

12
sebastian

Outre le maven-Android-sdk-deployer , si vous avez toujours Android SDK installé avec des extras Google comme moi, vous pouvez définir un référentiel local dans le fichier POM de vos projets et laissez maven télécharger les dépendances depuis celle-ci.

La raison derrière cela est que, Google a déjà publié les addons supplémentaires dans une disposition de répertoire compatible avec le référentiel maven. Pour ma propre machine, c'est comme ça:

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
.............

Donc, j'ai juste besoin de mettre quelques lignes supplémentaires dans mon fichier POM comme ceci, et "env.Android_HOME" est la variable d'environnement pointée vers Android Chemin d'installation du 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>

Après ces étapes, Maven dans mon Eclipse activé par ADT et la console sont tous les deux heureux de résoudre les dépendances souhaitées, comme ceci:

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] ------------------------------------------------------------------------
54
Jerry Tian

J'ai simplement utilisé la fonctionnalité système fournie par 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>
10
bsorrentino

Je viens de rencontrer le même problème et j'ai fini par déployer dans un référentiel gitgub public.

Si vous devez toujours l'utiliser, vous pouvez effectuer l'une des opérations suivantes:

Ajoutez le référentiel github à la section référentiels de votre 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>

Ensuite, vous pouvez ajouter la dépendance comme suit:

<!-- Android Support Libraries -->
<dependency>
  <groupId>uk.co.icatalyst</groupId>
  <artifactId>Android-support-v4</artifactId>
  <version>18</version>
  <scope>compile</scope>
</dependency>

Ou, forkez le référentiel, puis vous pouvez utiliser votre propre URL pour l'URL du référentiel.

[Modifier] J'ai mis à jour les bibliothèques, une dépendance alternative serait:

<dependency>
  <groupId>com.Android.support</groupId>
  <artifactId>support-v4</artifactId>
  <version>18.0.0</version>
  <scope>compile</scope>
</dependency>

Et pour le maillage:

<dependency>
  <groupId>com.Android.support</groupId>
  <artifactId>gridlayout-v7</artifactId>
  <version>18.0.0</version>
  <scope>compile</scope>
</dependency>
10
kmchugh12

Je recommanderais de conserver Android artefacts dans le cadre de votre principal référentiel MAVEN. En utilisant une telle approche, vous échapperez à des configurations supplémentaires et, par conséquent, à tout méli-mélo. Ensuite, vous pourrez utiliser des fichiers POM simples pour tous vos projets côté client.

Pour ce faire ou exécuter une commande comme celle-ci:

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

ou copiez simplement ./extras/Android/m2repository/com/Android/ dans ./rootMavenRepo/com/google/Android de votre référentiel.

2
Sergio Kosik

Grâce à Google. Vous pouvez maintenant le faire

  • Assurez-vous que la section des référentiels comprend un maven

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}
  • Ajoutez la bibliothèque de support à la section des dépendances

dependencies {
    ...
    compile "com.Android.support:support-core-utils:25.3.1"
}
2
Qamar