2013-04-11 1 views
1

J'essaie d'ajouter une bibliothèque de jar externe à mon projet Android. Il compile et télécharge sur mon appareil correctement mais je reçois le logcat suivant:Bibliothèque externe jar incomplet

04-11 08:17:16.849: E/AndroidRuntime(16053): FATAL EXCEPTION: main 
04-11 08:17:16.849: E/AndroidRuntime(16053): java.lang.NoClassDefFoundError: org.puredata.android.service.R$raw 
04-11 08:17:16.849: E/AndroidRuntime(16053): at org.puredata.android.service.PdService.onCreate(PdService.java:184) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.app.ActivityThread.handleCreateService(ActivityThread.java:1951) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.app.ActivityThread.access$2500(ActivityThread.java:117) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:985) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-11 08:17:16.849: E/AndroidRuntime(16053): at android.os.Looper.loop(Looper.java:130) 

Le problème semble être que la classe R ne sont pas inclus dans la compilation bibliothèque. Through this question Je suis arrivé here où ce texte confus déclare

Changement important: Nous avons changé les projets de bibliothèque façon génèrent et packager les classes R:

  • La classe R n'est pas empaqueté dans la sortie du pot des projets de bibliothèque plus. Le projet de bibliothèque ne génère pas la classe R pour les projets de bibliothèque dont ils dépendent.
  • Seuls les projets d'application principaux génèrent les classes Library R à côté des leurs.

    Ce signifie que les projets de bibliothèque ne peuvent pas importer la classe R à partir d'un autre projet de bibliothèque dont ils dépendent. Ce n'est pas nécessaire de toute façon, car leur classe R propre comprend toutes les ressources nécessaires. Notez que l'application projets peuvent encore importer les classes R de la bibliothèque projets référencés, mais encore une fois, ce n'est pas nécessaire que leurs propres classes R comprennent toutes les ressources

Donc, je suis un peu coincé. Comment puis-je/je forcer une bibliothèque à inclure ses ressources nécessaires? Sinon, comment puis-je utiliser la classe R dans une bibliothèque que je veux rendre disponible sans partager mon code de projet?

+1

Les bibliothèques Android ne sont pas des fichiers JAR. Ils comprennent des ressources, d'où ils doivent être liés en tant que source - voir les documents via la réponse Aleks fourni. (Les fichiers JAR de bibliothèque standard peuvent être utilisés dans des projets Android, mais ils n'incluent pas de ressources.) –

Répondre

4

Les projets de bibliothèque Android sont différents des bibliothèques normales. Pour les versions d'Android antérieures au niveau 14 de l'API, vous ne pouvez pas les compiler dans des fichiers JAR autonomes et les inclure dans vos projets. Au lieu de cela, vous devez les inclure en tant que projets de bibliothèque avec votre propre projet Android. Cela signifie que vous devez avoir le code source complet du projet de bibliothèque. Sans cela, vous ne pouvez pas l'utiliser comme projet de bibliothèque. Lorsque vous l'incluez en tant que projet de bibliothèque dans votre propre projet Android et que vous compilez votre projet, les outils de génération combinent les définitions de ressources (classes R) des projets de bibliothèque et vos propres projets et créent une classe R. Vous aurez alors accès aux ressources de vos projets de projets et de bibliothèques. A partir du niveau d'API 14, les projets de bibliothèque peuvent être compilés dans des bocaux autonomes et vous trouverez des informations sur la façon de le faire sur le site de documentation du développeur google. Lisez la documentation Android Library Projects pour plus d'informations.

+0

Merci! C'est en fait une solution de contournement que j'essayais d'appliquer pour que je puisse compiler avec un projet différent ... Je suppose que je vais devoir faire face à ce problème alors. – DigCamara