อย่างที่เรารู้กันว่า Gradle นั้นเป็น Build Toolkit ที่ Android Studio เลือกใช้งาน จึงทำให้การสร้างโปรเจคแอนดรอยด์บน Android Studio ก็จะมีโค้ดของ Gradle ติดมาด้วยเสมอ เพื่อช่วยจัดการโปรเจคแอนดรอยด์ในขั้นตอนต่าง ๆ นอกเหนือจากการเขียนโค้ดเพื่อควบคุมการทำงานของแอป โดยที่นักพัฒนาสามารถเขียนโค้ดเพื่อกำหนดรูปแบบในการทำงานของ Gradle เพื่อทำงานให้เหมาะสมกับแต่ละโปรเจคได้ตามใจชอบ
นั่นจึงทำให้การพัฒนาแอปแอนดรอยด์ด้วย Android Studio จึงต้องเข้าใจวิธีการใช้งาน Gradle ควบคู่ไปด้วย
บทความในชุดเดียวกัน
- Introduction [Now Reading]
- Android Gradle Plugin
- Getting Started
- [ตัวอย่าง] สร้าง Dependency Sharing Plugin เพื่อใช้กับทุก Module
- [ตัวอย่าง] สร้าง Firebase Plugin เพื่อแยกคำสั่งของ Firebase ออกจาก App Module
- [ตัวอย่าง] สร้าง Configuration Sharing Plugin เพื่อใช้งานใน Library Module
โดยปกติแล้ว นักพัฒนาจะไม่ต้องทำอะไรกับ 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]
ดังนั้นบทความนี้อาจจะไม่เหมาะกับนักพัฒนาแอนดรอยด์ทุกคนเสมอไป เพราะโปรเจคส่วนใหญ่ไม่มีความจำเป็นต้องทำ Gradle Plugin เพื่อใช้เอง การใช้ Gradle Kotlin DSL ก็เพียงพออยู่แล้ว
แต่ถ้าคุณประสบปัญหาคล้าย ๆ กันและจำเป็นต้องสร้าง Gradle Plugin สำหรับ Android เพื่อแก้ปัญหาดังกล่าว เราคือเพื่อนกันครับ 😆