ปลั๊กอิน Gradle การวิเคราะห์การพึ่งพา (DAGP, née Dependency Analysis Android Gradle Plugin) ตรวจพบสิ่งต่อไปนี้:
การพึ่งพาที่ไม่ได้ใช้
ใช้การพึ่งพาสกรรมกริยา (ซึ่งคุณอาจต้องการประกาศโดยตรง)
การขึ้นต่อกันที่ประกาศในการกำหนดค่าที่ไม่ถูกต้อง ( api
เทียบกับ implementation
vs compileOnly
เท่านั้น ฯลฯ )
ผลข้างเคียง ปลั๊กอินยังสามารถบอก ABI ของโปรเจ็กต์ของคุณ และสร้างไฟล์กราฟวิซที่แสดงถึงมุมมองต่างๆ ของกราฟการพึ่งพาของคุณ เหนือสิ่งอื่นใด ผลข้างเคียงเหล่านี้ส่วนใหญ่เป็นพฤติกรรมภายในที่ไม่มีเอกสารบันทึกไว้ แต่อาจน่าสนใจสำหรับผู้ใช้ขั้นสูงบางราย
นอกเหนือจากคำแนะนำที่เกี่ยวข้องกับการพึ่งพา (ดูด้านบน) DAGP ยังให้คำแนะนำอื่นๆ เพื่อช่วยรักษา "ประสิทธิภาพการสร้าง" ของคุณ ซึ่งรวมถึงการตรวจจับ:
ปลั๊กอินที่ไม่จำเป็น (ปัจจุบันมีเพียง kapt
เท่านั้น)
โครงการย่อย ("โมดูล") ที่ใช้ปลั๊กอิน Android โดยไม่จำเป็น และสามารถใช้ไลบรารี JVM "ปกติ" แทนได้
โปรดดูวิกิสำหรับข้อมูลเกี่ยวกับเวอร์ชันของ Gradle, Android Gradle Plugin ฯลฯ ที่ปลั๊กอินนี้เข้ากันได้
สำหรับคำแนะนำโดยละเอียด โปรดดูที่วิกิ
วิธีที่ง่ายที่สุดคือเพิ่มสิ่งต่อไปนี้:
plugins {
id( " com.autonomousapps.build-health " ) version " <<latest_version>> "
}
สำคัญ | หากโปรเจ็กต์ของคุณใช้ Kotlin หรือ Android (หรือทั้งสองอย่าง) จะต้องโหลดปลั๊กอินเหล่านั้นในคลาสโหลดเดอร์สคริปต์การตั้งค่า (หรือพาเรนต์) ดูวิกิสำหรับข้อมูลเพิ่มเติม |
เพื่อการเริ่มต้นอย่างรวดเร็ว เพียงเรียกใช้สิ่งต่อไปนี้:
./gradlew buildHealth
คุณอาจเห็นผลลัพธ์ดังนี้:
> งาน: buildHealth ล้มเหลว ความล้มเหลว: การสร้างล้มเหลวโดยมีข้อยกเว้น * เกิดอะไรขึ้น: การดำเนินการล้มเหลวสำหรับงาน ': buildHealth' > มีการละเมิดการพึ่งพา ดูรายงานได้ที่ file:///path/to/project/build/reports/dependency-analysis/build-health-report.txt
หากคุณต้องการให้พิมพ์รายงานนี้ (อาจยาวมาก) ไปยังคอนโซล ให้เพิ่มสิ่งนี้ลงในไฟล์ gradle.properties
ของคุณ:
dependency.analysis.print.build.health=true
คุณไม่จำเป็นต้องใช้ปลั๊กอินนี้กับทุกโครงการผ่านสคริปต์การตั้งค่า นอกจากนี้ยังสามารถนำไปใช้กับโครงการย่อยเฉพาะเท่านั้น ในกรณีนี้ จะต้องนำไปใช้กับสคริปต์การบิลด์รูทด้วย
plugins {
id( " com.autonomousapps.dependency-analysis " ) version " <<latest_version>> "
}
plugins {
id( " com.autonomousapps.dependency-analysis " )
}
สำคัญ | หากโปรเจ็กต์ของคุณใช้ Kotlin หรือ Android (หรือทั้งสองอย่าง) จะต้องโหลดปลั๊กอินเหล่านั้นในคลาสโหลดเดอร์สคริปต์รูทบิวด์ด้วย (หรือพาเรนต์) ดูวิกิสำหรับข้อมูลเพิ่มเติม |
การวิเคราะห์สามารถรันกับแต่ละโมดูลด้วยงาน projectHealth
ตัวอย่างเช่น:
./gradlew แอป:projectHealth
เป็นเรื่องปกติที่ปลั๊กอินจะรายงานปัญหาต่างๆ มากมายเกี่ยวกับการประกาศการขึ้นต่อกันของโครงการของคุณ เนื่องจากการแก้ไขด้วยตนเองอาจเป็นเรื่องที่น่าเบื่อ ปลั๊กอินจึงมีงานแก้ไขปัญหาทั้งหมดโดยอัตโนมัติ
./gradlew fixDependencies
งาน fixDependencies
ถูกลงทะเบียนในแต่ละโปรเจ็กต์ที่ใช้ปลั๊กอิน การรันตามด้านบนจะเป็นการรันงานในแต่ละโปรเจ็กต์ย่อย ดูเพิ่มเติมที่ การแก้ไขการอ้างอิงด้วยคลิกเดียว
ในบางกรณี อาจถือว่าเป็นไปไม่ได้ที่จะแก้ไขปัญหาทั้งหมดในครั้งเดียว บางทีคุณอาจมีโครงการขนาดใหญ่มาก หรือคุณเผยแพร่ไลบรารี่และคุณรู้ว่าการเปลี่ยนแปลงการประกาศการพึ่งพาของคุณจะเปลี่ยนข้อมูลเมตาของไลบรารีของคุณด้วย ซึ่งอาจทำให้ผู้บริโภคเสียหายได้ เพื่อรองรับกรณีการใช้งานนี้ งาน fixDependencies
จะใช้แฟล็กเผื่อเลือกเพื่อบอกให้ทำการเปลี่ยนแปลงที่ "ปลอดภัย" เท่านั้น
./gradlew fixDependencies --upgrade
ด้วยแฟล็กนี้ งาน fixDependencies
จะไม่ลบหรือ "ดาวน์เกรด" การประกาศการขึ้นต่อกันใดๆ จะเพิ่มหรือประกาศ "อัปเกรด" เท่านั้น (เช่น จาก implementation
เป็น api
)
ในสถานการณ์การเปิดตัวที่เพิ่มขึ้น ใคร ๆ ก็สามารถจินตนาการถึงการใช้แฟล็ก --upgrade
จากนั้นอัปเดตคอนซูเมอร์ทั้งหมด จากนั้นจึงลบแฟล็กออกและลบการอ้างอิงที่ไม่ได้ใช้ทั้งหมดออก
หากการวิเคราะห์มีข้อบกพร่องใดๆ การแก้ไขการประกาศการขึ้นต่อกันจะทำให้บิลด์ของคุณเสียหาย (แต่นี่ก็เป็นกรณีของการแก้ไขด้วยตนเองเช่นกัน) หากคุณพบสิ่งนี้ โปรดแจ้งปัญหา
นอกจากนี้ ฟังก์ชันการเขียนใหม่ยังอิงตามไวยากรณ์ Gradle Groovy/Kotlin DSL ที่เรียบง่าย ซึ่งจะล้มเหลวเมื่อมีสคริปต์สร้างที่ซับซ้อน เราวางแผนที่จะปรับปรุงไวยากรณ์ Gradle Kotlin DSL ในเร็วๆ นี้ เนื่องจากเป็นภาษาสคริปต์สำหรับการสร้างเริ่มต้น แต่เราไม่มีแผนในปัจจุบันที่จะทำเช่นเดียวกันกับ Gradle Groovy DSL
คุณอาจสงสัยว่าเหตุใดปลั๊กอินจึงส่งคำแนะนำ (หรือไม่ปล่อย) เกี่ยวกับการพึ่งพาบางอย่าง คุณสามารถถามว่าทำไม:
./gradlew lib:reason --id com.squareup.okio:okio:2.2.2 (1) > งาน :lib:เหตุผล - คุณถามเกี่ยวกับการพึ่งพา 'com.squareup.okio:okio:2.2.2' ไม่มีคำแนะนำเกี่ยวกับการพึ่งพานี้ - เส้นทางที่สั้นที่สุดจาก :lib ไปยัง com.squareup.okio:okio:2.2.2: :lib --- com.squareup.okio:okio:2.2.2 ที่มา: main - * เปิดเผยคลาส okio.BufferedSource (หมายถึง api)
สตริงเวอร์ชันเป็นทางเลือก
สำหรับข้อมูลโดยละเอียดเกี่ยวกับวิธีกำหนดค่าปลั๊กอิน โปรดดูที่วิกิ
หากต้องการกำหนดค่าปลั๊กอิน ให้ใช้ส่วนขยาย dependencyAnalysis
dependencyAnalysis {
// configuration goes here
}
ต่อไปนี้เป็นรายการบทความ / บล็อกโพสต์ที่ได้รับการเผยแพร่เกี่ยวกับปลั๊กอินนี้:
การดูแลและการให้อาหารที่เหมาะสมของ Gradle build ของคุณ
ปลั๊กอิน Gradle Analysis การพึ่งพา: การใช้การวิเคราะห์ bytecode เพื่อค้นหาการอ้างอิงที่ไม่ได้ใช้
ปลั๊กอิน Gradle การวิเคราะห์การพึ่งพา: ABI คืออะไร
การลดผลกระทบของปลั๊กอิน Gradle ของฉันต่อเวลาการกำหนดค่า: การเดินทาง
แก้ไขการพึ่งพาในคลิกเดียว
…ยังมีอีกมากที่จะมา :)
ปลั๊กอินนี้มีการนำเสนอในจดหมายข่าวเหล่านี้ด้วย:
กราเดิล ต.ค. 2024
เกรเดิล พฤษภาคม 2022
เกรเดิล กันยายน 2020
เกรเดิล สิงหาคม 2020
Android รายสัปดาห์ ฉบับที่ #423
เกรเดิล กรกฎาคม 2020
เกรเดิล มิถุนายน 2020
ตอนพอดแคสต์เกี่ยวกับปลั๊กอินนี้สามารถพบได้ที่นี่:
เบเกอรี่ของนักพัฒนา ตอนที่ 31
วิดีโอ Youtube เกี่ยวกับปลั๊กอินนี้:
ทำความเข้าใจ Gradle #28 – ทำความสะอาด Classpaths คอมไพล์ด้วยปลั๊กอินการวิเคราะห์การพึ่งพา