web-dev-qa-db-fra.com

Erreur "Package R n'existe pas" lors de la génération avec Gradle à partir de la ligne de commande

Je tente de construire un projet Android avec Gradle à partir de la ligne de commande, mais j'ai trouvé un problème lorsque je veux changer la structure du répertoire.

Est actuellement comme ceci:

.
└── main
    ├── AndroidManifest.xml
    ├── ic_launcher-web.png
    ├── Java
    │   └── com 
    │       └── myproject
    │           └── MainActivity.Java
    └── res 
        ├── ... 
        ├── layout
        │   ├── activity_main.xml
        │   └── fragment_main.xml
        ├── ... 
        ...

Ensuite j'exécute:

./gradlew clean build

Cela se termine par:

BUILD SUCCESSFUL

D'accord. Tout va bien. Mais maintenant, je veux créer un nouveau répertoire, donc:

Je crée un répertoire ui et je déplace MainActivity.Java Là:

.
└── main
    ├── AndroidManifest.xml
    ├── ic_launcher-web.png
    ├── Java
    │   └── com
    │       └── myproject
    │           └── ui
    │               └── MainActivity.Java
    └── res
        ├── ...
        ├── layout
        │   ├── activity_main.xml
        │   └── fragment_main.xml
        ├── ...
        ...

Modifiez son package:

package com.myproject.ui;

// imports

public class MainActivity extends ActionBarActivity {
    ...
}

Modifiez son Android:name attribut dans AndroidManifest.xml:

<activity 
    Android:name=".ui.MainActivity" 
    Android:label="@string/app_name" >
    ...
</activity>

Et essayez de le compiler à nouveau:

./gradlew clean build

Avec les erreurs suivantes:

/home/birei/MyDummyProject/MyProject/src/main/Java/com/myproject/ui/MainActivity.Java:19: error: package R does not exist
        setContentView(R.layout.activity_main);
                        ^
/home/birei/MyDummyProject/MyProject/src/main/Java/com/myproject/ui/MainActivity.Java:23: error: package R does not exist
                    .add(R.id.container, new PlaceholderFragment())
                          ^
/home/birei/MyDummyProject/MyProject/src/main/Java/com/myproject/ui/MainActivity.Java:33: error: package R does not exist
        getMenuInflater().inflate(R.menu.main, menu);
                                   ^
/home/birei/MyDummyProject/MyProject/src/main/Java/com/myproject/ui/MainActivity.Java:43: error: package R does not exist
        if (id == R.id.action_settings) {
                   ^
/home/birei/MyDummyProject/MyProject/src/main/Java/com/myproject/ui/MainActivity.Java:60: error: package R does not exist
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

BUILD FAILED

Qu'est-ce que je fais mal? Des idées?

Merci.

24
Birei

Cela se produit généralement lorsque vous déclarez le mauvais package dans votre activité.

Assurez-vous que le package com.example.blah; la déclaration de votre activité correspond à la déclaration package de votre AndroidManifest.xml.

53
loopj

Je l'ai, alors je vais me répondre.

J'ai dû déclarer la classe R dans ces activités, fragments ou quelles que soient les classes qui utilisent n'importe quelle ressource définie ici.

Donc, ce serait comme:

package com.myproject.ui;

// lots of imports...
// ...
import com.myproject.R;

public class MainActivity extends ActionBarActivity {
    ...
}
28
Birei

J'ai eu cette erreur car j'ai changé le nom du package dans les fichiers .Java et renommé les répertoires mais je n'ai pas mis à jour AndroidManifest.xml. La modification du nom du package dans AndroidManifest.xml a résolu le problème. Ceci est cohérent avec la réponse de loopj ci-dessus.

La procédure complète pour changer le nom du package Java dans un projet Android qui a fonctionné pour moi) est la suivante:

  1. Package renommé en fichiers .Java.
  2. Répertoires renommés contenant des fichiers .Java.
  3. Package renommé dans AndroidManifest.xml, ainsi que d'autres éléments de ce fichier, le cas échéant.
  4. Renommé applicationId dans build.gradle (celui de l'application).
10
stevehs17

J'ai eu le même problème. La solution consiste à mettre en surbrillance et à cliquer avec le bouton droit sur la classe R et "importer" ou à mettre en surbrillance R et à appuyer sur alt + Entrée, puis à cliquer sur la classe d'importation

1
amir sohail