2010-10-14 35 views
29

L'application que je développe comporte de nombreuses activités organisées en sept packages Java. A l'origine j'ai écrit tout le codage et les trucs pour chaque groupe d'activités dans un paquet java comme différents projets.Android: inclure plusieurs packages Java au manifeste

Maintenant, je suis au point où je veux regrouper tous les paquets dans un seul projet. Lorsque j'ajoute un nouveau package dans le dossier src, j'obtiens une erreur pour toutes mes valeurs R.id. * ("R ne peut pas être résolu"). Mon instinct me dit qu'il y a quelque chose d'extraordinaire que je dois mettre dans le manifeste du projet, mais je ne trouve aucune ressource en ligne pour me dire comment.

(Note:. J'ai lu this et this et je ne pouvais toujours pas à comprendre comment ajouter des paquets supplémentaires à mon projet)

+0

Avez-vous essayé de faire une construction propre?Et mettre à jour le chemin d'inclusion pour votre fichier R dans la classe que vous avez ajoutée? Si vous aviez précédemment l'activité dans un projet différent, le fichier R était probablement dans un emplacement différent également. –

+2

Je suis allé à Project> Clean ... une demi-douzaine de fois en espérant que ça marcherait ... pas de chance. – HappyGeisha

+0

Qu'en est-il du chemin d'inclusion pour R? Est-ce correct? –

Répondre

36

Assurez-vous que la déclaration d'importation en haut de l'activité fait référence à la bonne Fichier R Chaque projet a son propre fichier R, donc si vous copiez une activité d'un projet à un autre, il essaiera toujours de référencer le fichier R de l'ancien projet.

Vous n'avez pas besoin d'inclure explicitement différents packages dans le manifeste. Pour inclure des activités de deux paquets différents, disent:

com.example.package1.Activity1 
com.example.package2.Activity2 

vous pouvez effectuer les opérations suivantes:

<manifest package="com.example" . . . > 
    <application . . .> 
    <activity android:name=".package1.Activity1" . . . /> 
    <activity android:name=".package2.Activity2" . . . /> 
    </application> 
</manifest> 
+0

Oh Mayra vous avez été si utile! Merci encore! – HappyGeisha

+0

Oui, le code fonctionne, mais Android donne toujours des marques d'erreur rouges (encore compiler et exécuter) – StarWind0

14

Android crée automatiquement la classe nommée « R » dans le paquet déclaré dans le manifeste de votre application. Lorsque toutes vos classes sont dans ce paquet, vous n'aurez jamais à importer explicitement "R". Toutefois, si vous avez des cours dans d'autres paquets, ils ne voient pas par défaut et vous devrez inclure

import <app-package>.R; 

ou

import <app-package>.*; 

(en remplaçant le nom réel pour <app-package> bien sûr).

Si vous ajoutez library projects dans votre App, alors ils peuvent référencer leurs propres classes "R", qui vont être générées à leurs forfaits à domicile. Si vous avez plusieurs activités indépendantes qui doivent être regroupées en une seule application finale, vous devriez envisager sérieusement d'utiliser des projets de bibliothèque au lieu de fusionner manuellement des éléments. Cela pourrait rendre la vie beaucoup plus facile pour vous.

+0

J'ai essayé d'utiliser des projets de bibliothèque dans le passé, et cela n'a pas fonctionné pour moi. C'est parce que toutes mes activités se réfèrent mutuellement et une fois que j'ai fait un projet une bibliothèque alors le référencement est devenu un directionnel. Je suis un programmeur donc ça n'a probablement pas de sens mais merci pour votre aide de toute façon :) – HappyGeisha

+0

Non, c'est un problème courant avec les bibliothèques - elles doivent être assez autonomes, ce qui limite leur utilité. Je pensais juste que cela pourrait être utile dans ce cas puisque vous avez dit que vous aviez développé chaque activité de manière isolée, et donc j'ai pensé qu'ils seraient déjà autonomes. S'ils ne vous facilitent pas la vie, il n'y a pas de pourcentage à les utiliser. – beekeeper

0

Vérifiez que la mise en page -> fichier main.xml est correct et comprend le android:id="@+id/whateverIdHasCausedYouTheError"

Le fichier R.java sera ensuite mis à jour pour inclure l'ID .. et bam, votre erreur doit disparaître.

1

Le problème peut persister même si nous modifions le fichier manifeste. pour l'éviter, nous devons ajouter un import com.example.R; dans toutes nos classes.

exemple: MainActivity.class dans package2

pakage com.example.package2.Activity2 
import com.example.R; 

(TestActivity.class dans package1)

pakage com.example.package1.Activity1 
import com.example.R;