web-dev-qa-db-fra.com

Android: Y compris plusieurs Java packages au manifeste

L'application que je développe a de nombreuses activités organisées en sept packages Java. À l'origine, j'ai écrit tout le codage et les trucs pour chaque groupe d'activités dans un package Java comme différents projets.

Maintenant, j'en suis au point où je veux regrouper tous les packages en un seul projet. Lorsque j'ajoute un nouveau package au 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.

(Remarque: j'ai lu this et this et je n'arrivais toujours pas à trouver comment ajouter des packages supplémentaires à mon projet.)

31
HappyGeisha

Assurez-vous que l'instruction d'importation en haut de l'activité fait référence au fichier R correct. 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 besoin d'aucune inclusion explicite de différents packages dans le manifeste. Pour inclure des activités de deux packages différents, dites:

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>
38
Cheryl Simon

Android crée automatiquement la classe nommée "R" dans le package déclaré dans le manifeste de votre application. Lorsque toutes vos classes sont à l'intérieur de ce package, vous n'aurez jamais à importer explicitement "R". Cependant, si vous avez des classes dans d'autres packages, ils ne le verront pas par défaut et vous devrez inclure

 import <app-package>.R;

ou

 import <app-package>.*;

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

Si vous incluez projets de bibliothèque dans votre application, ils peuvent référencer leurs propres classes "R", qui seront générées dans leur forfaits à domicile. Si vous avez plusieurs activités indépendantes qui doivent être regroupées dans une seule application finale, vous devriez sérieusement envisager d'utiliser des projets de bibliothèque au lieu de fusionner manuellement les choses. Cela pourrait vous faciliter la vie.

15
beekeeper

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;
1
Omar.LKS

J'utilise APK Builder et toutes les ressources xml sont déclarées dans un fichier généré automatiquement Java par aapt. Son nom de package est vous devinez, le Android nom du package manifeste) .

Ensuite, il m'est apparu que les fichiers xml n'avaient pas de nom de package. Tous les fichiers xml ne sont que des fichiers xml. Ensuite, aapt génère une classe R avec toutes les ressources XML dans une classe R. Le nom de package de cette classe est celui du manifeste.

Donc, importez package-name.R ou utilisez simplement un package pour l'ensemble de votre projet.

0
Javene CPP McGowan

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

Le fichier R.Java sera alors mis à jour pour inclure l'id .. et bam, votre erreur devrait disparaître.

0
MaybeBaby