160 votes

Créer une bibliothèque Android Jar pour la distribution

Je connais les projets de bibliothèque Android, qui permettent de créer un projet à source partagée pouvant être intégré aux applications Android selon les besoins. Cependant, cela nécessite que la source soit disponible.

Je cherche un moyen de construire et de distribuer une bibliothèque à source fermée qui peut être utilisée dans d'autres projets Android comme un JAR traditionnel. Cela nécessitera l'utilisation du compilateur Android, il ne s'agit donc pas d'un fichier JAR vanilla-Java. Pour information, je n'ai pas besoin d'intégrer des ressources/maquettes dans le JAR.

J'ai vu http://andparcel.com/ mais j'ai l'impression qu'il s'agit d'une solution de rechange, et je préférerais utiliser quelque chose qui soit "officiellement pris en charge" par Google. De plus, je dois m'assurer que le JAR que je construis est compatible avec l'ancienne et la nouvelle version du SDK Android (c'est-à-dire qu'il me faut un moyen de définir la version de la plateforme cible, etc.)

Les derniers outils Android permettent-ils de créer/consommer des binaires JAR ? Pouvez-vous m'indiquer de la documentation sur la façon dont je peux le faire ?

0 votes

Avez-vous obtenu une réponse à votre question ? J'ai une exigence similaire Comment avez-vous procédé pour créer des fichiers jar ?

0 votes

Pour distribuer un .jar pour Android, vous n'avez pas besoin du compilateur Android dx, le compilateur Java ordinaire fonctionne. Si vous distribuez un jar, il sera converti en bytecode dx lorsque l'application sera construite.

49voto

Freddman Points 1759

Si vous créez un projet Android Library sans avoir de ressources, l'ADT (remarqué pour la première fois dans la r16) créera un .jar avec le même nom que le projet dans le dossier 'bin'.

0 votes

Veuillez consulter cette question stackoverflow.com/questions/12970802/

1 votes

J'obtiens ainsi le jar, mais dois-je encore distribuer le dossier des ressources ? J'essaie d'installer Actionbar Sherlock et mes projets ne compilent pas parce qu'ils ne trouvent pas les ressources Actionbar.

1 votes

@schwiz cela ne fonctionne que pour les projets sans ressources (comme je l'indique dans la réponse). Sinon, vous devez l'importer comme un projet Android Library standard.

23voto

white_gecko Points 1362

Android ne fournit pas un type spécial d'Android-JAR. Mais ce que vous pouvez faire est d'ajouter un build.xml à votre projet et de construire le JAR avec ant.

Mon build.xml ressemble à ceci :

<project name="MyAndroidLib" default="dist" basedir=".">
  <description>
This is my Android lib
  </description>
  <!-- set global properties for this build -->
  <property name="src" location="src" />
  <property name="bin" location="bin" />

  <target name="jar">
    <jar destfile="MyAndroidLib.jar" basedir="bin/classes/">
      <!-- replace 'com' by what ever you are using -->
      <!-- as first part of the package name -->
      <!-- e.g. de, org, ... -->
      <!-- the ** is important to include the directory recursively -->
      <include name="com/**" />
    </jar>
  </target>
</project>

Construisez le JAR en exécutant ant jar dans le dossier principal de votre projet.

0 votes

J'ai essayé et j'ai pu construire un fichier JAR, mais la taille était étrange (seulement 343 octets), par rapport à l'exportation d'une bibliothèque vers JAR. Une idée sur les drapeaux manquants ?

0 votes

Vous pouvez vérifier le contenu du JAR avec un programme d'archivage (JAR est un ZIP) et voir ce qui manque et l'ajouter. Vous pouvez trouver plus d'informations ici : ant.apache.org/manual/Tasks/jar.html

5 votes

Avec les derniers kits SDK Android, les fichiers Java sont compilés pour bin/classes donc <jar destfile="MyAndroidLib.jar" basedir="bin/"> devrait être <jar destfile="MyAndroidLib.jar" basedir="bin/classes/">

17voto

ferostar Points 4822

Vous pouvez créer un projet Java "ordinaire" et importer Android.jar à partir de celui-ci. Vous aurez alors accès à tous les composants du SDK. Ensuite, vous pouvez exporter votre projet en tant que jar... et le charger depuis votre application Android. Cela fonctionne très bien et semble être un moyen assez simple de le faire.

1 votes

Dans ce cas, comment déclarer les composants de la bibliothèque comme les services, les activités, les récepteurs de diffusion, les filtres d'intention. L'application cliente doit-elle conserver toutes ces déclarations dans le manifeste ?

0 votes

@ferostar Comment puis-je importer Android.jar dans un projet java ?

0 votes

Si la bibliothèque dispose de ressources, comment générer un R.java et l'ajouter au JAR ?

15voto

Dhrupal Points 678

Il suffit d'aller dans les propriétés du projet dont vous voulez faire un jar. cliquez sur l'onglet Android. et cochez la case Is library. maintenant vous pouvez voir le fichier .jar dans le dossier bin. utilisez-le où vous voulez.

2 votes

Cela semble fonctionner si LibraryProject n'a pas de ressources. Une idée sur la façon de le faire fonctionner avec des ressources ?

0 votes

Il s'agit toutefois d'une mauvaise réponse, si votre projet de bibliothèque dépend d'autres projets. Ces références ne seront pas reprises.

10voto

Jeff Gilfelt Points 15494

La seule solution "officiellement soutenue" par Google est le projet Library, qui nécessite la distribution du code source. Vous pouvez créer un JAR de la manière habituelle, mais vous ne pouvez pas y inclure ou référencer des ressources.

Malheureusement, je pense qu'il n'est pas non plus possible d'inclure un JAR packagé dans un projet de bibliothèque, afin de contourner l'exigence du code source.

0 votes

"Vous pouvez créer un JAR de la manière normale, mais vous ne pouvez pas inclure ou référencer des ressources à l'intérieur." <-- ne semble pas fonctionner correctement dans Eclipse si je référence des classes Android ou si j'utilise le compilateur Android. Des indices sur la façon de faire fonctionner cela ?

5 votes

Je crée simplement un projet Java normal dans Eclipse, j'ajoute Android.jar au chemin de construction, puis je sélectionne Export - Java - Jar File.

0 votes

@JeffGilfelt et si vous incluez le répertoire Android.jar pour le sdk Android-13 dans l'exemple, pourrez-vous toujours utiliser votre bibliothèque jar dans les projets pour un niveau d'API supérieur ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X