105 votes

Android Studio dit "ne peut pas résoudre le symbole" mais le projet compile

Je suis en train d'importer twitter4j dans AndroidStudio, en utilisant le code suivant dans mon build.gradle :

dependencies {
  compile 'com.android.support:support-v4:18.0.+'
  compile files('libs/twitter4j-core-3.0.4.jar')
}

Le projet compile bien, et je peux créer des objets twitter sans problème. Cependant, dans Android Studio, tout ce qui fait référence à cette bibliothèque montre "cannot resolve symbol" et s'affiche en rouge. Que dois-je faire pour que Android Studio reconnaisse la bibliothèque ?

J'ai déjà essayé de reconstruire le projet, ./gradlew clean, et de fermer et de rouvrir mon projet.

245voto

doydoy Points 3474

Pas d'idée si cela fonctionnera ou non, mais ma seule pensée pour le moment : faites un clic droit sur le fichier jar dans l'arborescence des fichiers dans AS et sélectionnez "Ajouter en tant que bibliothèque..."

EDIT: Vous pouvez faire "Fichier" -> "Invalider la mémoire cache...", et sélectionner l'option "Invalider et redémarrer" pour résoudre ce problème.

EDIT 2: Cette solution devrait fonctionner pour tous les incidents similaires et n'est pas spécifique à twitter4j.

34voto

Nauraushaun Points 680

Essayez de changer l'ordre des dépendances dans Fichier > Structure du Projet > (sélectionnez votre projet) > Dépendances.

Invalidation du cache n'a pas fonctionné pour moi, mais déplacer ma construction du bas de la liste vers le haut l'a fait.

12voto

Georgi Dimitrov Points 121

C'est ce qui a fonctionné pour moi.

Dans le panneau du projet, faites un clic droit sur le nom du projet et sélectionnez Ouvrir les paramètres du module dans le menu contextuel.

ensuite, changez la Version SDK de compilation pour la version minimale disponible (la version minimale que vous avez définie dans le projet). Attendez que Android Studio charge tout.

Il vous donnera des erreurs, ignorez-les.

Maintenant, allez dans votre fichier Java et Android Studio vous suggérera d'importer

import android.support.v4.app.FragmentActivity;

Importez-le, puis retournez dans les Paramètres du module et remettez la version de la SDK de compilation à ce qu'elle était auparavant.

Attendez que tout se charge et voilà.

9voto

Beeing Jk Points 2051

Pour le mien a été causé par le projet de bibliothèque importée, tapez quelque chose dans build.gradle et supprimez-le à nouveau puis appuyez sur synchroniser maintenant, l'erreur disparaît.

6voto

nah0y Points 21

J'ai également eu ce problème avec mon application Android en fonction de certaines de mes propres bibliothèques Android (en utilisant Android Studio 3.0 et 3.1.1).

Chaque fois que je mettais à jour une bibliothèque et retournais à l'application, déclenchant une synchronisation Gradle, Android Studio n'était pas en mesure de détecter les modifications de code apportées à la bibliothèque. La compilation fonctionnait bien, mais Android Studio affichait des lignes d'erreur rouges sur certaines parties du code utilisant la bibliothèque.

Après investigation, j'ai découvert que c'est parce que Gradle pointe vers une ancienne version compilée de mes bibliothèques. Si vous allez dans votreProjet/.idea/libraries/, vous verrez une liste de fichiers XML contenant le lien vers la version compilée de vos bibliothèques. Ces fichiers commencent par Gradle__artifacts_*.xml (* étant le nom de vos bibliothèques).

Alors, pour que Android Studio utilise la dernière version de vos bibliothèques, vous devez supprimer ces fichiers Gradle__artifacts_*.xml, et Android Studio les régénérera, pointant vers la dernière version compilée de vos bibliothèques.

Si vous ne voulez pas le faire manuellement à chaque fois que vous cliquez sur "Synchroniser Gradle" (qui voudrait faire ça...), vous pouvez ajouter cette petite tâche Gradle dans le fichier build.gradle de votre application.

task deleteArtifacts {
    doFirst {
        File librariesFolderPath = file(getProjectDir().absolutePath + "/../.idea/libraries/")
        File[] files = librariesFolderPath.listFiles({ File file -> file.name.startsWith("Gradle__artifacts_") } as FileFilter)

        for (int i = 0; i < files.length; i++) {
            files[i].delete()
        }
    }
}

Et pour que votre application exécute toujours cette tâche avant de synchroniser Gradle, il vous suffit d'aller dans la fenêtre Gradle, puis de rechercher la tâche "deleteArtifacts" sous votreApp/Tâches/autres/, cliquez avec le bouton droit dessus et sélectionnez "Exécuter avant la synchronisation" (voir ci-dessous).

Fenêtre Gradle pour configurer l'exécution de tâches

Maintenant, à chaque fois que vous synchronisez Gradle, Android Studio sera contraint d'utiliser la dernière version de vos bibliothèques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X