Si vous obtenez cette erreur Android Maven Ulitme

publicité
Concernant le POM ultime en
particulier et Maven-Android en
général.
Voici quelques erreurs rencontrées et les différentes raisons qui en sont la cause.
La package de test n’est pas « uninstall »
Un bug a été ouvert chez Google concernant ce sujet : http://code.google.com/p/maven-androidplugin/issues/detail?id=160
En substance, le déploiement des tests d’instrumentation échoue sur l’émulateur avec le message
suivant :
org.maven.ide.eclipse.editoFailure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
Cela signifie que vous avez d’abord exécuté un mvn:install qui s’est normalement bien déroulé, puis
vous avez lancé un mvn:install -p android-release qui lui a échoué lamentablement (ou inversement).
La raison est simple, le déploiement des tests d’instrumentation n’a pas pu se faire car maven essaie
de déployer une même application avec une signature différente. Il échoue. Le problème étant que
normalement il doit désinstaller l’application puis la réinstaller, mais il ne le fait pas (le
undeployBeforeDeploy ne marche pas).
Pour s’en sortir, il faut à la main aller désinstaller l’application.
Cela induit qu’une bonne pratique est de ne pas effectuer de mvn:install puis mvn:install –p androidrelease, il faut choisir l’un ou l’autre, surtout sous Hudson où je pense qu’il faut toujours utiliser le
profil release. Sinon, une autre bonne pratique est d’étendre puis de relancer l’émulateur en lui
demandant de se réinitialiser au démarrage.
Conflit Eclipse Maven
Parfois Eclipse et Maven entre en conflit et maven ne marche plus. Vous obtenez l’erreur suivante :
D:\Eclipse\eclipsex64_Android_Custo\android-sdk_r08-windows\android-sdk-windows/platform-tools/aapt.exe
[package, -f, -M, D:\EclipseWorkspaceTutoAndroid\AndroidGenericProject\application\AndroidManifest.xml, S, D:\EclipseWorkspaceTutoAndroid\AndroidGenericProject\application\target\generated-sources\combinedresources\res, -A, D:\EclipseWorkspaceTutoAndroid\AndroidGenericProject\application\target\generatedsources\combined-assets\assets, -I, D:\Eclipse\eclipsex64_Android_Custo\android-sdk_r08-windows\androidsdk-windows\platforms\android-8\android.jar, -F,
D:\EclipseWorkspaceTutoAndroid\AndroidGenericProject\application\target\AndroidGenericProject-ap-1.0.ap_]
[ERROR] Cannot add source folder
com.android.sdklib.build.DuplicateFileException: Duplicate files at the same path inside the APK
at com.android.sdklib.build.ApkBuilder.doAddFile(ApkBuilder.java:716)
at com.android.sdklib.build.ApkBuilder.processFileForResource(ApkBuilder.java:762)
at com.android.sdklib.build.ApkBuilder.addSourceFolder(ApkBuilder.java:587)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
1
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
com.jayway.maven.plugins.android.phase09package.ApkBuilder.addSourceFolder(ApkBuilder.java:244)
at
com.jayway.maven.plugins.android.phase09package.ApkMojo.doAPKWithAPKBuilder(ApkMojo.java:213)
at com.jayway.maven.plugins.android.phase09package.ApkMojo.createApkFile(ApkMojo.java:171)
at com.jayway.maven.plugins.android.phase09package.ApkMojo.execute(ApkMojo.java:144)
at
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:105)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:577)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:324)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:247)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:104)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:427)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:157)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:121)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
[INFO] -----------------------------------------------------------------------[INFO] Reactor Summary:
[INFO]
[INFO] AndroidGenericProject - Parent .................... SUCCESS [0.202s]
[INFO] AndroidGenericProject - Application ............... FAILURE [2.347s]
[INFO] AndroidGenericProject - Integration tests ......... SKIPPED
[INFO] ------------------------------------------------------------------------
Pour vous en sortir, il vous suffit de faire un Maven->clean. Vous avez sans doute lancé/construit
votre projet via Eclipse une première fois.
L’application **-ap ne s’installe pas
Parfois, l’application ***-ap ne souhaite pas s’installer avant le passage de vos tests. Vous obtenez
une erreur de ce type :
[INFO] D:\Eclipse\eclipsex64_Android_Custo\android-sdk_r08-windows\android-sdk-windows/platformtools/adb.exe [shell, am, instrument, -w,
com.android2ee.android.tuto.maven.test/android.test.InstrumentationTestRunner]
INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation target package:
com.android2ee.android.tuto.maven
INSTRUMENTATION_STATUS_CODE: -1
android.util.AndroidException: INSTRUMENTATION_FAILED:
com.android2ee.android.tuto.maven.test/android.test.InstrumentationTestRunner
[INFO] ------------------------------------------------------------------------
2
Cela signifie que l’application**-ap n’est pas installée sur l’émulateur et qu’elle n’est donc pas
disponible pour les tests.
De même si vous obtenez, après avoir lancé un install avec le profil android-release :
[ERROR] Failed to execute goal com.jayway.maven.plugins.android.generation2:maven-androidplugin:2.8.3:internal-pre-integration-test (default-internal-pre-integration-test) on project
AndroidGenericProject-it: Error deploying
D:\EclipseWorkspaceTutoAndroid\AndroidGenericProject\application-it\target\AndroidGenericProject-it1.0.apk to device. You might want to add command line parameter -Dandroid.undeployBeforeDeploy=true or
add plugin configuration tag <undeployBeforeDeploy>true</undeployBeforeDeploy>
pkg: /data/local/tmp/AndroidGenericProject-it-1.0.apkFailure
[INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
-> [Help 1
Cela signifie que sur votre émulateur, vous avez installé l’apk signé avec votre clef de debug, il faut
donc l’enlever et pour éviter l’erreur précédente, il vous faut installer l’application signé de nouveau
sur l’émulateur.
Une des meilleures choses à faire alors est de lancer la commande suivante, aussi bien sur
l’application **-ap que sur **-it :
mvn :clean install android :deploy
Ensuite souvent cela se produit quand l’AVD, votre AndroidManifest.xml, vos fichiers
default.properties, vos fichiers POM, votre fichier de setting ou l’AVD par défaut défini via Maven ne
partagent pas la même version de SDK. Il vous faut vérifier la cohérence de tous ces fichiers.
3
Téléchargement