Gradle - Erreur Impossible de trouver l'implémentation de la méthode () pour les arguments [com.android.support:appcompat-v7:26.0.0]

87

J'essaie d'ouvrir un projet Android existant dans le studio Android et il ne peut pas créer l'application sans l'erreur

Error Android Studio continue de lancer

Error:(74, 1) A problem occurred evaluating project ':app'.
> Could not find method implementation() for arguments 
[com.android.support:appcompat-v7:26.0.0] on object of type 
org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

Mon code dans build.gradle qui peut aider à comprendre mon problème Mes dépendances

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')

// google & support
implementation "com.android.support:appcompat-v7:$supportVersion"
implementation "com.android.support:cardview-v7:$supportVersion"
implementation "com.android.support:recyclerview-v7:$supportVersion"
implementation "com.android.support:design:$supportVersion"
implementation "com.android.support:palette-v7:$supportVersion"
implementation "com.android.support:customtabs:$supportVersion"
implementation "com.android.support:support-v4:$supportVersion"
implementation 'com.google.android.exoplayer:exoplayer:r2.0.4'

// utils
implementation 'com.github.bumptech.glide:glide:4.0.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
implementation 'com.koushikdutta.ion:ion:2.1.7'
implementation 'com.github.Commit451:bypasses:1.0.4'
implementation 'com.jakewharton:butterknife:8.8.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.0'
implementation 'com.drewnoakes:metadata-extractor:2.9.1'
implementation "com.orhanobut:hawk:2.0.1"

}

Veuillez aider à résoudre le problème

cole
la source
5
Utilisez-vous Android Studio 3.0?
Saurabh Thorat
Je suis nouveau sur Android. Mais oui, j'ai mis à jour vers 3.0 car une erreur précédente s'en plaignait.
cole
1
Nope Android Studio 2.3.3
cole
9
Essayez de remplacer implementationparcompile
Saurabh Thorat
Yup ça marche .. Merci
cole

Réponses:

87

Remplacez implementationpar compile.

compilea été récemment obsolète et remplacé par implementationouapi

Saurabh Thorat
la source
17
Le titre dit `` Impossible de trouver l'implémentation de la méthode () '', donc utiliser `` implémentation '' au lieu de `` compiler '' n'aidera pas (sauf si le message d'erreur est complètement faux)
Mario Klebsch
J'utilise déjà "implémentation" pour un module ivy qui est présent dans notre référentiel Artifactory. La réponse n'aide pas
GaVaRaVa
Le fait avec la dépréciation est correct mais ne conduit PAS au message d'erreur affiché dans l'en-tête. Recherchez la réponse de Sunil Kumar: vous modifiez le mauvais fichier. Si elle est confirmée, veuillez rejeter cette réponse car elle est trompeuse. TY
FrankKrumnow
42

Assurez-vous que votre version Gradle est 3.*.*ou supérieure avant d'utiliser «implémentation».

Ouvrez le fichier Gradle au niveau du projet sous les dépendances:

dependencies{
    classpath 'com.android.tools.build:gradle:3.1.2'
}

Ouvrez le fichier 'gradle-wrapper.properties' et définissez distributionUrl:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

ou dernière version.

Synchronisez le projet. J'espère que cela résoudra votre problème.

Krishnamurthy
la source
25

Vous devez utiliser au moins Gradle 3.4 ou plus récent pour pouvoir utiliser implementation. Il n'est pas recommandé de continuer à utiliser la version obsolète compilecar cela peut ralentir les temps de construction. Pour plus de détails, consultez le guide officiel du développeur Android:

Lorsque votre module configure une dépendance d'implémentation, il informe Gradle que le module ne veut pas divulguer la dépendance à d'autres modules au moment de la compilation. Autrement dit, la dépendance n'est disponible pour les autres modules qu'au moment de l'exécution. L'utilisation de cette configuration de dépendances au lieu de l'API ou de la compilation peut entraîner des améliorations significatives du temps de construction, car elle réduit le nombre de projets dont le système de construction a besoin pour recompiler. Par exemple, si une dépendance d'implémentation modifie son API, Gradle recompile uniquement cette dépendance et les modules qui en dépendent directement. La plupart des modules d'application et de test doivent utiliser cette configuration.

https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#new_configurations

Mise à jour: compile sera supprimée d'ici la fin de 2018, alors assurez-vous de n'utiliser que implementationmaintenant:

Attention: la configuration 'compile' est obsolète et a été remplacée par 'implementation'. Il sera supprimé à la fin de 2018

donfuxx
la source
2
Je suis déjà sur Gradle 4.4, j'ai toujours ce problème soudainement.
Infinite Loops du
1
Et quelle est votre version du plugin gradle ? @InfiniteLoops
donfuxx
la version des plugins est 171.4249.39. tools.build: La version de base est 3.0.1
Infinite Loops
Dans Android Studio, si vous créez un nouveau projet à partir de zéro: son fichier gradle utilise implementation- compilet-il ou ? @InfiniteLoops
donfuxx
1
Pour moi, la différence était de quelques millisecondes. Pourquoi jouer avec quelque chose qui n'est pas cassé?
user1608385
20

Assurez-vous d'ajouter ces dépendances dans android / app / build.gradle, et non dans android / build.gradle

Sunil Kumar
la source
2
Confirmé. C'est la bonne réponse. Le message d'erreur décrit ci-dessus s'affiche lors de l'ajout de dépendances au mauvais fichier build.gradle.
FrankKrumnow
@FrankKrumnow Impossible de confirmer car, il pourrait y avoir d'autres raisons également.
Sreekanth Karumanaghat le
2
C'était mon problème, il vaut donc la peine de vérifier que vous ajoutez au bon fichier!
Josh Undefined
Se mettre d'accord. Celui-ci devrait être la bonne réponse. Merci beaucoup!
Mitrakov Artem le
C'était aussi mon problème, après avoir passé 2 jours à essayer de le résoudre. Les dépendances vivaient dans android / build.gradle dans les versions précédentes de Cordova, donc c'était très déroutant pour moi.
SigmaSteve
9

changer appliquer le plugin: 'java' pour appliquer le plugin: 'java-library'

plugin-bibliothèque-java

xiqing lau
la source
Bien que la réponse acceptée semble être la plus populaire, ce n'est pas la seule bonne réponse. Dans mon cas, c'est l'absence du "apply plugin: 'java-library" qui a abouti exactement à la même exception (objet différent, bien sûr). Donc, merci à @ xiqing-lau pour avoir ajouté cette solution possible.
pfurbacher
5

Tellement ridicule, mais je veux toujours partager mon expérience au cas où quelqu'un tomberait dans la situation comme moi.

Veuillez vérifier si vous avez changé: compileSdkVersion-> implementationSdkVersionpar erreur

Nguyen Tan Dat
la source
"Par erreur" signifiant que nous ne sommes PAS censés le changer de compileSdk .. à implementationSdk .. n'est-ce pas? Qu'il est censé rester la version compileSdkVersion? --- Quiconque lit ce commentaire, la réponse est - Oui, stackoverflow.com/a/49755251/4132182
ZenVentzi
Ce n'est pas une solution! le passage de la compilation à l'implémentation ne s'applique qu'aux dépendances .
Jorgesys
2

Votre code

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

Remplacez-le par

dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
Saurabh kumar
la source
2

Comme mentionné ici, https://stackoverflow.com/a/50941562/2186220 , utilisez le plugin gradle version 3 ou supérieure tout en utilisant 'implementation'.

Utilisez également le google()référentiel dans buildscript.

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
    }
}

Ces changements devraient résoudre le problème.

Bot
la source
2

Remplacez votre implementationpar classpath. Cela devrait fonctionner.

Edward Mpanza
la source
Salut Nander, je ne pense pas que ma réponse soit similaire à celle acceptée. De plus, je n'ai pas travaillé pour moi, c'est pourquoi j'ai publié ce qui fonctionnait et pourrais aussi aider d'autres développeurs.
Edward Mpanza
Salut Edward, désolé, j'ai mal lu. Votre réponse est en effet différente.
Nander Speerstra
1

Je suis passé implementationà build.gradle au niveau du module à partir de build.gradle au niveau racine. Cela résout le problème.

user8783065
la source
0

Si l'implémentation n'est pas définie, vous écrivez sur un mauvais fichier. Sur Unity 2019+, le fichier correct est main template grandleet non certains des autres.

George T
la source