ส่วนนี้จะอธิบายหัวข้อขั้นสูงที่มีประโยชน์เมื่อคุณต้องการขยายปลั๊กอิน Android Gradle หรือเขียนปลั๊กอินของคุณเอง
เผยแพร่ความเกี่ยวข้องของตัวแปรไปยังตรรกะที่กำหนดเอง
ไลบรารีอาจมีฟังก์ชันการทำงานที่โปรเจ็กต์หรือโปรเจ็กต์ย่อยอื่นๆ อาจต้องการใช้ การเผยแพร่คลังหนังสือคือกระบวนการที่ทําให้คลังหนังสือพร้อมให้บริการแก่ผู้บริโภค ไลบรารีสามารถควบคุมว่าผู้บริโภคจะเข้าถึงทรัพยากรใดได้บ้างในเวลาคอมไพล์และรันไทม์
การกำหนดค่าแยกต่างหาก 2 รายการที่เก็บ Dependency แบบทรานซิทีฟของ classpath แต่ละรายการ ซึ่งผู้ใช้ต้องใช้เพื่อใช้ไลบรารีตามที่อธิบายไว้ด้านล่าง
variant_nameApiElements
: การกําหนดค่านี้เก็บการพึ่งพาแบบทรานซิทีฟที่พร้อมใช้งานสําหรับผู้บริโภคในเวลาคอมไพล์variant_nameRuntimeElements
: การกําหนดค่านี้มีความสัมพันธ์แบบทรานซิทีฟที่พร้อมใช้งานสําหรับผู้บริโภคระหว่างรันไทม์
ดูข้อมูลเพิ่มเติมเกี่ยวกับความสัมพันธ์ระหว่างการกําหนดค่าต่างๆ ได้ที่การกําหนดค่าปลั๊กอินของไลบรารี Java
กลยุทธ์การแก้ไขข้อกําหนดเฉพาะที่กําหนดเอง
โปรเจ็กต์อาจมีการพึ่งพาไลบรารีเดียวกัน 2 เวอร์ชัน ซึ่งอาจทำให้เกิดข้อขัดแย้งในการพึ่งพา เช่น หากโปรเจ็กต์ของคุณใช้โมดูล A เวอร์ชัน 1 และโมดูล B เวอร์ชัน 2 และโมดูล A ใช้โมดูล B เวอร์ชัน 3 โดยอ้อม ก็จะเกิดข้อขัดแย้งของเวอร์ชัน Dependency
เพื่อแก้ไขข้อขัดแย้งนี้ พารามิเตอร์ของ Gradle สำหรับ Android จะใช้กลยุทธ์การแก้ไขข้อขัดแย้งต่อไปนี้: เมื่อตรวจพบว่ามีโมดูลเดียวกันในเวอร์ชันต่างๆ ในกราฟข้อขัดแย้ง พารามิเตอร์จะเลือกโมดูลที่มีหมายเลขเวอร์ชันสูงสุดโดยค่าเริ่มต้น
อย่างไรก็ตาม กลยุทธ์นี้อาจไม่ทํางานตามที่คุณต้องการเสมอไป หากต้องการปรับแต่งกลยุทธ์การแก้ไขข้อกําหนด ให้ใช้การกําหนดค่าต่อไปนี้เพื่อแก้ไขข้อกําหนดเฉพาะของตัวแปรที่จําเป็นสําหรับงาน
variant_nameCompileClasspath
: การกําหนดค่านี้ประกอบด้วยกลยุทธ์การแก้ไขสำหรับ classpath การคอมไพล์ของตัวแปรหนึ่งๆvariant_nameRuntimeClasspath
: การกําหนดค่านี้ มีกลยุทธ์การแก้ไขสำหรับคลาสพาธรันไทม์ของตัวแปรหนึ่งๆ
ปลั๊กอิน Android Gradle มีตัวรับข้อมูลที่คุณสามารถใช้เพื่อเข้าถึงออบเจ็กต์การกําหนดค่าของตัวแปรแต่ละรายการ คุณจึงใช้ Variant API เพื่อค้นหาการแก้ไขข้อกําหนดได้ ดังที่แสดงในตัวอย่างด้านล่าง
Kotlin
android { applicationVariants.all { // Return compile configuration objects of a variant. compileConfiguration.resolutionStrategy { // Use Gradle's ResolutionStrategy API // to customize how this variant resolves dependencies. ... } // Return runtime configuration objects of a variant. runtimeConfiguration.resolutionStrategy { ... } // Return annotation processor configuration of a variant. annotationProcessorConfiguration.resolutionStrategy { ... } } }
Groovy
android { applicationVariants.all { variant -> // Return compile configuration objects of a variant. variant.getCompileConfiguration().resolutionStrategy { // Use Gradle's ResolutionStrategy API // to customize how this variant resolves dependencies. ... } // Return runtime configuration objects of a variant. variant.getRuntimeConfiguration().resolutionStrategy { ... } // Return annotation processor configuration of a variant. variant.getAnnotationProcessorConfiguration().resolutionStrategy { ... } } }