Android :การเชื่อมต่อมือถือเพื่อ debug ผ่านเครื่องจริง บน Linux และ ปัญหา Debug Certificate expired

ในการพัฒนา Android App ใน Linux ที่จริงมีความสะดวกสบายหลายอย่างในการติดตั้งครับ แต่ก็อาจจะเจอปัญหาได้เช่นกัน
แต่ก็สามารถแก้ปัญหาได้ไม่ยากครับ จะขอยกสองปัญหาที่มือใหม่ (อย่างผม) เจอครับ คือ Debug Certificate expired และการเชื่อมต่อกับมือถือเพื่อใช้งานเ debug ผ่านเครื่องจริง บน Linux

ปัญหาแรก

ไม่สามารถ debug ได้
เนื่องจากระบบ Linux มี permission ที่ค่อนข้าง strict เมื่อเราเปิด eclipse และเชื่อมต่อมือถือ จะเห็นว่า เครื่องจะมี driver เชื่อมได้ทันที
แต่ปัญหาคือ เมือใช้ eclipse ตัว eclpise จะทำการ run adb service ให้ในโมด user เมื่อตรวจสอบ ด้วย adb

[sekz@Sekz-Laptop platform-tools]$ ./adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
???????????? no permissions

จะเห็นว่าไม่สามารถเชื่อมต่อได้ วิธีการคือ ให้ kill server ทิ้ง และ run ใหม่ โดยใช้ sudo เพื่ออยู่ใน โหมด root

[sekz@Sekz-Laptop platform-tools]$ ./adb kill-server
[sekz@Sekz-Laptop platform-tools]$ sudo ./adb start-server
[sudo] password for sekz:
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
[sekz@Sekz-Laptop platform-tools]$ ./adb devices
List of devices attached
FB01105202376 device

[sekz@Sekz-Laptop platform-tools]$

จะเห็นว่าสามารถเชื่อมต่อได้แล้วครับ

ปัญหาที่สอง

Error generating final archive: Debug Certificate expired on 25/12/2527, 13:19 น. ApiDemos Unknown Android Packaging Problem

เมื่อเราทำการสร้าง app และต้องการลอง run ดู sdk จะทำการสร้าง debug keystore มาให้ เพื่อ sign apk ให้เรา แต่ใน linux หรือ windows ถ้าเราใช้ locale ซึ่งเป็นตัวระบุประเทศและภาษาต่างไป ที่ไม่ใช้ อังกฤษ หรือ Gregorian calendar จะทำให้มันเข้าใจวันผิด วิธีแก้มีหลายวิธีครับ

ก่อนอื่น ปิด eclipse และลบ keystore ที่มีปัญหา ปกติจะอย่ใน home ของเรา

[sekz@Sekz-Laptop platform-tools]$ rm ~/.android/debug.keystore

วิธีแรก gen key ใหม่ โดยใช้ tool

[sekz@Sekz-Laptop ~/ ]$ keytool -genkey -keypass android -keystore debug.keystore -alias androiddebugkey -storepass android -validity 10000 -dname "CN=Android Debug,O=Android,C=US"

อีกวิธี ลบ keytool และเข้าใช้งาน eclise ใน locale อังกฤษ แบบชั่วคราว

[sekz@Sekz-Laptop ~/ ]$ LANG=en_US eclipse

พอตอนรัน ก็จะสร้าง key ใหม่ให้เองอัตโนมัติครับ