เรื่องมันมีอยู่ว่าอยากจะทำ Plugin ตัวหนึ่งให้ทุกคนในทีมใช้ทำงานเพื่อจะได้สะดวกมากขึ้น ก็เลยนั่งหมกหมุ่นกับเรื่องนี้อยู่สองวันเต็มๆเพื่อดูว่าการทำ Plugin ใน Android Studio เนี่ยมันต้องทำยังไงบ้าง

เป้าหมาย

เวลาที่เจ้าของบล็อกเขียนโค้ด บ่อยครั้งจะมีโค้ดที่ต้องเขียนแบบเดิมๆซ้ำซาก แถมไม่ใช่แค่ไฟล์เดียวด้วยนะ มีบางอันต้องสร้างขึ้นมาพร้อมๆกับ 2–3 คลาสโดยมีโค้ดข้างในมีรูปแบบเดิมๆ ก็เลยรู้สึกว่าการใช้ Live Template มันไม่ได้ดั่งใจซักเท่าไร อยากจะได้แบบกดเมนูแล้วสร้างคลาสพวกนั้นขึ้นมาพร้อมเตรียมโค้ดเดิมๆไว้ให้เสร็จสรรพ

บทความชุดนี้จะยกตัวอย่างการสร้าง Boilerplate Code Generator Plugin นั่นเอง

สิ่งที่ต้องรู้

เนื่องจาก Android Studio เป็นโปรแกรมที่พัฒนามาจาก IntelliJ IDEA ดังนั้นการสร้าง Plugin ให้กับ Android Studio ก็จะสามารถใช้งานกับโปรแกรมตัวอื่นๆที่เป็น IntelliJ IDEA ได้เหมือนกัน

โดยการเขียน Plugin ขึ้นมานั้น จะต้องใช้โปรแกรม IntelliJ IDEA นั่นแหละครับ (เจ๋งดี ใช้ตัวเองเขียน Plugin ให้ตัวเอง) แต่ Android Studio จะทำไม่ได้นะ ต้องไปดาวน์โหลด IntelliJ IDEA มาใช้แทน (สายฟรีแนะนำ Community Edition)

และการเขียน Plugin ใน IntelliJ IDEA จะมีลักษณะเหมือนเขียนโปรแกรมทั่วๆไปตัวหนึ่งโดยใช้ภาษา Java และมี Swing GUI ให้ใช้งานสำหรับการออกแบบ GUI ดังนั้นผู้ที่หลงเข้ามาอ่านอยากจะเขียน Plugin แบบไหนก็น่าจะทำได้เท่าที่การเขียนโปรแกรมด้วยภาษา Java จะสามารถทำได้ครับ

เจ้าของบล็อกเป็นพวกที่ไม่ชอบการเขียนโปรแกรมบน Desktop มากๆ แต่สุดท้ายก็ต้องยอมเขียนอยู่ดี ไม่งั้นเดี๋ยวไม่มีปลั๊กอินใช้…

มาเริ่มกันเลยเถอะ

เริ่มจาก IntelliJ IDEA ก่อนเลยครับ ในบทความนี้เจ้าของบล็อกใช้ Community Edition สามารถไปดาวน์โหลดได้ที่ Download IntelliJ IDEA [JetBrains]

ถ้าติดตั้งเป็นครั้งแรก อาจจะต้องมีการตั้งค่า JDK ที่จะใช้ก่อน สามารถเข้าไปดูรายละเอียดและขั้นตอนได้ที่ Setting Up a Development Environment [IntelliJ Platform SDK DevGuide]

Setting Up a Development Environment
Documentation for working with and extending the IntelliJ Platform SDK

ให้เริ่มสร้างโปรเจคขึ้นมาใหม่โดยกำหนดเป็น IntelliJ Platform Plugin และเลือก Project SDK ให้เรียบร้อย (เจ้าของบล็อกใช้ Java 8) จากนั้นก็กด Next เพื่อไปขั้นตอนต่อไปได้เลย

ตั้งชื่อและกำหนด Project Directory ให้เรียบร้อยซะ แล้วกด Finish เพื่อเริ่มสร้างได้เลย

จากนั้นก็จะได้หน้าต่างที่พร้อมสำหรับเขียน Plugin แบบนี้

ขอข้ามขั้นตอนเขียนโค้ดไป แล้วมาที่ตอนจะทดสอบ Plugin กันก่อน เพราะตอนแรกเจ้าของบล็อกก็แอบสงสัยเหมือนกันว่าจะทดสอบยังไง ต้อง Export Plugin ออกมาเป็นไฟล์เพื่อไปติดตั้งลงในโปรแกรมเองหรือป่าว?

ในระหว่างที่ผู้ที่หลงเข้ามาอ่านกำลังเขียน Plugin อยู่ ไม่จำเป็นต้องทำแบบนั้นครับ สามารถทดสอบได้ด้วยการกดปุ่ม Run ที่อยู่มุมขวาบนของตัวโปรแกรม

เอ้ย เหมือนกับตอนเขียนแอนดรอยด์เลยนี่หว่า แต่เสียดายไม่มี Instant Run ฮ่าๆ

แต่ความเจ๋งมันก็อยู่ที่ตอนทดสอบเนี่ยแหละ เพราะว่ามันจะได้ออกมาเป็นแบบนี้

มันจะรันโปรแกรม IntelliJ IDEA อีกตัวขึ้นมาแยกต่างหากเพื่อทำการทดสอบครับ โดยติดตั้ง Plugin ไว้ให้แล้วด้วย

โคตรเท่...

ดังนั้นผู้ที่หลงเข้ามาอ่านจึงทดสอบได้เต็มที่ เสมือนว่ามันคือโปรแกรมตัวหนึ่งที่ติดตั้ง Plugin ไว้ให้แล้ว สามารถสร้างโปรเจคขึ้นมาได้เลย แล้วทดสอบว่า Plugin ที่ได้เขียนไว้นั้นสามารถทำงานได้อย่างถูกต้องหรือไม่ โดยจะมี Console เอาไว้ดูข้อความที่อยากจะ Debug หรือว่าแสดง Error สามารถดูได้ที่หน้าต่าง Console ใน IntelliJ IDEA ที่ใช้เขียน Plugin ครับ อย่าสับสนล่ะ

และในบางครั้ง Error ก็อาจจะแสดงในตัวโปรแกรมให้เลย เหมือนกับตอนผู้ที่หลงเข้ามาอ่านใช้โปรแกรม Android Studio แล้วมันเกิด Error ขึ้นมาน่ะแหละ

เนื่องจากเจ้าของบล็อกอยากจะเขียน Plugin ไว้ใช้กับ Android Studio ดังนั้นก็จะต้องทดสอบกับโปรแกรมที่เป็นแอนดรอยด์เนอะ โดย IntelliJ IDEA ที่ใช้ทดสอบนั้น มีการติดตั้ง Plugin ต่างๆของแอนดรอยด์ให้แล้ว จึงสามารถสร้างโปรเจคที่เป็นแอนดรอยด์ได้เลย

แต่ในการทดสอบครั้งแรกสุดจะต้องมีการกำหนด Directory ของ Android SDK ให้กับตัวโปรแกรมก่อน โดยเลือก Configure > Project Defaults > Project Structure

ที่ด้านซ้ายมือของหน้าต่าง Default Project Structure ให้เลือก SDKs แล้วกดเครื่องหมาย + เพื่อเพิ่ม Android SDK แล้วกำหนด Android SDK home path ให้เรียบร้อยซะ (ใช้ Path เดียวกับของ Android Studio ได้)

สรุป

ถึงจะบอกว่าการเขียน Plugin สำหรับ Android Studio ก็เหมือนกับการเขียนโปรแกรมทั่วๆไป เพราะว่า IntelliJ IDEA ออกแบบให้ Plugin ทำงานแบบนั้น แต่ทว่าก็ยังมีอีกหลายๆอย่างที่ผู้ที่หลงเข้ามาอ่านจะต้องรู้ เพื่อที่จะเขียน Plugin ได้ ซึ่งในบทความหน้าเดี๋ยวเจ้าของบล็อกก็มาเล่าให้ฟังกันครับ