Bibliothèque Java qui dépend d'Android.os résultats dans NoClassDefFoundError lorsqu'il est utilisé


J'ai créé un processeur d'annotation java dans un projet (que j'appellerai JavaLibrary) qui utilise Android.OS.Bundle. En tant que tel, le projet a la ligne suivante dans son gradle.construire des dépendances:

compile 'com.google.android:android:4.1.1.4'

Dans gradle.build, sourceCompatibility et targetCompatibility sont tous deux définis sur la version 1.6 et ce projet se compile très bien tout seul.

J'ai également créé un projet de bibliothèque Android (que j'appellerai AndroidLibrary) qui dépend de JavaLibrary. Je m'attends à ce que JavaLibrary en traite annotations utilisées dans AndroidLibrary et générer du code.

Cependant, lorsque j'essaie de compiler AndroidLibrary, j'obtiens l'erreur suivante:

java.lang.NoClassDefFoundError: android/os/Bundle

La trace de la pile montre la ligne où l'android.OS.Bundle est référencé dans JavaLibrary.

Pourquoi cela se produit-il et comment puis-je compiler ces deux projets ensemble?

Author: Nathan Taylor, 2013-10-03

1 answers

Je ne suis pas sûr avec gradle parts. Les pots du système d'exploitation Android sur lesquels nous construisons ne sont que des talons d'API et ne doivent pas être exportés car ils sont "fournis" par l'appareil.

Pour utiliser les classes Android dans les projets Java, vous pouvez copier les fichiers source Java dont vous avez besoin dans votre projet Java tant qu'ils (et leurs dépendances) ne font pas référence au code natif ou interne.

Je ne sais pas pourquoi vous avez besoin d'un bundle, mais voici un lien vers la copie de GrepCode source:

Http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2.1_r1/android/os/Bundle.java

 0
Author: CodeShane, 2013-10-15 07:09:01