04 May 2015

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

Updated on


        สำหรับผู้ที่หลงเข้ามาอ่านที่ใช้ 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 Store เป็นที่เรียบร้อย (เฮ ต้องฉลองแล้วสิ)

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

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

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

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

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

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


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

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

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

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


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