ทำไมต้องกำหนดเลขเวอร์ชันของ Dependencies ใน Android Studio

สำหรับผู้ที่หลงเข้ามาอ่านที่ใช้ Dependencies ส่วนใหญ่จะรู้กันอยู่แล้วว่าเวลาที่กำหนด Package ของ Library ถ้าใส่เครื่องหมาย + ในเลขเวอร์ชันก็จะเป็นการค้นหาเวอร์ชันล่าสุดมาให้ทันที

แต่ทว่าใน Android Studio กลับมีการแจ้งเตือนบอกว่าไม่ควรใช้เครื่องหมาย + ในเวลาที่กำหนดเวอร์ชันของ Dependencies

เพราะอะไรล่ะ? เดี๋ยวเจ้าของบล็อกเล่าเป็นเรื่องสั้นๆให้ฟังดีกว่า

การใส่เครื่องหมาย +ในเลขเวอร์ชันของ Dependencies มันก็ง่ายดีนะ แต่ก็ไม่เสมอไป

ถ้าผู้ที่หลงเข้ามาอ่านเป็นนักพัฒนามือใหม่ ไม่ได้ทำโปรเจคใหญ่ๆ และไม่ได้ใช้ Version Control ก็สามารถใช้เครื่องหมาย + เพื่อให้เป็นเวอร์ชันล่าสุดได้เลยครับ

แต่ถ้าผู้ที่หลงเข้ามาอ่านทำโปรเจคใหญ่ๆกับเพื่อนร่วมทีมและใช้ Version Control เจ้าของบล็อกไม่แนะนำให้ใช้เครื่องหมาย + ในการกำหนดเวอร์ชันของ Dependencies

ทำไมน่ะหรือ?

เข้าสู่เรื่องเล่าสั้นๆ

ลองนึกภาพเป็นเรื่องสั้นเรื่องหนึ่งที่ผู้ที่หลงเข้ามาอ่านทำโปรเจคตัวใหญ่เบ้อเริ่มตัวหนึ่งกับเพื่อนร่วมทีม แล้วมีการใช้งาน Library ตัวหนึ่งในโปรเจคนี้ รวมไปถึงมีการใช้ Version Control ด้วยเช่นกัน

ผู้ที่หลงเข้ามาอ่านและเพื่อนร่วมทีมได้กำหนดเวอร์ชันของ Dependencies ในโปรเจคตัวนี้ไว้เป็นเครื่องหมาย +

ระหว่างนั้นผุ้ที่หลงเข้ามาอ่านกับเพื่อนร่วมทีมก็พัฒนาโปรเจคไปพร้อมๆกับการใช้ Version Control ด้วย จนได้เป็นผลงานที่เสร็จแล้วเลยตั้งเลขเวอร์ชันเป็น 1.0.0

ปรากฏว่านักพัฒนา Library ตัวที่ใช้อยู่ เกิดอารมณ์ดีพัฒนาใหม่แล้วปล่อยเป็นเวอร์ชันใหม่ล่าสุดออกมาอีกครั้ง แล้วมีการปรับเปลี่ยนโค้ดมากพอสมควร

แต่ผู้ที่หลงเข้ามาอ่านกับเพื่อนร่วมทีมก็ไม่ซีเรียสอะไร เพราะว่ากำหนดเป็นเครื่องหมาย + อยู่แล้ว เพราะงั้นมันจึงอัพเดทล่าสุดอยู่เสมอ และล่าสุดก็ปล่อยเวอร์ชันใหม่ออกมาเป็นเวอร์ชัน 1.5.2 ที่มีฟีเจอร์ใหม่และ Publish ขึ้น Google Play เป็นที่เรียบร้อย (เฮ ต้องฉลองแล้วสิ)

อยู่มาวันหนึ่งผู้ที่หลงเข้ามาอ่านและเพื่อนร่วมทีมได้รับแจ้งมาว่าเจ้าเวอร์ชัน 1.5.2 มีบั๊กตัวเป้งอยู่ให้แก้ไขซะ และเมื่อตรวจสอบบั๊กที่ว่าก็พบว่าเกิดมาจากโค้ดในโปรเจคกับโค้ดใน Library ที่ใช้

อ้าว ไม่เห็นยากอะไร ระหว่างแก้บั๊ก ก็ไปดึงโค้ดเวอร์ชันก่อนหน้าที่ใช้ได้ปกติที่เก็บไว้ใน Version Control มา Publish แทนไปก่อนก็ได้ จนกว่าจะแก้บั๊กตัวเป้งเสร็จ

อ๊ะ ว่าแต่ Library ที่ใช้งานได้นี่มันเวอร์ชันอะไรล่ะ?

เออนั่นสิเนอะ เพราะผู้ที่หลงเข้ามาอ่านใส่เลขเวอร์ชันเป็นเครื่องหมาย + ไว้ ทำให้มันอัพเดทอยู่ตลอดเวลา จนไม่รู้ว่าใช้เวอร์ชันอะไรอยู่ ดังนั้นต่อให้ดึงโค้ดชุดเก่ามาใช้ก็ยังคงใช้ Library ตัวล่าสุดอยู่ดี ซึ่งไม่ได้ช่วยแก้ปัญหาเลย

ชิปหายสิครับ…..

สรุปปัญหาจากการใช้เครื่องหมาย +

เนื่องจากการใช้เครื่องหมาย + ในการกำหนดเวอร์ชันจะทำให้ Reproduce ได้ยากและตรวจสอบได้ยากด้วย ดังนั้น Android Studio จึงได้เตือนอยู่เสมอเมื่อมีการกำหนดเวอร์ชันของ Dependencies ด้วยเครื่องหมาย + โดยบอกว่ามันจะไม่สามารถรู้ได้ว่าใช้เลขเวอร์ชันอะไร (Unpredictable) และไม่สามารถย้อนกลับไป Build ด้วยชุดโค้ดแบบเดิมทั้งหมดได้ (Unrepeatable)

ดังนั้นทางที่ดีก็ควรจะกำหนดเป็นเลขเวอร์ชันแทนซะ เพื่อที่ว่าเวลาย้อนกลับมาใช้ชุดโค้ดเก่าๆจะได้ไม่เจอปัญหาเรื่องเวอร์ชันของ Dependencies

พยายามตรวจสอบเวอร์ชันล่าสุดของ Dependencies ด้วยตัวเอง

จากเรื่องสั้นดังกล่าว ถ้าจะแก้ปัญหาด้วยการไม่อัพเดท Library ไปเลย เจ้าของบล็อกคิดว่ามันก็ไม่ถูกต้องซักเท่าไร เพราะบางครั้งที่ Library มีการอัพเดทใหม่ก็อาจจะเพราะว่าเพื่อแก้ปัญหาหรือบั๊กในเวอร์ชันเก่าๆนั่นเอง (แต่บั๊กใหม่จะเพิ่มเข้ามาหรือป่าวก็อีกเรื่องหนึ่ง)

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

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

ขอจบเรื่องสั้นเพียงเท่านี้คร้าบบบบ