Gradle - ข้อผิดพลาดไม่พบการใช้งานเมธอด () สำหรับอาร์กิวเมนต์ [com.android.support:appcompat-v7:26.0.0]


92

ฉันกำลังพยายามเปิดโครงการ Android ที่มีอยู่ใน android studio และ gradle ไม่สามารถสร้างแอปได้โดยไม่มีข้อผิดพลาด

ข้อผิดพลาด android studio ยังคงโยนต่อไป

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.

รหัสของฉันใน build.gradle ซึ่งสามารถช่วยให้เข้าใจปัญหาของฉันการอ้างอิงของฉัน

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"

}

กรุณาช่วยแก้ปัญหา


5
คุณใช้ Android Studio 3.0 หรือไม่
Saurabh Thorat

ฉันยังใหม่กับ Android แต่ใช่ฉันอัปเดตเป็น 3.0 เนื่องจากข้อผิดพลาดก่อนหน้านี้บ่นเกี่ยวกับเรื่องนี้
โคล

2
Nope android studio 2.3.3
cole

9
ลองแทนที่implementationด้วยcompile
Saurabh Thorat

ได้ผล .. ขอบคุณ
cole

คำตอบ:


86

แทนที่implementationด้วยcompile.

compileเพิ่งเลิกใช้งานและถูกแทนที่ด้วยimplementationหรือapi


20
ชื่อระบุว่า 'ไม่พบวิธีการใช้งาน ()' ดังนั้นการใช้ 'การใช้งาน' แทน 'การรวบรวม' จะไม่ช่วยอะไร (เว้นแต่ข้อความแสดงข้อผิดพลาดจะผิดทั้งหมด)
Mario Klebsch

ฉันใช้ "การใช้งาน" สำหรับโมดูลไอวี่ซึ่งมีอยู่ในที่เก็บ Artifactory ของเราแล้ว คำตอบไม่ได้ช่วย
GaVaRaVa

1
ข้อเท็จจริงเกี่ยวกับการลดราคาถูกต้อง แต่ไม่ได้นำไปสู่ความผิดพลาดที่แสดงในส่วนหัว ค้นหาคำตอบของ Sunil Kumar: คุณกำลังแก้ไขไฟล์ผิด หากได้รับการยืนยันโปรดลงคะแนนคำตอบนี้เนื่องจากทำให้เข้าใจผิด TY
FrankKrumnow

45

ตรวจสอบให้แน่ใจว่าเวอร์ชัน Gradle ของคุณ3.*.*สูงกว่าก่อนที่จะใช้ "การใช้งาน"

เปิดไฟล์ Gradle ระดับโปรเจ็กต์ภายใต้การอ้างอิง:

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

เปิดไฟล์ 'gradle-wrapper.properties' และตั้งค่าdistributionUrl:

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

หรือเวอร์ชันล่าสุด

ซิงค์โครงการ ฉันหวังว่านี่จะช่วยแก้ปัญหาของคุณได้


27

ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มการอ้างอิงเหล่านี้ใน android / app / build.gradle ไม่ใช่ android / build.gradle


3
ได้รับการยืนยัน นี่คือคำตอบที่ถูกต้อง ข้อความแสดงข้อผิดพลาดตามที่อธิบายไว้ข้างต้นแสดงเมื่อเพิ่มการอ้างอิงลงในไฟล์ build.gradle ที่ไม่ถูกต้อง
FrankKrumnow

@FrankKrumnow ไม่สามารถยืนยันได้เนื่องจากอาจมีสาเหตุอื่นเช่นกัน
Sreekanth Karumanaghat

3
นี่เป็นปัญหาของฉันดังนั้นจึงควรตรวจสอบว่าคุณกำลังเพิ่มไฟล์ที่ถูกต้อง!
Josh Undefined

ตกลง. อันนี้น่าจะเป็นคำตอบที่ถูกต้อง ขอบคุณมาก!
Mitrakov Artem

นี่เป็นปัญหาของฉันด้วยหลังจากที่ฉันใช้เวลา 2 วันในการพยายามแก้ไข การอ้างอิงที่ใช้ใน android / build.gradle ใน Cordova เวอร์ชันก่อนหน้านี้ทำให้ฉันสับสนมาก
SigmaSteve

25

คุณต้องใช้อย่างน้อยGradle 3.4หรือใหม่กว่าจึงจะสามารถใช้งานimplementationได้ ไม่แนะนำให้ใช้การเลิกใช้งานต่อไปcompileเนื่องจากอาจส่งผลให้เวลาในการสร้างช้าลง สำหรับรายละเอียดเพิ่มเติมโปรดดูคู่มือนักพัฒนา Android อย่างเป็นทางการ:

เมื่อโมดูลของคุณกำหนดค่าการพึ่งพาการนำไปใช้งานจะเป็นการแจ้งให้ Gradle ทราบว่าโมดูลไม่ต้องการรั่วไหลการพึ่งพาไปยังโมดูลอื่น ๆ ในเวลาคอมไพล์ นั่นคือการพึ่งพาจะพร้อมใช้งานสำหรับโมดูลอื่น ๆ ที่รันไทม์เท่านั้น การใช้คอนฟิกูเรชันการอ้างอิงนี้แทน api หรือคอมไพล์อาจส่งผลให้มีการปรับปรุงเวลาบิลด์อย่างมีนัยสำคัญเนื่องจากจะช่วยลดจำนวนโปรเจ็กต์ที่ระบบบิลด์ต้องทำการคอมไพล์ใหม่ ตัวอย่างเช่นหากการพึ่งพาการนำไปใช้เปลี่ยนแปลง API Gradle จะคอมไพล์เฉพาะการอ้างอิงนั้นและโมดูลที่ขึ้นอยู่กับมันโดยตรง แอปและโมดูลทดสอบส่วนใหญ่ควรใช้การกำหนดค่านี้

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

อัปเดต: compileจะถูกลบออกภายในสิ้นปี 2018 ดังนั้นโปรดตรวจสอบให้แน่ใจว่าคุณใช้implementationตอนนี้เท่านั้น

คำเตือน: การกำหนดค่า 'คอมไพล์' ล้าสมัยและถูกแทนที่ด้วย 'การใช้งาน' จะถูกลบออกในปลายปี 2018


2
ฉันใช้ Gradle 4.4 แล้ว แต่ยังคงมีปัญหานี้อยู่
Infinite Loops

1
และปลั๊กอิน gradle เวอร์ชันของคุณคืออะไร? @InfiniteLoops
donfuxx

เวอร์ชันปลั๊กอินคือ 171.4249.39 tools.build:Gradle เวอร์ชัน 3.0.1
Infinite Loops

ใน Android Studio หากคุณสร้างโปรเจ็กต์ใหม่ตั้งแต่ต้น: ไฟล์ gradle ใช้implementationหรือcompileไม่ @InfiniteLoops
donfuxx

1
สำหรับฉันความแตกต่างคือมิลลิวินาที ทำไมต้องยุ่งกับบางสิ่งในเมื่อมันไม่พัง?
user1608385

9

เปลี่ยนใช้ปลั๊กอิน: 'java' เพื่อใช้ปลั๊กอิน: 'java-library'

java ไลบรารีปลั๊กอิน


แม้ว่าคำตอบที่ได้รับการยอมรับจะเป็นที่นิยมมากที่สุด แต่ก็ไม่ใช่คำตอบเดียวที่ถูกต้อง ในกรณีของฉันมันไม่มี "ใช้ปลั๊กอิน: 'java-library" ซึ่งส่งผลให้เกิดข้อยกเว้นเหมือนกันทุกประการ (แน่นอนว่าวัตถุต่างกัน) ดังนั้นขอขอบคุณ @ xiqing-lau ที่เพิ่มโซลูชันที่เป็นไปได้นี้
pfurbacher

5

ไร้สาระมาก แต่ฉันก็ยังอยากแบ่งปันประสบการณ์ของฉันเผื่อว่าจะมีคนตกอยู่ในสถานการณ์เหมือนฉัน

โปรดตรวจสอบว่าคุณเปลี่ยนแปลง: compileSdkVersion-> implementationSdkVersionโดยไม่ได้ตั้งใจ


"โดยไม่ได้ตั้งใจ" หมายความว่าเราไม่ควรเปลี่ยนจาก compileSdk .. ไปเป็น ImplementSdk .. ใช่ไหม? ว่ามันควรจะอยู่ compileSdkVersion? --- ใครอ่านความคิดเห็นนี้คำตอบคือ - ใช่stackoverflow.com/a/49755251/4132182
ZenVentzi

นี่ไม่ใช่วิธีแก้ปัญหา! การเปลี่ยนการคอมไพล์เป็นการใช้งานจะใช้ได้กับการอ้างอิงเท่านั้น
Jorgesys

2

รหัสของคุณ

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

แทนที่โดย

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

2

ดังที่กล่าวไว้ที่นี่https://stackoverflow.com/a/50941562/2186220ใช้ปลั๊กอิน gradle เวอร์ชัน 3 หรือสูงกว่าในขณะที่ใช้ 'การใช้งาน'

นอกจากนี้ให้ใช้ที่google()เก็บในbuildscript.

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

การเปลี่ยนแปลงเหล่านี้ควรแก้ปัญหาได้


2

แทนที่ของคุณimplementationด้วยclasspath. ที่ควรจะทำงาน


สวัสดีแนนเดอร์ฉันไม่คิดว่าคำตอบของฉันจะคล้ายกับคำตอบที่ยอมรับ นอกจากนี้ฉันไม่ได้ทำงานให้ฉันด้วยเหตุนี้ฉันจึงโพสต์สิ่งที่ได้ผลและสามารถช่วยเหลือนักพัฒนาคนอื่น ๆ ด้วย
Edward Mpanza

สวัสดีเอ็ดเวิร์ดขอโทษฉันอ่านผิด คำตอบของคุณแตกต่างกันแน่นอน
Nander Speerstra


0

หากไม่ได้กำหนดการนำไปใช้งานแสดงว่าคุณกำลังเขียนไฟล์ผิด ใน Unity 2019+ ไฟล์ที่ถูกต้องmain template grandleไม่ใช่บางไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.