แม้ว่าจะตอบช้า แต่นี่เป็นเรื่องยากสำหรับ Google (คำพูดเดียว) และยังไม่ชัดเจนว่าเกิดอะไรขึ้น ฉันยังไม่มีชื่อเสียงที่จะแสดงความคิดเห็นหรือขอขอบเขต (หรือโพสต์ลิงก์ 3 ลิงก์) ดังนั้นคำตอบนี้อาจน่าเบื่อเล็กน้อย
หากต้องการตอบอย่างรวดเร็วคุณอาจมีปลั๊กอิน Gradle หลายรายการในโครงการของคุณ
ซิงโครไนซ์ Gradle Wrapper และ Plugins
ปัญหาของฉันดูเหมือนจะเริ่มต้นด้วยไฟล์ IML ที่เสียหาย Android Studio (ระหว่างปิดและเปิดโปรเจ็กต์อีกครั้ง) เริ่มบ่นว่า IML หายไป (ไม่ใช่) และควรลบโมดูลซึ่งฉันปฏิเสธ มันยังคงอยู่ฉันอัปเกรดเป็น AS 0.8.7 (ช่อง canary) และติดปัญหา OP (ไม่พบงาน '' ในโครงการรูท) สิ่งนี้ถูกบล็อกอย่างสมบูรณ์ดังนั้นฉันจึงต้องเจาะลึกไปที่ Gradle
ขั้นตอนการซ่อมแซมของฉันบน OSX (โปรดปรับสำหรับ Windows):
- อัปเกรด Android Studio เป็น 0.8.7
- ค่ากำหนด | อัพเดท | เปลี่ยน "Beta Channel" เป็น "Canary Channel" จากนั้นทำการตรวจสอบทันที
- คุณอาจข้ามสิ่งนี้ไปได้
ตรวจสอบ Gradle wrapper (ปัจจุบันคือ 1.12.2 อย่าพยายามใช้ 2.0 ในขณะนี้)
สมมติว่าคุณไม่ต้องการรุ่นใดรุ่นหนึ่งให้ใช้การแจกจ่ายที่รองรับล่าสุด
$ vi ~/project/gradle-wrapper.properties
...
distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
สามารถตั้งค่าใน Android Studio ได้ที่ Preferences | Gradle (แต่ 0.8.7 ทำให้ฉันมีข้อผิดพลาด 'ตำแหน่งไม่ถูกต้อง')
- 'wrapper' เป็นเพียงสำเนาของ Gradle สำหรับโครงการ Android Studio แต่ละโครงการ ช่วยให้คุณมี Gradle 2 ในระบบปฏิบัติการของคุณและเวอร์ชันต่างๆในโครงการของคุณ เอกสารนักพัฒนาซอฟต์แวร์ Android อธิบายว่าที่นี่
- แล้วจึงปรับเปลี่ยนไฟล์ build.gradle คุณสำหรับปลั๊กอิน เวอร์ชันปลั๊กอิน Gradle ต้องเข้ากันได้กับเวอร์ชันการแจกจ่าย / Wrapper สำหรับทั้งโครงการ เนื่องจากเอกสารเครื่องมือ (tools.android.com/tech-docs/new-build-system/user-guide#TOC-Requirements) ล้าสมัยเล็กน้อยคุณสามารถตั้งค่าเวอร์ชันปลั๊กอินต่ำเกินไป (เช่น 0.8.0) และ Android Studio จะแสดงข้อผิดพลาดกับช่วงที่ยอมรับได้สำหรับ Wrapper
ตัวอย่างใน build.gradle คุณมีปลั๊กอินนี้:
dependencies {
classpath "com.android.tools.build:gradle:0.12.+"
}
คุณสามารถลองเปลี่ยนเป็นเวอร์ชันที่แน่นอนได้ดังนี้:
dependencies {
classpath "com.android.tools.build:gradle:0.12.2"
}
และ (หลังจากบันทึกเวอร์ชันที่คุณเปลี่ยนจากในแต่ละกรณี) ตรวจสอบว่าไฟล์ build.gradle ทุกไฟล์ในโปรเจ็กต์ของคุณดึงปลั๊กอินเวอร์ชันเดียวกัน การรักษา "+" ไว้ควรใช้งานได้ (สำหรับ 0.12.0, 0.12.1, 0.12.2 ฯลฯ ) แต่งานสร้างของฉันประสบความสำเร็จเมื่อฉันอัปเดตคลัง Volley ของ Google (เดิมคือ gradle: 0.8. +) และโครงการหลักของฉัน (เดิมคือ 0.12 +) เป็นเวอร์ชันคงที่: gradle: 0.12.2
การตรวจสอบอื่น ๆ
ตรวจสอบให้แน่ใจว่าคุณไม่มีโมดูลแอปพลิเคชัน Android สองโมดูลในโครงการเดียวกัน
สิ่งนี้อาจโต้ตอบกับโซลูชันสุดท้าย (เวอร์ชัน Gradle ที่แตกต่างกันด้านบน) และสาเหตุ
UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define (various classes)
ในการตรวจสอบสร้าง | Make Project ไม่ควรเปิดหน้าต่างขึ้นมาเพื่อถามว่าคุณต้องการสร้างแอปพลิเคชันใด
- ทำให้แคชของคุณไม่ถูกต้อง
- ไฟล์ | แคชไม่ถูกต้อง / รีสตาร์ท (stackoverflow.com/a/19223269/513413)
- หากขั้นตอนที่ 2 ไม่ได้ผลให้ลบ ~ / .gradle / (www.wuttech.com/index.php/tag/groovy-lang-closure/)
- ออกจาก Android Studio
- $ rm -rf ~ / .gradle /
- เริ่ม Android Studio จากนั้นซิงค์:
- เครื่องมือ | Android | ซิงค์โครงการกับไฟล์ Gradle
- ทำซ้ำตามลำดับทั้งหมดนี้ (เลิก ... ซิงค์) สองสามครั้งก่อนที่จะยอมแพ้
- ทำความสะอาดโครงการ
ถ้าคุณเห็นสิ่งนี้ ...
ในการสร้างล่าสุดของฉันฉันยังคงเห็นความล้มเหลวที่น่าสยดสยอง (หน้าข้อยกเว้น) แต่ภายในไม่กี่วินาทีข้อความจะชัดเจนสร้างสำเร็จและแอปก็ใช้งานได้ เนื่องจากฉันไม่สามารถอธิบายได้และแอปก็ใช้งานได้ฉันไม่เคยสังเกตว่าฉันมีปลั๊กอิน Gradle สองตัวในโครงการของฉัน ดังนั้นฉันคิดว่าปลั๊กอิน Gradle ต่อสู้กัน เครื่องหนึ่งขัดข้องอีกเครื่องหนึ่งเสียสภาพและรายงานข้อผิดพลาด
หากคุณมีเวลาวิดีโอ 1 ชั่วโมง "A Gentle Introduction to Gradle" (www.youtube.com/watch?v=OFUEb7pLLXw) ช่วยให้ฉันเข้าถึงไฟล์สร้าง Gradle งานการตัดสินใจสร้างและอื่น ๆ
ข้อจำกัดความรับผิดชอบ
ฉันกำลังเรียนรู้สแต็กทั้งหมดนี้บน OS ต่างประเทศหลังจากทำงานในอาชีพอื่น ... ในเวลาเดียวกันและอยู่ภายใต้แรงกดดัน ในช่วงไม่กี่เดือนที่ผ่านมาฉันได้ทำลายกำแพงทุกอย่างที่ฉันคิดว่า Android มี ฉันเคยมาที่นี่บ่อยมากและนี่เป็นกระทู้แรกของฉัน ฉันคิดว่านี่เป็นการแก้ไขที่ยากดังนั้นฉันจึงขออภัยเป็นอย่างยิ่งหากคุณภาพของคำตอบของฉันสะท้อนให้เห็นถึงความยากลำบากในการไปถึงมัน