Sunday, December 29, 2013

เมื่อ ADB ไม่สามารถติดต่อ AVD หรือ Mobile Device ได้

เมื่อเราใช้ Eclipse และสั่งรัน emulator (AVD) ด้วย ADT plugin จนเคยชินด้วยความสะดวกสบาย จนมาวันหนึ่งที่เราต้องการสั่งรัน AVD (Android Virtual Device) โดยไม่มี Eclipse เราจะทำอย่างไร

ก่อนอื่น ต้องรู้ก่อนว่า จะทดสอบโปรแกรมบน AVD นั้น ซึ่งใช้ Eclipse คลิกอย่างเดียว มันมีกระบวนการเบื้องหลังอยู่อย่างไรบ้าง

  1. Start ADB (Android Debug Bridge) ตัวนี้ล่ะครับที่ทำให้เราสามารถเชื่อมต่อกับ emulator หรือ device จริงๆได้
  2. Start AVD หรือ เสียบสาย USB ที่เชื่อมต่อกับอุปกรณ์
  3. เชื่อม ADB กับ AVD หรืออุปกรณ์
  4. ตอนนี้ก็สามารถติดตั้ง ทดสอบโปรแกรม หรือจัดการอะไรต่างๆมากมายบน AVD หรืออุปกรณ์ได้แล้ว
 อย่างไรก็ตาม ปัญหาที่มักจะเจอ คือ ขั้นตอนที่ 3 ไม่สามารถสามารถติดต่อ AVD หรือ Mobile Device ได้

วิธีการลองแก้ไข คือ
  1. ตรวจสอบให้ชัดเจนว่า AVD หรืออุปกรณ์ได้ทำงานแล้ว (เปิดอยู่) เสียบสาย USB แน่น ลองดึงออกแล้วเปลี่ยนช่องเสียบดู
  2. ตรวจสอบว่าได้เปิด USB debugging ใน developer mode แล้ว
  3. เปิด command prompt และไปที่โฟลเดอร์ของ Android SDK หาโฟลเดอร์ sdk\platform-tools แล้วพิมพ์คำสั่งว่า "adb devices" ถ้าขึ้นชื่อ AVD หรืออุปกรณ์ และไม่ตามด้วยคำว่า offline แสดงว่าใช้งานได้แล้ว (ถ้าไม่ได้ใช่ eclipse ตัว adb จะไม่ได้ทำงานเองนะครับ ต้องไป start มัน ซึ่งสามารถใช้คำสั่ง adb devices ได้เลย)
  4. แต่ถ้ายังมีคำว่า offline ตามท้าย ก็ยังใช้ไม่ได้ ลอง restart adb ใหม่ด้วยคำสั่ง "adb kill-server" (หรือใช้ task manager เพื่อ stop process ชื่อ adb.exe ก็ได้) ตามด้วย "adb devices" อีกครั้ง แล้วดูผล
  5. บางครั้งต้องติดตั้ง driver ของอุปกรณ์/มือถือ ชิ้นนั้นก่อน ซึ่งมักจะมีมาพร้อมกับอุปกรณ์เอง (อยู่ในโฟลเดอร์หรือต้องเปลี่ยนโหมดอุปกรณ์ให้เป็นการติดตั้งซอฟต์แวร์ก่อน) หรือสามารถหาดาวน์โหลดได้ทั่วไป เช่น ดูจากที่นี่ครับ
  6. หากยังไม่ได้ ลองตรวจสอบว่ามี program หรือ process ใด ที่ใช้ port 5555/5554 ทับกับ adb/AVD หรือไม่ ถ้ามีก็หยุด process นั้น แล้วลองข้อ 3 ใหม่
  7. หากยังไม่ได้ ลองลบ AVD นั้น แล้วสร้างขึ้นใหม่ (บางคนไม่ลบ แค่เลือก wipe data ตอน start ก็ใช้งานได้) แล้วลองข้อ 3 ใหม่
  8. หากยังไม่ได้อีก บางเว็บแนะนำให้อัพเดท Android SDK แล้วลองข้อ 3 ใหม่
  9. หากยังไม่ได้อีก ลองบังคับการเชื่อมต่อผ่านไอพี โดยใช้คำสั่ง "adb connect IP:port" ดู ซึ่งมักจะเป็นกรณีพิเศษ เช่นใช้ emulator ที่ไม่ได้มากับ SDK ตัวอย่างเช่น "adb connect localhost:5555"
  10. ถ้ายังไม่ได้ อาจจะต้องลองหาว่าเป็นเฉพาะ emulator ตัวนั้น หรืออุปกรณ์ตัวนั้นหรือเปล่าครับ ซึ่งอาจจะมีวิธีอื่นๆอีก ถ้าหาเจอเพิ่มเติมจะมาอัพเดทต่อไปนะครับ

No comments:

Post a Comment