อย่างที่เรารู้กันว่า Gradle นั้นเป็น Build Toolkit ที่ Android Studio เลือกใช้งาน จึงทำให้การสร้างโปรเจคแอนดรอยด์บน Android Studio ก็จะมีโค้ดของ Gradle ติดมาด้วยเสมอ เพื่อช่วยจัดการโปรเจคแอนดรอยด์ในขั้นตอนต่าง ๆ นอกเหนือจากการเขียนโค้ดเพื่อควบคุมการทำงานของแอป โดยที่นักพัฒนาสามารถเขียนโค้ดเพื่อกำหนดรูปแบบในการทำงานของ Gradle เพื่อทำงานให้เหมาะสมกับแต่ละโปรเจคได้ตามใจชอบ

นั่นจึงทำให้การพัฒนาแอปแอนดรอยด์ด้วย Android Studio จึงต้องเข้าใจวิธีการใช้งาน Gradle ควบคู่ไปด้วย

บทความในชุดเดียวกัน

โดยปกติแล้ว นักพัฒนาจะไม่ต้องทำอะไรกับ Gradle มากนัก นอกจากกำหนดค่าต่าง ๆ ที่เกี่ยวกับโปรเจคแอนดรอยด์ เพราะ Android Studio ได้เตรียมชุดคำสั่งของ Gradle ไว้ให้พร้อมใช้งานแล้ว

แต่สำหรับโปรเจคที่มีขนาดใหญ่ มีทีมพัฒนาหลายคน ก็อาจจะต้องการกำหนด Build Logic ที่เหมาะสมกับงานและแตกต่างไปที่คนทั่วไปใช้งานกันในปกติ เช่น

  • ใช้ Build Logic ร่วมกันในหลาย ๆ Module
  • แยกโค้ดใน Build Logic ออกเป็นหลายส่วน เพื่อให้จัดการและดูแลในภายหลังได้ง่าย

นั่นจึงทำให้การสร้าง Gradle Plugin ด้วย Kotlin เพื่อใช้งานบนโปรเจคแอนดรอยด์เข้ามาตอบโจทย์ความต้องการแบบนี้

ถ้าจะเรียกให้ถูก จะต้องเรียกว่า Convention Plugin แต่เพื่อให้เข้าใจได้ง่าย เจ้าของบล็อกจะขอเรียกว่า Gradle Plugin ต่อไป

สิ่งที่ควรรู้เกี่ยวกับการสร้าง Gradle Plugin สำหรับ Android

  • นักพัฒนาสามารถสร้าง Gradle Plugin แยกออกมาจากโปรเจคก็ได้ หรือจะสร้างไว้ใน buildSrc ของโปรเจคแอนดรอยด์ก็ได้ โดยในบทความนี้จะสร้างไว้ใน buildSrc ของโปรเจคแอนดรอยด์โดยตรง เพราะต้องการใช้แค่ในโปรเจคเท่านั้น
  • จะใช้ Kotlin หรือ Kotlin DSL สร้าง Gradle Plugin ก็ได้ โดยในบทความนี้จะใช้ Kotlin เป็นหลัก เพราะทำ Build Logic Sharing ได้สะดวกกว่า และเลี่ยงปัญหาจาก Type-safe Accessors ที่ Gradle สร้างขึ้นใหม่ทุกครั้งที่ buildSrc มีการ Compile ใหม่ทั้งหมด
  • สามารถดู API Reference ของ Android Gradle Plugin (AGP) ได้ที่ Android Gradle plugin API reference [Android Developers]
Android Gradle plugin API reference | Android Developers
Android Gradle plugin API reference

ดังนั้นบทความนี้อาจจะไม่เหมาะกับนักพัฒนาแอนดรอยด์ทุกคนเสมอไป เพราะโปรเจคส่วนใหญ่ไม่มีความจำเป็นต้องทำ Gradle Plugin เพื่อใช้เอง การใช้ Gradle Kotlin DSL ก็เพียงพออยู่แล้ว

แต่ถ้าคุณประสบปัญหาคล้าย ๆ กันและจำเป็นต้องสร้าง Gradle Plugin สำหรับ Android เพื่อแก้ปัญหาดังกล่าว เราคือเพื่อนกันครับ 😆