Android et maven: problème avec les dépendances maven en apk
Je suis actuellement en train de travailler sur un projet Android à l'aide de Maven comme l'outil de génération. Cependant, je vais avoir un problème avec y compris les dépendances, pour être plus précis: aucun de la liste des dépendances dans mon fichier pom sont emballés dans de l'apk. Il en résulte ClassDefNotFound
des erreurs lorsque j'essaye d'exécuter l'application sur mon émulateur (le sous-jacent ClassNotFound
exception est levée dans le Dalvik loader).
Je suis l'aide de Springsource Tool Suite ( 2.5.2.SR1), avec la configuration du plugin:
- Android Outils De Développement (10.0.1.v201103111512-110841)
- Maven integration for Android Outils de Développement (0.2.5)
- Intégration de Maven pour Eclipse (0.12.1.20110112-1712)
- Maven (2.2.1)
C'est mon pom fichier
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>android-test</groupId>
<artifactId>android-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>apk</packaging>
<name>android-test</name>
<properties>
<android-platform>10</android-platform>
<android-emulator>Android-2.3.3</android-emulator>
<android-sdk-path>C:\Program Files\Android\android-sdk</android-sdk-path>
<maven-android-plugin-version>2.8.4</maven-android-plugin-version>
<maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
<android-version>2.3.1</android-version>
<spring-android-version>1.0.0.M2</spring-android-version>
<jackson-version>1.7.2</jackson-version>
</properties>
<build>
<sourceDirectory>src</sourceDirectory>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>maven-android-plugin</artifactId>
<version>${maven-android-plugin-version}</version>
<configuration>
<sdk>
<platform>${android-platform}</platform>
<path>${android-sdk-path}</path>
</sdk>
<emulator>
<avd>${android-emulator}</avd>
</emulator>
<deleteConflictingFiles>false</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin-version}</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>${android-version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-rest-template</artifactId>
<version>${spring-android-version}</version>
</dependency>
<dependency>
<!-- Using Jackson for JSON marshaling -->
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson-version}</version>
</dependency>
</dependencies>
<repositories>
<!-- For testing against latest Spring snapshots -->
<repository>
<id>org.springframework.maven.snapshot</id>
<name>Spring Maven Snapshot Repository</name>
<url>http://maven.springframework.org/snapshot</url>
<releases><enabled>false</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<!-- For developing against latest Spring milestones -->
<repository>
<id>org.springframework.maven.milestone</id>
<name>Spring Maven Milestone Repository</name>
<url>http://maven.springframework.org/milestone</url>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
</project>
Et mon android fichier manifeste:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ae.test.android"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
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>
Autant que je peux dire, ce doit être une installation correcte. Le problème est maintenant, quand j'essaie de construire ce projet, j'obtiens:
Ne peut pas ajouter une source dossier de fichiers en Double dans le même chemin à l'intérieur de l'APK
J'ai trouvé cette sur ALORS, et alors que la solution (en changeant le dossier de sortie par défaut de l'éclipse à bin
au lieu de target
) ont permis de résoudre l'erreur, elle ne résout pas le problème de dépendance. Mon android généré fichiers ne sont pas inclus dans le dossier cible donc la solution est d'aucune utilité pour moi.
Quelqu'un d'autre a eu aucune expérience avec la mise en place d'Android et de Maven et si oui, pourriez-vous s'il vous plaît m'aider?
Merci beaucoup d'avance!
Gladwell - pas encore, bon point! Je vais l'ajouter de ce soir.
Gladwell - j'ai réussi à le faire fonctionner, ont besoin de retester pour voir si je peux reproduire le bug (construit à partir de la ligne de commande de travail). Je vais poser un défaut si je peux reproduire le comportement.
Pouvez-vous poster un lien vers la question que vous avez créé ici?
OriginalL'auteur thomaux | 2011-03-27
Vous devez vous connecter pour publier un commentaire.
J'ai sauté à l'aide de l'intégration de Maven pour Android Outils de Développement (0.2.5) parce que l'éclipse automatiquement le processus de construction a duré trop longtemps. J'ai pu quitter mon dossier de sortie par défaut pour
<project>/target/classes
dans ce cas.De la création de mon projet à partir de la ligne de commande fonctionne très bien. Les dépendances sont inclus dans le fichier apk.
L'exécution du projet à partir d'eclipse ne fonctionne que si j'ajoute les dépendances explicites pour le projet eclipse avec
Que c'était la pilule amère, j'ai dû l'avaler (je ne suis pas de langue maternelle anglaise et espère que cette phrase fait sens).
Je ne pense pas que c'est un bug de l'maven-android-plugin, il fonctionne bien sur la ligne de commande. Ce plugin n'a pas la prétention de travailler avec eclipse. Cette lacune devrait être fermé avec la m2eclipse-android-plugin d'intégration - comme je l'ai compris. Malheureusement, cela ne fonctionne pas bien avec eclipse
Build Automatically
fonctionnalité.Merci pour vos commentaires! Je vais prendre cela en compte lors de nouveaux essais. S'attendre à une mise à jour de ce samedi.
Ne vous précipitez pas - peut-être d'autres réponses viendront dans...
J'ai retesté avec votre configuration et obtenir le même résultat: la construction de l'éclipse n'a pas l'air de fonctionner, mais à l'aide de mvn install android:déployer sur votre ligne de commande fonctionne comme un charme. Malheureusement, je n'ai pas la moindre idée de ce qui cause le bug.
OriginalL'auteur FrVaBe
Utilisation
<scope>compile</scope>
pour vos dépendances qui ne sont pas fournis par le système cible (par exemple, l'android libs sont fournis sur android systèmes) sinon maven ne sera pas mis la .les fichiers de classe de vos dépendances dans le fichier apk.Ce qu'il est. J'ai ajouté le champ d'application de la compilation et qui a résolu le problème. Merci.
OriginalL'auteur Sneek
vous pouvez utiliser
<extractDuplicates>true</extractDuplicates\>
dansandroid-maven-plugin
de configurationpour supprimer les doublons de pots.
OriginalL'auteur user2219636