26 เมษายน 2556

[Android Dev Tips] แก้ไข Package Name ยังไงไม่ให้ผิด


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


        เผื่อว่าผู้ที่หลงเข้ามาอ่านทำตามแล้วดันได้ผลไม่เหมือนกัน เจ้าของบล็อกใช้ Eclipse เวอร์ชัน ADT Bundle  (19-02-2013) ถ้าใช้เวอร์ชันใหม่กว่าก็ไม่น่าจะมีปัญหาเว้นแต่ว่าเปลี่ยนวิธี แต่ถ้าเวอร์ชันเก่ากว่าแล้วมีปัญหาให้ลองอัพเดทดูนะ

        ทีนี้ดูภาพตัวอย่างกันก่อน จากเดิมที่เจ้าของบล็อกได้ตั้งชื่อแพคเกจว่า app.akexorcist.adk_ledblink แต่อยากเปลี่ยนเป็น com.myapp.adkledblink


        • อย่างแรกเลยให้คลิกขวาที่แพคเกจตัวนั้นๆแล้วเลือก Refactor > Rename...


        • จะมีหน้าต่างให้เปลี่ยนชื่อแพคเกจแสดงขึ้นมา แก้ตามที่ต้องการซะ


        • จะเห็นว่าชื่อแพคเกจได้เปลี่ยนไปเรียบร้อยแล้ว


        • แต่ทีนี้ให้ลองเปิดไฟล์ Java ใดๆที่อยู่ในแพคเกจตัวนี้ขึ้นมา จะเห็นว่ายังมีการอิมพอร์ตคลาส R จากแพคเกจตัวเก่าอยู่ ซึ่งเดิมทีจะยังไม่มี แต่ถูกเพิ่มเข้ามาตอนที่เปลี่ยนชื่อแพคเกจ


        • เปิดโฟลเดอร์ gen ดู จะเห็นว่าแพคเกจในนั้นยังเป็นชื่อเดิมอยู่ จึงเป็นสาเหตุที่ทำให้ต้องเรียกคลาส R จากแพคเกจเก่าอยู่นั่นเอง


        • ให้เปิด AndroidManigest.xml ขึ้นมา จะพบว่าก็ยังเป็นชื่อแพคเกจเก่าเหมือนกัน


        • ให้แก้เป็นชื่อใหม่ซะ จากตัวอย่างก็จะแก้เป็น com.myapp.adkledblink


        • เมื่อแก้ไขแล้วก็ให้กดเซฟ (Ctrl +S) จะมีหน้าต่างแสดงขึ้นมา ให้กดปุ่ม Yes ด้วย เพื่ออัพเดทชื่อแพคเกจในโปรเจคนี้


        • จะเห็นว่าชื่อแพคเกจในโฟลเดอร์ gen ถูกเปลี่ยนใหม่แล้ว แต่ไฟล์ Java ที่อยู่ในโฟลเดอร์ src ทั้งหมดจะติดเออเรอแทน



        • ให้ลองเปิดไฟล์ดังกล่าวขึ้นมา จะเห็นว่าเออเรอตรงที่อิมพอร์ตคลาส R เพราะว่าตอนนี้ชื่อแพคเกจในโฟลเดอร์ gen ได้เปลี่ยนใหม่แล้วนั่นเอง



        • ให้ลบออกซะ แล้วกดเซฟ (Ctrl+S) เออเรอก็จะหายไปแล้ว ในตัวอย่างนี้มี Java แค่ไฟล์เดียว ถ้าโปรเจคมีหลายไฟล์ ผู้ที่หลงเข้ามาอ่านก็ต้องไล่ลบคำสั่งดังกล่าวออกให้หมด


        เท่านี้ก็เป็นอันเสร็จสิ้นกับการเปลี่ยนชื่อแพคเกจแล้ว~



เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium