Comment append des bibliothèques jar externes à un projet Android à partir de la ligne de commande

J’essaie de construire un projet Android qui a des dépendances. Les fichiers jar se trouvent dans le répertoire lib /. Je peux construire le projet en ajoutant ces fichiers jar à mon classpath, mais bien sûr il se ferme dans l’émulateur car ces bibliothèques ne sont pas présentes.

Je le fais depuis la ligne de commande avec ant ( pas dans eclipse). Comment puis-je lui faire inclure ces bibliothèques dans l’apk de la ligne de commande?

La réponse de Jay K était juste au moment de la rédaction, mais maintenant, le SDK a changé et voici la nouvelle façon de le faire:

Ajoutez la ligne suivante à ant.properties :

 jar.libs.dir=lib 

Testé, fonctionne où external.libs.dir ne fonctionne pas.
Cela a changé en décembre 2010 puis à nouveau en octobre 2011.

Juste pour référence future: il y a actuellement un bogue dans le SDK qui empêche d’utiliser jar.libs.dir: http://code.google.com/p/android/issues/detail?id=33194

Une solution simple pour utiliser à nouveau jar.libs.dir (en attendant que le bogue soit corrigé) consiste à append cette cible dans le fichier build.xml:

         

Pour comstackr faire ceci:

 javac -encoding ascii -target 1.5 -d bin/classes \ -bootclasspath $SDKDIR/android.jar src/some/project/* -classpath=libs/*.jar 

Et, lorsque vous générez le bytecode pour Dalvik:

 dx --dex --output=bin/classes.dex bin/classes libs/*.jar 

En outre, lorsque vous empaquetez le fichier APK:

 apkbuilder bin/something.apk -z bin/projectname.ap_ \ -f bin/classes.dex -rf src -rj libs 

Je suppose que vous utilisez Linux … sous Windows sera presque le même.

Répondre à ma propre question:

J’ai créé un fichier “build.properties” et ajouté la ligne

 external.libs.dir=lib 

C’était une chance, vraiment.

L’exemple ci-dessus ne fonctionne pas correctement. Vous ne pouvez pas écraser en ligne le fichier project.all.jars.path. Voici un exemple pratique:

   ORIGINAL jars.path : ${toSsortingng:project.all.jars.path}        HACKED jars.path : ${toSsortingng:project.all.jars.path}  

Si vous stockez vos bibliothèques dans $ {basedir} / libs, le script ant pourra les trouver.

J’ai regardé le script ant actuel ($ {sdk.dir} /tools/ant/build.xml) et il définit jar.libs.dir à “libs”.

FYI, le script ant est bien documenté, il est donc facile de le suivre.

Si vous déplacez les bibliothèques, veillez à modifier vos fichiers .classpath pour éviter que les utilisateurs d’éclipse ne souffrent inutilement.

 external.libs.dir=lib 

après 2 heures de recherche de cette réponse, cela a fonctionné pour moi. Le fichier jar dans mon répertoire libs comstack enfin AND est livré avec l’APK.

mettre des bocaux dans le ${YOUR_PROJECT}/libs

La propriété jar.libs.dir est un répertoire unique . Ce n’est pas comme un CLASSPATH qui est une liste séparée par deux points / points-virgules. La manière d’avoir plusieurs répertoires dans votre jar.libs.dir est de ne pas la définir directement; laissez-le par défaut à libs et allez dans libs et créez les liens logiciels requirejs vers les fichiers .jar dont vous avez besoin.