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.