ใช้ตรรกะบิลด์ที่กำหนดเอง

ส่วนนี้จะอธิบายหัวข้อขั้นสูงที่เป็นประโยชน์เมื่อคุณต้องการขยายเวลา ปลั๊กอิน Android Gradle หรือเขียนปลั๊กอินของคุณเอง

เผยแพร่ทรัพยากร Dependency ของตัวแปรไปยังตรรกะที่กำหนดเอง

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

มีการกำหนดค่าแยกกัน 2 รายการที่มีทรัพยากร Dependency แบบทรานซิทีฟของ คลาสพาธแต่ละรายการที่ผู้บริโภคต้องใช้เพื่อใช้งานคลังเป็น ที่อธิบายไว้ด้านล่าง

  • variant_nameApiElements: การกำหนดค่านี้จะเก็บ ทรัพยากร Dependency แบบสับเปลี่ยนที่พร้อมให้ใช้งานสำหรับผู้บริโภคขณะคอมไพล์
  • variant_nameRuntimeElements: การเก็บรักษาการกำหนดค่านี้ ทรัพยากร Dependency แบบทรานซิทีฟที่พร้อมใช้งานสำหรับผู้บริโภคขณะรันไทม์

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับความสัมพันธ์ระหว่างการกำหนดค่าแบบต่างๆ ไปที่ Java Library การกำหนดค่าปลั๊กอิน

กลยุทธ์การแก้ปัญหาทรัพยากร Dependency ที่กำหนดเอง

โปรเจ็กต์อาจรวมทรัพยากร Dependency ในไลบรารีเดียวกัน 2 เวอร์ชันที่แตกต่างกัน ซึ่งอาจทำให้เกิดความขัดแย้งของทรัพยากร Dependency ได้ ตัวอย่างเช่น หากโปรเจ็กต์ของคุณใช้เวอร์ชัน 1 ของโมดูล A และเวอร์ชัน 2 ของ โมดูล B และโมดูล A ขึ้นอยู่กับเวอร์ชัน 3 ของโมดูล B เกิดความขัดแย้งของเวอร์ชัน Dependency

หากต้องการแก้ไขข้อขัดแย้งนี้ ปลั๊กอิน Android Gradle จะใช้สิ่งต่อไปนี้ กลยุทธ์การแก้ปัญหาทรัพยากร Dependency: เมื่อปลั๊กอินตรวจพบว่าเวอร์ชันต่างๆ กัน ของโมดูลเดียวกันนั้นอยู่ในกราฟทรัพยากร Dependency โดยค่าเริ่มต้น ด้วยหมายเลขเวอร์ชันสูงสุด

อย่างไรก็ตาม กลยุทธ์นี้อาจไม่ทำงานตามที่คุณตั้งใจไว้เสมอไป วิธีปรับแต่ง กลยุทธ์การแก้ปัญหาทรัพยากร Dependency ให้ใช้การกำหนดค่าต่อไปนี้เพื่อ แก้ไขทรัพยากร Dependency ที่เฉพาะเจาะจงของตัวแปรที่จำเป็นสำหรับงานของคุณ

  • variant_nameCompileClasspath: การกำหนดค่านี้ มีกลยุทธ์การแก้ปัญหาสำหรับคลาสพาธการคอมไพล์ของตัวแปรที่ระบุ
  • variant_nameRuntimeClasspath: การกำหนดค่านี้ มีกลยุทธ์การแก้ปัญหาสำหรับคลาสพาธรันไทม์ของตัวแปรนั้นๆ

ปลั๊กอิน Android Gradle มี Getters ที่คุณสามารถใช้เพื่อเข้าถึง ออบเจ็กต์การกำหนดค่าของแต่ละตัวแปร คุณจึงใช้ API ของตัวแปรเพื่อ ให้ค้นหาความละเอียดของทรัพยากร Dependency ดังที่แสดงในตัวอย่างด้านล่าง

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 {
            ...
        }
    }
}

ดึงดูด

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 {
            ...
        }
    }
}