Android Debug Bridge (adb
) เป็นเครื่องมือบรรทัดคำสั่งอเนกประสงค์ที่ช่วยให้คุณสื่อสารกับอุปกรณ์ได้ คําสั่ง adb
ช่วยให้ดำเนินการต่างๆ กับอุปกรณ์ได้ เช่น การติดตั้งและการแก้ไขข้อบกพร่องของแอป adb
ให้สิทธิ์เข้าถึงเชลล์ Unix ที่คุณสามารถใช้เพื่อเรียกใช้คำสั่งต่างๆ ในอุปกรณ์ ซึ่งเป็นโปรแกรมแบบไคลเอ็นต์-เซิร์ฟเวอร์ที่มีคอมโพเนนต์ 3 รายการ ได้แก่
- ไคลเอ็นต์ ซึ่งส่งคําสั่ง ไคลเอ็นต์จะทํางานบนเครื่องพัฒนาซอฟต์แวร์ คุณสามารถเรียกใช้ไคลเอ็นต์จากเทอร์มินัลบรรทัดคำสั่งได้โดยออกคำสั่ง
adb
- เดมอน (adbd) ซึ่งจะเรียกใช้คำสั่งในอุปกรณ์ ซึ่งจะทำงานเป็นกระบวนการเบื้องหลังในอุปกรณ์แต่ละเครื่อง
- เซิร์ฟเวอร์ ซึ่งจัดการการสื่อสารระหว่างไคลเอ็นต์กับเดมอน เซิร์ฟเวอร์จะทำงานเป็นกระบวนการเบื้องหลังในเครื่องสำหรับพัฒนาซอฟต์แวร์
adb
รวมอยู่ในแพ็กเกจเครื่องมือแพลตฟอร์ม Android SDK ดาวน์โหลดแพ็กเกจนี้ด้วย SDK Manager ซึ่งจะติดตั้งแพ็กเกจที่ android_sdk/platform-tools/
หากคุณต้องการแพ็กเกจเครื่องมือแพลตฟอร์ม Android SDK
แบบสแตนด์อโลน โปรดดาวน์โหลดที่นี่
ดูข้อมูลเกี่ยวกับการเชื่อมต่ออุปกรณ์เพื่อใช้งานผ่าน adb
รวมถึงวิธีใช้ผู้ช่วยการเชื่อมต่อเพื่อแก้ปัญหาที่พบบ่อยได้ที่เรียกใช้แอปในอุปกรณ์ฮาร์ดแวร์
วิธีการทำงานของ adb
เมื่อคุณเริ่มไคลเอ็นต์ adb
ไคลเอ็นต์จะตรวจสอบก่อนว่ามีกระบวนการเซิร์ฟเวอร์ adb
ทำงานอยู่หรือไม่ หากไม่มี ระบบจะเริ่มกระบวนการของเซิร์ฟเวอร์
เมื่อเซิร์ฟเวอร์เริ่มต้น ระบบจะเชื่อมโยงกับพอร์ต TCP 5037 ในเครื่องและรอรับคำสั่งที่ส่งมาจากไคลเอ็นต์ adb
หมายเหตุ: ไคลเอ็นต์ adb
ทั้งหมดใช้พอร์ต 5037 เพื่อสื่อสารกับเซิร์ฟเวอร์ adb
จากนั้นเซิร์ฟเวอร์จะตั้งค่าการเชื่อมต่อกับอุปกรณ์ทั้งหมดที่กำลังทำงานอยู่
โดยจะค้นหาโปรแกรมจำลองโดยการสแกนพอร์ตที่มีเลขคี่ในช่วง 5555 ถึง 5585 ซึ่งเป็นช่วงที่ใช้โดยโปรแกรมจำลอง 16 รายการแรก เมื่อเซิร์ฟเวอร์พบ Daemon adb
(adbd) ก็จะตั้งค่าการเชื่อมต่อกับพอร์ตนั้น
โปรแกรมจำลองแต่ละรายการใช้พอร์ตตามลำดับ 2 พอร์ต ได้แก่ พอร์ตที่มีเลขคู่สำหรับการเชื่อมต่อคอนโซล และพอร์ตที่มีเลขคี่สำหรับการเชื่อมต่อ adb
เช่น
โปรแกรมจำลอง 1, คอนโซล: 5554
โปรแกรมจำลอง 1, adb
: 5555
โปรแกรมจำลอง 2, คอนโซล: 5556
โปรแกรมจำลอง 2, adb
: 5557
และอื่นๆ
ดังที่แสดงไว้ โปรแกรมจำลองที่เชื่อมต่อกับ adb
บนพอร์ต 5555 จะเหมือนกับโปรแกรมจำลองที่คอนโซลรอฟังที่พอร์ต 5554
เมื่อเซิร์ฟเวอร์ตั้งค่าการเชื่อมต่อกับอุปกรณ์ทั้งหมดแล้ว คุณจะใช้คำสั่ง adb
เพื่อเข้าถึงอุปกรณ์เหล่านั้นได้ เนื่องจากเซิร์ฟเวอร์จัดการการเชื่อมต่อกับอุปกรณ์และจัดการคำสั่งจากไคลเอ็นต์ adb
หลายตัว คุณจึงควบคุมอุปกรณ์ใดก็ได้จากไคลเอ็นต์หรือสคริปต์ใดก็ได้
เปิดใช้การแก้ไขข้อบกพร่อง ADB ในอุปกรณ์
หากต้องการใช้ adb กับอุปกรณ์ที่เชื่อมต่อผ่าน USB คุณต้องเปิดใช้การแก้ไขข้อบกพร่อง USB ในการตั้งค่าระบบของอุปกรณ์ในส่วนตัวเลือกสำหรับนักพัฒนาแอป ใน Android 4.2 (API ระดับ 17) ขึ้นไป หน้าจอตัวเลือกสำหรับนักพัฒนาแอปจะซ่อนอยู่โดยค่าเริ่มต้น หากต้องการให้แสดง ให้เปิดใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์
ตอนนี้คุณเชื่อมต่ออุปกรณ์ด้วย USB ได้แล้ว คุณสามารถตรวจสอบว่าอุปกรณ์เชื่อมต่ออยู่หรือไม่โดยเรียกใช้ adb devices
จากไดเรกทอรี android_sdk/platform-tools/
หากเชื่อมต่ออยู่ คุณจะเห็นชื่ออุปกรณ์แสดงเป็น "อุปกรณ์"
หมายเหตุ: เมื่อเชื่อมต่ออุปกรณ์ที่ใช้ Android 4.2.2 (API ระดับ 17) ขึ้นไป ระบบจะแสดงกล่องโต้ตอบเพื่อถามว่าต้องการยอมรับคีย์ RSA ที่อนุญาตให้แก้ไขข้อบกพร่องผ่านคอมพิวเตอร์นี้หรือไม่ กลไกความปลอดภัยนี้ช่วยปกป้องอุปกรณ์ของผู้ใช้เนื่องจากจะป้องกันไม่ให้การแก้ไขข้อบกพร่องผ่าน USB และคำสั่ง adb อื่นๆ ทำงานได้ เว้นแต่คุณจะปลดล็อกอุปกรณ์และยอมรับกล่องโต้ตอบ
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเชื่อมต่อกับอุปกรณ์ผ่าน USB ได้ที่หัวข้อเรียกใช้แอปในอุปกรณ์ฮาร์ดแวร์
เชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi
หมายเหตุ: วิธีการด้านล่างไม่มีผลกับอุปกรณ์ Wear ที่ใช้ Android 11 (API ระดับ 30) ดูข้อมูลเพิ่มเติมในคู่มือการแก้ไขข้อบกพร่องของแอป Wear OS
Android 11 (API ระดับ 30) ขึ้นไปรองรับการติดตั้งใช้งานและการแก้ไขข้อบกพร่องของแอปแบบไร้สายจากเวิร์กสเตชันโดยใช้ Android Debug Bridge (adb) เช่น คุณสามารถทำให้แอปที่แก้ไขข้อบกพร่องได้ใช้งานได้ในอุปกรณ์ระยะไกลหลายเครื่องโดยไม่ต้องเชื่อมต่ออุปกรณ์ผ่าน USB ซึ่งจะช่วยขจัดปัญหาการเชื่อมต่อ USB ที่พบได้ทั่วไป เช่น การติดตั้งไดรเวอร์
ก่อนเริ่มใช้การแก้ไขข้อบกพร่องแบบไร้สาย ให้ทำดังนี้
-
ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์เชื่อมต่อเครือข่ายไร้สายเดียวกัน
-
ตรวจสอบว่าอุปกรณ์ของคุณใช้ Android 11 (API ระดับ 30) ขึ้นไปสำหรับโทรศัพท์หรือ Android 13 (API ระดับ 33) ขึ้นไปสำหรับ TV และ WearOS ดูข้อมูลเพิ่มเติมได้ที่ตรวจสอบและอัปเดตเวอร์ชัน Android
-
หากใช้ IDE โปรดตรวจสอบว่าคุณได้ติดตั้ง Android Studio เวอร์ชันล่าสุดแล้ว คุณสามารถดาวน์โหลดได้ที่นี่
-
อัปเดต SDK Platform Tools เป็นเวอร์ชันล่าสุดในเวิร์กสเตชัน
หากต้องการใช้การแก้ไขข้อบกพร่องแบบไร้สาย คุณต้องจับคู่อุปกรณ์กับเวิร์กสเตชันโดยใช้คิวอาร์โค้ดหรือรหัสการจับคู่ เวิร์กสเตชันและอุปกรณ์ต้องเชื่อมต่อกับเครือข่ายไร้สายเดียวกัน หากต้องการเชื่อมต่อกับอุปกรณ์ ให้ทำตามขั้นตอนต่อไปนี้
-
เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปในอุปกรณ์
-
เปิด Android Studio แล้วเลือกจับคู่อุปกรณ์โดยใช้ Wi-Fi จากเมนูการกำหนดค่าการเรียกใช้
หน้าต่างจับคู่อุปกรณ์ผ่าน Wi-Fi จะปรากฏขึ้นดังที่แสดงในรูปที่ 2
-
ในอุปกรณ์ ให้แตะการแก้ไขข้อบกพร่องแบบไร้สายและจับคู่อุปกรณ์โดยทำดังนี้
-
หากต้องการจับคู่อุปกรณ์ด้วยคิวอาร์โค้ด ให้เลือกจับคู่อุปกรณ์ด้วยคิวอาร์โค้ด แล้วสแกนคิวอาร์โค้ดที่ได้รับจากป๊อปอัปจับคู่อุปกรณ์ผ่าน Wi-Fi ที่แสดงในรูปที่ 2
-
หากต้องการจับคู่อุปกรณ์ด้วยรหัสการจับคู่ ให้เลือกจับคู่อุปกรณ์ด้วยรหัสการจับคู่จากป๊อปอัปจับคู่อุปกรณ์ผ่าน Wi-Fi ในอุปกรณ์ ให้เลือกจับคู่โดยใช้รหัสการจับคู่ แล้วจดรหัส 6 หลักที่ระบุไว้ เมื่ออุปกรณ์ปรากฏขึ้นในหน้าต่างจับคู่อุปกรณ์ผ่าน Wi-Fi ให้เลือกจับคู่ แล้วป้อนรหัส 6 หลักที่แสดงในอุปกรณ์
-
-
หลังจากจับคู่อุปกรณ์แล้ว คุณจะลองติดตั้งใช้งานแอปในอุปกรณ์ได้
หากต้องการจับคู่อุปกรณ์อื่นหรือเลิกจับคู่อุปกรณ์ปัจจุบันในเวิร์กสเตชัน ให้ไปที่การแก้ไขข้อบกพร่องแบบไร้สายในอุปกรณ์ แตะชื่อเวิร์กสเตชันในส่วนอุปกรณ์ที่จับคู่ แล้วเลือกไม่จำ
-
หากต้องการเปิดและปิดการแก้ไขข้อบกพร่องแบบไร้สายอย่างรวดเร็ว คุณสามารถใช้การ์ดการตั้งค่าด่วนสำหรับนักพัฒนาแอปสำหรับการแก้ไขข้อบกพร่องแบบไร้สาย ซึ่งอยู่ในตัวเลือกสำหรับนักพัฒนาแอป > การ์ดการตั้งค่าด่วนสำหรับนักพัฒนาแอป
การเชื่อมต่อ Wi-Fi โดยใช้บรรทัดคำสั่ง
หรือหากต้องการเชื่อมต่อกับอุปกรณ์โดยใช้บรรทัดคำสั่งโดยไม่ใช้ Android Studio ให้ทำตามขั้นตอนต่อไปนี้
-
เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปในอุปกรณ์ของคุณตามที่อธิบายไว้ก่อนหน้านี้
-
เปิดใช้การแก้ไขข้อบกพร่องแบบไร้สายในอุปกรณ์ ตามที่อธิบายไว้ก่อนหน้านี้
-
ในเวิร์กสเตชัน ให้เปิดหน้าต่างเทอร์มินัลและไปที่
android_sdk/platform-tools
-
ค้นหาที่อยู่ IP, หมายเลขพอร์ต และรหัสการจับคู่โดยเลือกจับคู่อุปกรณ์ด้วยรหัสการจับคู่ จดที่อยู่ IP, หมายเลขพอร์ต และรหัสการจับคู่ที่แสดงในอุปกรณ์
-
เรียกใช้
adb pair ipaddr:port
ในเทอร์มินัลของเวิร์กสเตชัน ใช้ที่อยู่ IP และหมายเลขพอร์ตจากด้านบน -
เมื่อได้รับข้อความแจ้ง ให้ป้อนรหัสการจับคู่ดังที่แสดงด้านล่าง
แก้ปัญหาการเชื่อมต่อแบบไร้สาย
หากพบปัญหาในการเชื่อมต่ออุปกรณ์แบบไร้สาย ให้ลองทำตามขั้นตอนการแก้ปัญหาต่อไปนี้เพื่อแก้ไขปัญหา
ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์ของคุณมีคุณสมบัติตรงตามข้อกําหนดเบื้องต้นหรือไม่
ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์เป็นไปตามข้อกำหนดเบื้องต้นที่ระบุไว้ในส่วนนี้
ตรวจสอบปัญหาอื่นๆ ที่ทราบ
ต่อไปนี้เป็นรายการปัญหาที่ทราบแล้วในปัจจุบันเกี่ยวกับการแก้ไขข้อบกพร่องแบบไร้สาย (ด้วย adb หรือ Android Studio) และวิธีแก้ปัญหา
-
Wi-Fi ไม่เชื่อมต่อ: เครือข่าย Wi-Fi ที่ปลอดภัย เช่น เครือข่าย Wi-Fi ขององค์กร อาจบล็อกการเชื่อมต่อแบบ p2p และไม่ให้คุณเชื่อมต่อผ่าน Wi-Fi ลองเชื่อมต่อด้วยสายหรือเครือข่าย Wi-Fi อื่น (ไม่ใช่ขององค์กร) การเชื่อมต่อแบบไร้สายโดยใช้
adb connect ip:port
ผ่าน tcp/ip (หลังจากการเชื่อมต่อ USB ครั้งแรก) เป็นตัวเลือกอีกทางในกรณีที่ต้องใช้เครือข่ายที่ไม่ใช่ขององค์กร -
adb
ผ่าน Wi-Fi บางครั้งจะปิดโดยอัตโนมัติ: กรณีนี้อาจเกิดขึ้นหากอุปกรณ์เปลี่ยนเครือข่าย Wi-Fi หรือตัดการเชื่อมต่อจากเครือข่าย วิธีแก้ปัญหาคือเชื่อมต่อกับเครือข่ายอีกครั้ง -
อุปกรณ์ไม่เชื่อมต่อหลังจากจับคู่สำเร็จ:
adb
ใช้ mDNS เพื่อค้นหาและเชื่อมต่อกับอุปกรณ์ที่จับคู่ไว้โดยอัตโนมัติ หากการกำหนดค่าเครือข่ายหรืออุปกรณ์ไม่รองรับ mDNS หรือปิดใช้ mDNS ไว้ คุณจะต้องเชื่อมต่อกับอุปกรณ์ด้วยตนเองโดยใช้adb connect ip:port
เชื่อมต่อแบบไร้สายกับอุปกรณ์หลังจากการเชื่อมต่อ USB ครั้งแรก (ตัวเลือกที่ใช้ได้เฉพาะใน Android 10 และต่ำกว่า)
หมายเหตุ: เวิร์กโฟลว์นี้ใช้ได้กับ Android 11 (และเวอร์ชันที่ใหม่กว่า) ด้วย แต่มีข้อควรระวังคือต้องใช้การเชื่อมต่อ *ครั้งแรก* ผ่าน USB
หมายเหตุ: วิธีการต่อไปนี้ใช้ไม่ได้กับอุปกรณ์ Wear ที่ใช้ Android 10 (API ระดับ 29) หรือต่ำกว่า ดูข้อมูลเพิ่มเติมได้ในคู่มือเกี่ยวกับการแก้ไขข้อบกพร่องของแอป Wear OS
โดยปกติแล้ว adb
จะสื่อสารกับอุปกรณ์ผ่าน USB แต่คุณใช้ adb
ผ่าน Wi-Fi ได้ด้วย หากต้องการเชื่อมต่ออุปกรณ์ที่ใช้ Android 10 (API ระดับ 29) หรือต่ำกว่า ให้ทำตามขั้นตอนเริ่มต้นต่อไปนี้ผ่าน USB
-
เชื่อมต่ออุปกรณ์ Android และคอมพิวเตอร์โฮสต์
adb
กับเครือข่าย Wi-Fi ทั่วไป - เชื่อมต่ออุปกรณ์กับคอมพิวเตอร์โฮสต์ด้วยสาย USB
-
ตั้งค่าอุปกรณ์เป้าหมายให้รอการเชื่อมต่อ TCP/IP ในพอร์ต 5555 โดยทำดังนี้
adb tcpip 5555
- ถอดสาย USB ออกจากอุปกรณ์เป้าหมาย
- ค้นหาที่อยู่ IP ของอุปกรณ์ Android ตัวอย่างเช่น ในอุปกรณ์ Nexus คุณจะดูที่อยู่ IP ได้ที่การตั้งค่า > เกี่ยวกับแท็บเล็ต (หรือเกี่ยวกับโทรศัพท์) > สถานะ > ที่อยู่ IP
-
เชื่อมต่อกับอุปกรณ์โดยใช้ที่อยู่ IP:
adb connect device_ip_address:5555
-
ตรวจสอบว่าคอมพิวเตอร์โฮสต์เชื่อมต่อกับอุปกรณ์เป้าหมายแล้ว โดยทำดังนี้
$ adb devices List of devices attached device_ip_address:5555 device
หมายเหตุ: โปรดทราบว่าจุดเข้าใช้งานบางจุดอาจไม่เหมาะ คุณอาจต้องใช้จุดเข้าใช้งานที่มีการกำหนดค่าไฟร์วอลล์อย่างถูกต้องเพื่อรองรับ adb
ตอนนี้อุปกรณ์เชื่อมต่อกับ adb
แล้ว
หากการเชื่อมต่อ adb
กับอุปกรณ์หายไป ให้ทำดังนี้
- ตรวจสอบว่าโฮสต์ยังเชื่อมต่อกับเครือข่าย Wi-Fi เดียวกันกับอุปกรณ์ Android อยู่
-
เชื่อมต่ออีกครั้งโดยทำตามขั้นตอน
adb connect
อีกครั้ง -
หากไม่ได้ผล ให้รีเซ็ตโฮสต์
adb
โดยทำดังนี้adb kill-server
จากนั้นให้เริ่มใหม่ตั้งแต่ต้น
ค้นหาอุปกรณ์
ก่อนออกคำสั่ง adb
คุณควรทราบว่าอินสแตนซ์ของอุปกรณ์ใดบ้างเชื่อมต่อกับเซิร์ฟเวอร์ adb
สร้างรายการอุปกรณ์ที่เชื่อมต่อโดยใช้คำสั่ง devices
ดังนี้
adb devices -l
adb
จะพิมพ์ข้อมูลสถานะนี้สำหรับอุปกรณ์แต่ละเครื่อง
- หมายเลขซีเรียล:
adb
สร้างสตริงเพื่อระบุอุปกรณ์โดยเฉพาะตามหมายเลขพอร์ต ตัวอย่างหมายเลขซีเรียล:emulator-5554
- สถานะ: สถานะการเชื่อมต่อของอุปกรณ์อาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้
offline
: อุปกรณ์ไม่ได้เชื่อมต่อกับadb
หรือไม่ตอบสนองdevice
: อุปกรณ์เชื่อมต่อกับเซิร์ฟเวอร์adb
โปรดทราบว่าสถานะนี้ไม่ได้หมายความว่าระบบ Android บูตและทำงานได้อย่างสมบูรณ์ เนื่องจากอุปกรณ์เชื่อมต่อกับadb
ในขณะที่ระบบยังบูตอยู่ หลังจากการบูต สถานะนี้เป็นสถานะการทํางานปกติของอุปกรณ์no device
: ไม่มีอุปกรณ์ที่เชื่อมต่ออยู่
- คำอธิบาย: หากคุณใส่ตัวเลือก
-l
คำสั่งdevices
จะบอกคุณว่าอุปกรณ์คืออะไร ข้อมูลนี้มีประโยชน์เมื่อคุณมีอุปกรณ์หลายเครื่องที่เชื่อมต่ออยู่เพื่อให้คุณแยกแยะอุปกรณ์ต่างๆ ได้
ตัวอย่างต่อไปนี้แสดงคำสั่ง devices
และเอาต์พุต มีอุปกรณ์ 3 เครื่องที่ใช้งานอยู่ 2 บรรทัดแรกในรายการคือโปรแกรมจำลอง และบรรทัดที่ 3 คืออุปกรณ์ฮาร์ดแวร์ที่เชื่อมต่ออยู่กับคอมพิวเตอร์
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
โปรแกรมจำลองไม่อยู่ในรายการ
คำสั่ง adb devices
มีลำดับคำสั่งสำหรับกรณีที่พบไม่บ่อยซึ่งทำให้โปรแกรมจำลองที่ทำงานอยู่ไม่แสดงในเอาต์พุต adb devices
แม้ว่าโปรแกรมจำลองจะปรากฏบนเดสก์ท็อปก็ตาม ซึ่งจะเกิดขึ้นเมื่อเงื่อนไขต่อไปนี้ทั้งหมดเป็นจริง
- เซิร์ฟเวอร์
adb
ไม่ทำงาน - คุณใช้คำสั่ง
emulator
กับตัวเลือก-port
หรือ-ports
ที่มีค่าพอร์ตเป็นเลขคี่ระหว่าง 5554 ถึง 5584 - พอร์ตหมายเลขคี่ที่คุณเลือกไม่ไม่ว่าง การเชื่อมต่อพอร์ตจึงทำได้ที่หมายเลขพอร์ตที่ระบุ หรือหากพอร์ตไม่ว่าง โปรแกรมจำลองจะเปลี่ยนไปใช้พอร์ตอื่นที่ตรงตามข้อกำหนดในข้อ 2
- คุณเริ่มต้นเซิร์ฟเวอร์
adb
หลังจากที่เริ่มโปรแกรมจำลอง
วิธีหนึ่งที่จะหลีกเลี่ยงสถานการณ์นี้ได้คือการให้โปรแกรมจำลองเลือกพอร์ตของตัวเองและเรียกใช้โปรแกรมจำลองไม่เกิน 16 รายการพร้อมกัน อีกวิธีหนึ่งคือให้เริ่มเซิร์ฟเวอร์ adb
ก่อนใช้คำสั่ง emulator
เสมอ ตามที่อธิบายไว้ในตัวอย่างต่อไปนี้
ตัวอย่างที่ 1: ในลำดับคำสั่งต่อไปนี้ คำสั่ง adb devices
จะเริ่มต้นเซิร์ฟเวอร์ adb
แต่รายการอุปกรณ์ไม่ปรากฏขึ้น
หยุดเซิร์ฟเวอร์ adb
แล้วป้อนคำสั่งต่อไปนี้ตามลำดับที่แสดง สำหรับชื่อ AVD ให้ระบุชื่อ AVD ที่ถูกต้องจากระบบ หากต้องการดูรายการชื่อ AVD ให้พิมพ์ emulator -list-avds
คำสั่ง emulator
อยู่ในไดเรกทอรี android_sdk/tools
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
ตัวอย่างที่ 2: ในลําดับคําสั่งต่อไปนี้ adb devices
จะแสดงรายการอุปกรณ์เนื่องจากมีการเริ่มเซิร์ฟเวอร์ adb
ก่อน
หากต้องการดูโปรแกรมจำลองในเอาต์พุต adb devices
ให้หยุดเซิร์ฟเวอร์ adb
แล้วเริ่มต้นอีกครั้งหลังจากใช้คำสั่ง emulator
และก่อนใช้คำสั่ง adb devices
ดังนี้
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกบรรทัดคำสั่งของโปรแกรมจำลองได้ที่ตัวเลือกการเริ่มต้นบรรทัดคำสั่ง
ส่งคำสั่งไปยังอุปกรณ์ที่ต้องการ
หากมีอุปกรณ์หลายเครื่องทำงานอยู่ คุณต้องระบุอุปกรณ์เป้าหมายเมื่อออกคำสั่ง adb
ทําตามขั้นตอนต่อไปนี้เพื่อระบุเป้าหมาย
- ใช้คำสั่ง
devices
เพื่อดูหมายเลขซีเรียลของเป้าหมาย - เมื่อทราบหมายเลขซีเรียลแล้ว ให้ใช้ตัวเลือก
-s
กับคำสั่งadb
เพื่อระบุหมายเลขซีเรียล- หากต้องการออกคำสั่ง
adb
จำนวนมาก คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม$ANDROID_SERIAL
ให้ใส่หมายเลขซีเรียลแทนได้ - หากคุณใช้ทั้ง
-s
และ$ANDROID_SERIAL
-s
จะลบล้าง$ANDROID_SERIAL
- หากต้องการออกคำสั่ง
ในตัวอย่างต่อไปนี้ ระบบจะรับรายการอุปกรณ์ที่แนบอยู่ จากนั้นจะใช้หมายเลขซีเรียลของอุปกรณ์เครื่องใดเครื่องหนึ่งเพื่อติดตั้ง helloWorld.apk
ในอุปกรณ์นั้น
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
หมายเหตุ: หากคุณออกคำสั่งโดยไม่ระบุอุปกรณ์เป้าหมายเมื่ออุปกรณ์หลายเครื่องพร้อมใช้งาน adb
จะแสดงข้อผิดพลาด "adb: more than one device/emulator"
หากคุณมีอุปกรณ์หลายเครื่อง แต่มีเพียงเครื่องเดียวที่เป็นโปรแกรมจำลอง ให้ใช้ตัวเลือก -e
เพื่อส่งคำสั่งไปยังโปรแกรมจำลอง หากมีอุปกรณ์หลายเครื่องแต่มีอุปกรณ์ฮาร์ดแวร์เพียงเครื่องเดียวเชื่อมต่ออยู่ ให้ใช้ตัวเลือก -d
เพื่อส่งคำสั่งไปยังอุปกรณ์ฮาร์ดแวร์
ติดตั้งแอป
คุณใช้ adb
เพื่อติดตั้ง APK ในโปรแกรมจำลองหรืออุปกรณ์ที่เชื่อมต่อได้ด้วยคำสั่ง install
ดังนี้
adb install path_to_apk
คุณต้องใช้ตัวเลือก -t
กับคำสั่ง install
เมื่อติดตั้ง APK ทดสอบ ดูข้อมูลเพิ่มเติมได้ใน -t
หากต้องการติดตั้ง APK หลายรายการ ให้ใช้ install-multiple
วิธีนี้มีประโยชน์หากคุณดาวน์โหลด APK ทั้งหมดสำหรับอุปกรณ์ที่เจาะจงจาก Play Console และต้องการติดตั้งในเครื่องจำลองหรืออุปกรณ์จริง
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างไฟล์ APK ที่ติดตั้งในอินสแตนซ์โปรแกรมจำลอง/อุปกรณ์ได้ได้ที่หัวข้อสร้างและเรียกใช้แอป
หมายเหตุ: หากใช้ Android Studio คุณไม่จำเป็นต้องใช้ adb
โดยตรงเพื่อติดตั้งแอปในโปรแกรมจำลองหรืออุปกรณ์ แต่ Android Studio จะจัดการการแพ็กเกจและการติดตั้งแอปให้คุณแทน
ตั้งค่าการส่งต่อพอร์ต
ใช้คำสั่ง forward
เพื่อตั้งค่าการส่งต่อพอร์ตแบบกำหนดเอง ซึ่งจะส่งต่อคำขอในพอร์ตโฮสต์ที่เจาะจงไปยังพอร์ตอื่นในอุปกรณ์
ตัวอย่างต่อไปนี้จะตั้งค่าการส่งต่อพอร์ตโฮสต์ 6100 ไปยังพอร์ตอุปกรณ์ 7100
adb forward tcp:6100 tcp:7100
ตัวอย่างต่อไปนี้จะตั้งค่าการส่งต่อพอร์ตโฮสต์ 6100 ไปยัง local:logd
adb forward tcp:6100 local:logd
ซึ่งอาจเป็นประโยชน์ในกรณีที่คุณพยายามกำจัดสิ่งที่ส่งไปยังพอร์ตที่กำหนดบนอุปกรณ์ ระบบจะเขียนข้อมูลที่รับทั้งหมดลงในเดอม่อนการบันทึกระบบและแสดงในบันทึกของอุปกรณ์
คัดลอกไฟล์ไปยังและจากอุปกรณ์
ใช้คำสั่ง pull
และ push
เพื่อคัดลอกไฟล์ไปยังและจากอุปกรณ์ ซึ่งแตกต่างจากคำสั่ง install
ที่คัดลอกเฉพาะไฟล์ APK ไปยังตำแหน่งที่เจาะจง คำสั่ง pull
และ push
ให้คุณคัดลอกไดเรกทอรีและไฟล์ไปยังตำแหน่งใดก็ได้ในอุปกรณ์
หากต้องการคัดลอกไฟล์หรือไดเรกทอรีและไดเรกทอรีย่อยจากอุปกรณ์ ให้ทำดังนี้
adb pull remote local
หากต้องการคัดลอกไฟล์หรือไดเรกทอรีและไดเรกทอรีย่อยไปยังอุปกรณ์ ให้ทำดังนี้
adb push local remote
แทนที่ local
และ remote
ด้วยเส้นทางไปยังไฟล์/ไดเรกทอรีเป้าหมายในเครื่องสำหรับพัฒนาซอฟต์แวร์ (ในเครื่อง) และในอุปกรณ์ (ระยะไกล) เช่น
adb push myfile.txt /sdcard/myfile.txt
หยุดเซิร์ฟเวอร์ ADB
ในบางกรณี คุณอาจต้องสิ้นสุดกระบวนการของเซิร์ฟเวอร์ adb
แล้วรีสตาร์ทเพื่อแก้ไขปัญหา เช่น กรณีนี้อาจเกิดขึ้นหาก adb
ไม่ตอบสนองต่อคําสั่ง
หากต้องการหยุดเซิร์ฟเวอร์ adb
ให้ใช้คำสั่ง adb kill-server
จากนั้นคุณจึงรีสตาร์ทเซิร์ฟเวอร์ได้โดยออกคำสั่ง adb
อื่นๆ
ออกคำสั่ง adb
ออกคำสั่ง adb
จากบรรทัดคำสั่งในเครื่องสำหรับพัฒนาซอฟต์แวร์หรือจากสคริปต์โดยใช้สิ่งต่อไปนี้
adb [-d | -e | -s serial_number] command
หากมีโปรแกรมจำลองที่ทำงานอยู่เพียง 1 รายการหรือเชื่อมต่ออุปกรณ์อยู่เพียง 1 เครื่อง ระบบจะส่งคำสั่ง adb
ไปยังอุปกรณ์นั้นโดยค่าเริ่มต้น หากมีการเรียกใช้โปรแกรมจําลองหลายรายการและ/หรือมีอุปกรณ์หลายเครื่องเชื่อมต่ออยู่ คุณต้องใช้ตัวเลือก -d
, -e
หรือ -s
เพื่อระบุอุปกรณ์เป้าหมายที่จะส่งคําสั่งไป
คุณดูรายการคําสั่ง adb
ที่รองรับทั้งหมดอย่างละเอียดได้โดยใช้คําสั่งต่อไปนี้
adb --help
ออกคำสั่ง Shell
คุณสามารถใช้คำสั่ง shell
เพื่อออกคำสั่งอุปกรณ์ผ่าน adb
หรือเพื่อเริ่มเชลล์แบบอินเทอร์แอกทีฟ หากต้องการออกคำสั่งเดียว ให้ใช้คำสั่ง shell
ดังนี้
adb [-d |-e | -s serial_number] shell shell_command
หากต้องการเริ่มเชลล์แบบอินเทอร์แอกทีฟในอุปกรณ์ ให้ใช้คำสั่ง shell
ดังนี้
adb [-d | -e | -s serial_number] shell
หากต้องการออกจาก Shell แบบอินเทอร์แอกทีฟ ให้กด Control+D
หรือพิมพ์ exit
Android มีเครื่องมือบรรทัดคำสั่ง Unix ทั่วไปส่วนใหญ่ หากต้องการดูรายการเครื่องมือที่ใช้ได้ ให้ใช้คำสั่งต่อไปนี้
adb shell ls /system/bin
คำสั่งส่วนใหญ่จะมีความช่วยเหลือผ่านอาร์กิวเมนต์ --help
คำสั่งเชลล์จำนวนมากมาจาก toybox
คุณรับความช่วยเหลือทั่วไปเกี่ยวกับคำสั่ง Toybox ทั้งหมดได้ที่ toybox --help
เมื่อใช้เครื่องมือแพลตฟอร์ม Android เวอร์ชัน 23 ขึ้นไป adb
จะจัดการอาร์กิวเมนต์ในลักษณะเดียวกับคำสั่ง ssh(1)
การเปลี่ยนแปลงนี้ช่วยแก้ไขปัญหาการแทรกคำสั่งได้มากมาย และทำให้สามารถเรียกใช้คำสั่งที่มีเชลล์อักขระเมตาได้อย่างปลอดภัย เช่น adb install Let\'sGo.apk
การเปลี่ยนแปลงนี้หมายความว่าการตีความคำสั่งที่มีอักขระเมตาของ Shell ก็จะเปลี่ยนไปด้วย
ตัวอย่างเช่น adb shell setprop key 'two words'
จะเป็นข้อผิดพลาดเนื่องจากเชลล์ในเครื่องจะตัดเครื่องหมายคำพูดออก และอุปกรณ์จะเห็นadb shell setprop key two words
หากต้องการให้คำสั่งทำงาน ให้ใส่เครื่องหมายคำพูด 2 ครั้ง โดยใส่เครื่องหมายคำพูด 1 ครั้งสำหรับเชลล์ในเครื่องและอีก 1 ครั้งสำหรับเชลล์ระยะไกล เช่นเดียวกับที่ใช้กับ ssh(1)
ตัวอย่างเช่น adb shell setprop key "'two words'"
ใช้งานได้เนื่องจากเชลล์ในเครื่องใช้การอ้างอิงระดับนอก และอุปกรณ์จะยังคงเห็นการอ้างอิงระดับใน setprop key 'two words'
การใช้เครื่องหมายหลีกเป็นอีกทางเลือกหนึ่ง แต่การยกข้อความมา 2 ครั้งมักจะง่ายกว่า
ดูเครื่องมือบรรทัดคำสั่ง Logcat ซึ่งมีประโยชน์ในการตรวจสอบบันทึกของระบบ
เครื่องมือจัดการกิจกรรมการโทร
ในเชลล์ adb
คุณสามารถออกคำสั่งด้วยเครื่องมือตัวจัดการกิจกรรม (am
) เพื่อดำเนินการต่างๆ ของระบบ เช่น เริ่มกิจกรรม บังคับหยุดกระบวนการ ออกอากาศ Intent แก้ไขพร็อพเพอร์ตี้หน้าจออุปกรณ์ และอื่นๆ
ไวยากรณ์ am
ในเชลล์มีดังนี้
am command
นอกจากนี้ คุณยังออกคำสั่งตัวจัดการกิจกรรมจาก adb
ได้โดยตรงโดยไม่ต้องเข้าสู่เชลล์ระยะไกล เช่น
adb shell am start -a android.intent.action.VIEW
คำสั่ง | คำอธิบาย |
---|---|
start [options] intent
|
เริ่มต้น Activity ที่ระบุโดย intent ดูข้อกำหนดสำหรับอาร์กิวเมนต์ Intent ตัวเลือกมีดังนี้
|
startservice [options] intent
|
เริ่ม Service ที่ระบุโดย
intent ดูข้อกําหนดสําหรับอาร์กิวเมนต์ Intent ตัวเลือกมีดังนี้
|
force-stop package
|
บังคับหยุดทุกอย่างที่เชื่อมโยงกับ package
|
kill [options] package
|
หยุดกระบวนการทั้งหมดที่เชื่อมโยงกับ package คำสั่งนี้จะยุติเฉพาะกระบวนการที่ปลอดภัยซึ่งจะไม่ส่งผลต่อประสบการณ์ของผู้ใช้
ตัวเลือกมีดังนี้
|
kill-all
|
ปิดกระบวนการเบื้องหลังทั้งหมด |
broadcast [options] intent
|
ส่ง Intent การประกาศ ดูข้อกําหนดสําหรับอาร์กิวเมนต์ Intent ตัวเลือกมีดังนี้
|
instrument [options] component
|
เริ่มตรวจสอบด้วยอินสแตนซ์ Instrumentation
โดยทั่วไป component เป้าหมายจะเป็นแบบฟอร์ม test_package/runner_class ตัวเลือกมีดังนี้
|
profile start process file
|
เริ่มเครื่องมือสร้างโปรไฟล์ใน process , เขียนผลลัพธ์ไปยัง file
|
profile stop process
|
หยุดเครื่องมือวิเคราะห์โปรไฟล์ใน process
|
dumpheap [options] process file
|
แสดงผลกองขยะของ process เขียนไปยัง file โดยมีตัวเลือกดังนี้
|
set-debug-app [options] package
|
ตั้งค่าแอป package ให้แก้ไขข้อบกพร่อง ตัวเลือกมีดังนี้
|
clear-debug-app
|
ล้างแพ็กเกจที่ตั้งไว้ก่อนหน้านี้สำหรับการแก้ไขข้อบกพร่องด้วย set-debug-app
|
monitor [options]
|
เริ่มตรวจสอบข้อขัดข้องหรือ ANR โดยมีตัวเลือกดังนี้
|
screen-compat {on | off} package
|
ควบคุมโหมดความเข้ากันได้ของหน้าจอของ package
|
display-size [reset | widthxheight]
|
ลบล้างขนาดการแสดงผลของอุปกรณ์
คำสั่งนี้มีประโยชน์สำหรับการทดสอบแอปในหน้าจอขนาดต่างๆ โดยจำลองความละเอียดหน้าจอขนาดเล็กโดยใช้อุปกรณ์ที่มีหน้าจอขนาดใหญ่ และในทางกลับกัน
ตัวอย่าง: |
display-density dpi
|
ลบล้างความหนาแน่นของการแสดงผลของอุปกรณ์
คำสั่งนี้มีประโยชน์สำหรับการทดสอบแอปในหน้าจอที่มีความหนาแน่นต่างกันโดยจำลองสภาพแวดล้อมหน้าจอที่มีความหนาแน่นสูงโดยใช้หน้าจอที่มีความหนาแน่นต่ำ และในทางกลับกัน
ตัวอย่าง: |
to-uri intent
|
พิมพ์ข้อกําหนดของ Intent ที่ระบุเป็น URI |
to-intent-uri intent
|
พิมพ์ข้อกําหนดของ Intent ที่ระบุเป็น URI intent: |
ข้อกำหนดสำหรับอาร์กิวเมนต์ Intent
สำหรับคำสั่งของเครื่องมือจัดการกิจกรรมที่ใช้อาร์กิวเมนต์ intent
คุณจะระบุ Intent ได้ด้วยตัวเลือกต่อไปนี้
โทรหาเครื่องมือจัดการแพ็กเกจ (pm
)
ในเชลล์ adb
คุณสามารถออกคำสั่งด้วยเครื่องมือจัดการแพ็กเกจ (pm
) เพื่อดำเนินการและค้นหาแพ็กเกจแอปที่ติดตั้งในอุปกรณ์
ขณะอยู่ในเชลล์ ไวยากรณ์ pm
จะเป็น:
pm command
นอกจากนี้ คุณยังออกคำสั่งเครื่องมือจัดการแพ็กเกจจาก adb
ได้โดยตรงโดยไม่ต้องเข้าสู่เชลล์ระยะไกล เช่น
adb shell pm uninstall com.example.MyApp
คำสั่ง | คำอธิบาย |
---|---|
list packages [options] filter
|
พิมพ์แพ็กเกจทั้งหมด หรือเฉพาะแพ็กเกจที่มีชื่อแพ็กเกจมีข้อความใน filter ตัวเลือก:
|
list permission-groups
|
พิมพ์กลุ่มสิทธิ์ทั้งหมดที่รู้จัก |
list permissions [options] group
|
พิมพ์สิทธิ์ทั้งหมดที่ทราบ โดยเลือกเฉพาะสิทธิ์ใน group ก็ได้ ตัวเลือก:
|
list instrumentation [options]
|
แสดงรายการแพ็กเกจทดสอบทั้งหมด ตัวเลือก:
|
list features
|
พิมพ์ฟีเจอร์ทั้งหมดของระบบ |
list libraries
|
พิมพ์ไลบรารีทั้งหมดที่อุปกรณ์ปัจจุบันรองรับ |
list users
|
พิมพ์ผู้ใช้ทั้งหมดในระบบ |
path package
|
พิมพ์เส้นทางไปยัง APK ของ package ที่ระบุ
|
install [options] path
|
ติดตั้งแพ็กเกจที่ระบุโดย path ลงในระบบ ตัวเลือก:
|
uninstall [options] package
|
นำแพ็กเกจออกจากระบบ ตัวเลือก:
|
clear package
|
ลบข้อมูลทั้งหมดที่เชื่อมโยงกับแพ็กเกจ |
enable package_or_component
|
เปิดใช้แพ็กเกจหรือคอมโพเนนต์ที่ระบุ (เขียนเป็น "package/class") |
disable package_or_component
|
ปิดใช้แพ็กเกจหรือคอมโพเนนต์ที่ระบุ (เขียนเป็น "package/class") |
disable-user [options] package_or_component
|
ตัวเลือก:
|
grant package_name permission
|
ให้สิทธิ์แก่แอป สำหรับอุปกรณ์ที่ใช้ Android 6.0 (API ระดับ 23) ขึ้นไป สิทธิ์จะเป็นสิทธิ์ใดก็ได้ที่ประกาศไว้ในไฟล์ Manifest ของแอป สำหรับอุปกรณ์ที่ใช้ Android 5.1 (API ระดับ 22) และต่ำกว่า ต้องเป็นสิทธิ์ที่ไม่บังคับที่แอปกำหนด |
revoke package_name permission
|
เพิกถอนสิทธิ์จากแอป ในอุปกรณ์ที่ใช้ Android 6.0 (API ระดับ 23) ขึ้นไป สิทธิ์ดังกล่าวอาจเป็นสิทธิ์ใดก็ได้ที่ประกาศไว้ในไฟล์ Manifest ของแอป สำหรับอุปกรณ์ที่ใช้ Android 5.1 (API ระดับ 22) และต่ำกว่า ต้องเป็นสิทธิ์ที่ไม่บังคับตามที่แอปกำหนด |
set-install-location location
|
เปลี่ยนตำแหน่งการติดตั้งเริ่มต้น ค่าสถานที่ตั้ง
หมายเหตุ: ตัวเลือกนี้มีไว้สำหรับการแก้ไขข้อบกพร่องเท่านั้น การใช้การอนุญาตนี้อาจทำให้แอปทำงานผิดพลาดและเกิดลักษณะการทำงานที่ไม่พึงประสงค์อื่นๆ |
get-install-location
|
แสดงผลตำแหน่งการติดตั้งปัจจุบัน แสดงผลค่า
|
set-permission-enforced permission [true | false]
|
ระบุว่าควรบังคับใช้สิทธิ์ที่ระบุหรือไม่ |
trim-caches desired_free_space
|
ตัดไฟล์แคชเพื่อให้ได้พื้นที่ว่างตามที่กำหนด |
create-user user_name
|
สร้างผู้ใช้ใหม่ด้วย user_name ที่ระบุ พิมพ์ตัวระบุผู้ใช้ใหม่ของผู้ใช้
|
remove-user user_id
|
นำผู้ใช้ที่มี user_id ที่กำหนดออก โดยลบข้อมูลทั้งหมดที่เชื่อมโยงกับผู้ใช้รายนั้น
|
get-max-users
|
พิมพ์จำนวนผู้ใช้สูงสุดที่อุปกรณ์รองรับ |
get-app-links [options] [package]
|
พิมพ์สถานะการยืนยันโดเมนสำหรับ package ที่ระบุ หรือสำหรับแพ็กเกจทั้งหมดหากไม่มีการระบุไว้ รหัสรัฐมีคำจำกัดความดังนี้
โดยมีตัวเลือกดังนี้
|
reset-app-links [options] [package]
|
รีเซ็ตสถานะการยืนยันโดเมนสำหรับแพ็กเกจที่ระบุ หรือสำหรับแพ็กเกจทั้งหมดหากไม่ได้ระบุ
โดยมีตัวเลือกดังนี้
|
verify-app-links [--re-verify] [package]
|
ออกอากาศคําขอยืนยันสําหรับ package ที่ระบุ หรือสําหรับแพ็กเกจทั้งหมดหากไม่ได้ระบุ ส่งเฉพาะในกรณีที่แพ็กเกจก่อนหน้านี้ไม่ได้บันทึกการตอบกลับ
|
set-app-links [--package package] state domains
|
ตั้งค่าสถานะของโดเมนสำหรับแพ็กเกจด้วยตนเอง แพ็กเกจต้องประกาศโดเมนเป็น autoVerify เพื่อให้การดําเนินการนี้ทํางานได้ คำสั่งนี้จะไม่รายงานความล้มเหลวสำหรับโดเมนที่ใช้ไม่ได้
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
ตั้งค่าสถานะการเลือกผู้ใช้โฮสต์สำหรับแพ็กเกจด้วยตนเอง โดยแพ็กเกจจะต้องประกาศโดเมนเพื่อให้ใช้งานได้ คำสั่งนี้จะไม่รายงานความล้มเหลวสำหรับโดเมนที่ใช้ไม่ได้
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
ตั้งค่าสถานะการเลือกผู้ใช้โฮสต์สำหรับแพ็กเกจด้วยตนเอง แพ็กเกจต้องประกาศโดเมนเพื่อให้การดําเนินการนี้ทํางานได้ คำสั่งนี้จะไม่รายงานความล้มเหลวสำหรับโดเมนที่ใช้ไม่ได้
|
set-app-links-allowed --user user_id [--package package] allowed
|
สลับการตั้งค่าการจัดการลิงก์ที่ยืนยันโดยอัตโนมัติสำหรับแพ็กเกจ
|
get-app-link-owners --user user_id [--package package] domains
|
พิมพ์เจ้าของโดเมนที่เจาะจงสำหรับผู้ใช้รายหนึ่งๆ ตามลําดับลําดับความสําคัญจากต่ำไปสูง
|
โทรหาผู้จัดการนโยบายอุปกรณ์ (dpm
)
ออกคำสั่งไปยังเครื่องมือจัดการนโยบายอุปกรณ์ (dpm
) เพื่อช่วยในการพัฒนาและทดสอบแอปการจัดการอุปกรณ์ ใช้เครื่องมือนี้เพื่อควบคุมแอปผู้ดูแลระบบที่ใช้งานอยู่หรือเปลี่ยนข้อมูลสถานะของนโยบายในอุปกรณ์
ขณะอยู่ในเชลล์ ไวยากรณ์ของ dpm
มีดังนี้
dpm command
นอกจากนี้ คุณยังออกคำสั่งเครื่องมือจัดการนโยบายอุปกรณ์จาก adb
ได้โดยตรงโดยไม่ต้องเข้าสู่เชลล์ระยะไกล โดยทำดังนี้
adb shell dpm command
คำสั่ง | คำอธิบาย |
---|---|
set-active-admin [options] component
|
ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่
ตัวเลือกมีดังนี้
|
set-profile-owner [options] component
|
ตั้ง component เป็นผู้ดูแลระบบที่ใช้งานอยู่และแพ็กเกจเป็นเจ้าของโปรไฟล์สำหรับผู้ใช้ที่มีอยู่
ตัวเลือกมีดังนี้
|
set-device-owner [options] component
|
ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่และแพ็กเกจของ component เป็นเจ้าของอุปกรณ์
ตัวเลือกมีดังนี้
|
remove-active-admin [options] component
|
ปิดใช้ผู้ดูแลระบบที่ใช้งานอยู่ แอปต้องประกาศ
android:testOnly
ในไฟล์ Manifest คำสั่งนี้จะนําเจ้าของอุปกรณ์และโปรไฟล์ออกด้วย
ตัวเลือกมีดังนี้
|
clear-freeze-period-record
|
ล้างระเบียนของอุปกรณ์เกี่ยวกับระยะเวลาหยุดทำงานที่กำหนดไว้ก่อนหน้านี้สำหรับการอัปเดตระบบผ่านอากาศ (OTA) ซึ่งมีประโยชน์ในการหลีกเลี่ยงข้อจำกัดการกําหนดเวลาของอุปกรณ์เมื่อพัฒนาแอปที่จัดการระยะเวลาหยุดทำงาน โปรดดูหัวข้อจัดการการอัปเดตระบบ
รองรับในอุปกรณ์ที่ใช้ Android 9.0 (API ระดับ 28) ขึ้นไป |
force-network-logs
|
บังคับให้ระบบเตรียมบันทึกเครือข่ายที่มีอยู่ให้พร้อมสำหรับการเรียกข้อมูลโดย DPC หากมีบันทึกการเชื่อมต่อหรือ DNS DPC จะได้รับonNetworkLogsAvailable() การเรียกกลับ ดูการบันทึกกิจกรรมของเครือข่าย
คำสั่งนี้ถูกจำกัดอัตรา ใช้ได้ในอุปกรณ์ที่ใช้ Android 9.0 (API ระดับ 28) ขึ้นไป |
force-security-logs
|
บังคับให้ระบบทำให้บันทึกความปลอดภัยที่มีอยู่พร้อมใช้งานสำหรับ DPC หากมีบันทึกพร้อมใช้งาน DPC จะได้รับการติดต่อกลับ
onSecurityLogsAvailable() โปรดดูหัวข้อบันทึกกิจกรรมในอุปกรณ์ขององค์กร
คำสั่งนี้ถูกจำกัดอัตรา ใช้ได้ในอุปกรณ์ที่ใช้ Android 9.0 (API ระดับ 28) ขึ้นไป |
ถ่ายภาพหน้าจอ
คำสั่ง screencap
เป็นยูทิลิตีเชลล์สำหรับการถ่ายภาพหน้าจอของจอแสดงผลของอุปกรณ์
ไวยากรณ์ screencap
ขณะอยู่ในเชลล์มีดังนี้
screencap filename
หากต้องการใช้ screencap
จากบรรทัดคำสั่ง ให้ป้อนข้อมูลต่อไปนี้
adb shell screencap /sdcard/screen.png
ต่อไปนี้คือตัวอย่างเซสชันภาพหน้าจอที่ใช้เชลล์ adb
เพื่อจับภาพหน้าจอและคำสั่ง pull
เพื่อดาวน์โหลดไฟล์จากอุปกรณ์
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
บันทึกวิดีโอ
คำสั่ง screenrecord
เป็นยูทิลิตีเชลล์สำหรับการบันทึกการแสดงผลของอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 19) ขึ้นไป ยูทิลิตีจะบันทึกกิจกรรมบนหน้าจอลงในไฟล์ MPEG-4 คุณสามารถใช้ไฟล์นี้เพื่อสร้างวิดีโอโปรโมตหรือฝึกอบรม หรือเพื่อแก้ไขข้อบกพร่องและทดสอบได้
ในเชลล์ ให้ใช้ไวยากรณ์ต่อไปนี้
screenrecord [options] filename
หากต้องการใช้ screenrecord
จากบรรทัดคำสั่ง ให้ป้อนข้อมูลต่อไปนี้
adb shell screenrecord /sdcard/demo.mp4
หยุดการอัดหน้าจอโดยกดแป้น Control+C มิเช่นนั้น การบันทึกจะหยุดโดยอัตโนมัติเมื่อครบ 3 นาทีหรือเมื่อถึงขีดจำกัดเวลาที่กำหนดโดย --time-limit
หากต้องการเริ่มบันทึกหน้าจออุปกรณ์ ให้เรียกใช้คำสั่ง screenrecord
เพื่อบันทึกวิดีโอ จากนั้นเรียกใช้คำสั่ง pull
เพื่อดาวน์โหลดวิดีโอจากอุปกรณ์ไปยังคอมพิวเตอร์ของโฮสต์ ตัวอย่างเซสชันการบันทึกมีดังนี้
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
ยูทิลิตี screenrecord
สามารถบันทึกด้วยความละเอียดและอัตราบิตที่รองรับได้ทุกรูปแบบที่คุณขอ ขณะเดียวกันก็รักษาสัดส่วนการแสดงผลของจอแสดงผลของอุปกรณ์ไว้ ยูทิลิตีจะบันทึกที่ความละเอียดและการวางแนวจอแสดงผลดั้งเดิมโดยค่าเริ่มต้น โดยมีความยาวสูงสุด 3 นาที
ข้อจำกัดของยูทิลิตี screenrecord
:
- ระบบจะไม่บันทึกเสียงกับไฟล์วิดีโอ
- อุปกรณ์ที่ใช้ Wear OS ไม่สามารถบันทึกวิดีโอได้
- อุปกรณ์บางรุ่นอาจบันทึกด้วยความละเอียดของจอแสดงผลเดิมไม่ได้ หากพบปัญหาเกี่ยวกับการบันทึกหน้าจอ ให้ลองใช้ความละเอียดหน้าจอที่ต่ำลง
- ไม่รองรับการหมุนหน้าจอระหว่างการบันทึก หากหน้าจอหมุนระหว่างการบันทึก วิดีโอที่บันทึกไว้อาจตัดหน้าจอบางส่วนออก
ตัวเลือก | คำอธิบาย |
---|---|
--help
|
แสดงไวยากรณ์และตัวเลือกคำสั่ง |
--size widthxheight
|
ตั้งค่าขนาดวิดีโอ: 1280x720 ค่าเริ่มต้นคือความละเอียดของจอแสดงผลเริ่มต้นของอุปกรณ์ (หากรองรับ) หรือ 1280x720 หากไม่รองรับ โปรดใช้ขนาดที่โปรแกรมเปลี่ยนไฟล์ Advanced Video Coding (AVC) ของอุปกรณ์รองรับเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด |
--bit-rate rate |
ตั้งค่าอัตราบิตของวิดีโอเป็นเมกะบิตต่อวินาที ค่าเริ่มต้นคือ 20 Mbps
คุณสามารถเพิ่มอัตราบิตเพื่อปรับปรุงคุณภาพวิดีโอได้ แต่ไฟล์ภาพยนตร์ก็จะมีขนาดเพิ่มขึ้นด้วย ตัวอย่างต่อไปนี้จะตั้งค่าอัตราบิตในการบันทึกเป็น 6Mbps
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
ตั้งค่าเวลาในการบันทึกสูงสุดเป็นวินาที ค่าเริ่มต้นและค่าสูงสุดคือ 180 (3 นาที) |
--rotate |
หมุนเอาต์พุต 90 องศา ฟีเจอร์นี้อยู่ในขั้นทดลอง |
--verbose |
แสดงข้อมูลบันทึกในหน้าจอบรรทัดคำสั่ง หากคุณไม่ได้ตั้งค่าตัวเลือกนี้ ยูทิลิตีจะไม่แสดงข้อมูลใดๆ ขณะทำงาน |
อ่านโปรไฟล์ ART สำหรับแอป
ตั้งแต่ Android 7.0 (API ระดับ 24) เป็นต้นไป รันไทม์ Android (ART) จะรวบรวมโปรไฟล์การเรียกใช้สําหรับแอปที่ติดตั้งไว้ ซึ่งจะใช้เพื่อเพิ่มประสิทธิภาพแอป ตรวจสอบโปรไฟล์ที่รวบรวมเพื่อทําความเข้าใจว่าเมธอดใดที่เรียกใช้บ่อยและคลาสใดที่ใช้ระหว่างการเริ่มต้นแอป
หมายเหตุ: คุณจะเรียกข้อมูลชื่อไฟล์โปรไฟล์การเรียกใช้ได้ก็ต่อเมื่อมีสิทธิ์เข้าถึงรูทในระบบไฟล์ เช่น ในโปรแกรมจำลอง
หากต้องการสร้างข้อมูลโปรไฟล์ในรูปแบบข้อความ ให้ใช้คําสั่งต่อไปนี้
adb shell cmd package dump-profiles package
หากต้องการเรียกดูไฟล์ที่สร้างขึ้น ให้ใช้คำสั่งต่อไปนี้
adb pull /data/misc/profman/package.prof.txt
รีเซ็ตอุปกรณ์ทดสอบ
หากคุณทดสอบแอปในอุปกรณ์ทดสอบหลายเครื่อง คุณอาจต้องรีเซ็ตอุปกรณ์ระหว่างการทดสอบ เช่น เพื่อนำข้อมูลผู้ใช้ออกและรีเซ็ตสภาพแวดล้อมการทดสอบ คุณสามารถรีเซ็ตอุปกรณ์ทดสอบที่ใช้ Android 10 (API ระดับ 29) ขึ้นไปเป็นค่าเริ่มต้นได้โดยใช้คำสั่ง Shell testharness
adb
ดังที่แสดง
adb shell cmd testharness enable
เมื่อคืนค่าอุปกรณ์โดยใช้ testharness
อุปกรณ์จะสำรองข้อมูลคีย์ RSA โดยอัตโนมัติ ซึ่งช่วยให้แก้ไขข้อบกพร่องผ่านเวิร์กสเตชันปัจจุบันในตำแหน่งถาวรได้ กล่าวคือ หลังจากรีเซ็ตอุปกรณ์แล้ว เวิร์กสเตชันจะยังคงแก้ไขข้อบกพร่องและออกคำสั่ง adb
ไปยังอุปกรณ์ได้โดยไม่ต้องลงทะเบียนคีย์ใหม่ด้วยตนเอง
นอกจากนี้ การใช้ testharness
เพื่อกู้คืนอุปกรณ์จะเปลี่ยนการตั้งค่าอุปกรณ์ต่อไปนี้ด้วย ซึ่งจะช่วยให้การทดสอบแอปต่อไปง่ายและปลอดภัยยิ่งขึ้น
- อุปกรณ์จะตั้งค่าระบบบางอย่างเพื่อไม่ให้วิซาร์ดการตั้งค่าอุปกรณ์เริ่มต้นปรากฏขึ้น กล่าวคือ อุปกรณ์จะเข้าสู่สถานะที่คุณสามารถติดตั้ง แก้ไขข้อบกพร่อง และทดสอบแอปได้อย่างรวดเร็ว
- การตั้งค่า
- ปิดใช้หน้าจอล็อก
- ปิดใช้การแจ้งเตือนเหตุฉุกเฉิน
- ปิดใช้การซิงค์อัตโนมัติสำหรับบัญชี
- ปิดใช้การอัปเดตระบบอัตโนมัติ
- อื่นๆ
- ปิดใช้แอปความปลอดภัยที่ติดตั้งไว้ล่วงหน้า
หากแอปต้องตรวจหาและปรับให้เข้ากับการตั้งค่าเริ่มต้นของคำสั่ง testharness
ใช้
ActivityManager.isRunningInUserTestHarness()
sqlite
sqlite3
เริ่มโปรแกรมบรรทัดคำสั่ง sqlite
สำหรับตรวจสอบฐานข้อมูล SQLite
ซึ่งรวมถึงคําสั่งต่างๆ เช่น .dump
เพื่อพิมพ์เนื้อหาของตาราง และ .schema
เพื่อพิมพ์คำสั่ง SQL CREATE
สำหรับตารางที่มีอยู่
นอกจากนี้ คุณยังเรียกใช้คำสั่ง SQLite จากบรรทัดคำสั่งได้ด้วย ดังที่แสดงด้านล่าง
$ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions
หมายเหตุ: คุณจะเข้าถึงฐานข้อมูล SQLite ได้ก็ต่อเมื่อมีสิทธิ์เข้าถึงระบบไฟล์ในรูทเท่านั้น เช่น ในโปรแกรมจำลอง
โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบของบรรทัดคำสั่ง sqlite3
แบ็กเอนด์ USB ของ adb
เซิร์ฟเวอร์ adb สามารถโต้ตอบกับสแต็ก USB ผ่านแบ็กเอนด์ 2 รายการ ซึ่งอาจใช้แบ็กเอนด์ดั้งเดิมของระบบปฏิบัติการ (Windows, Linux หรือ macOS) หรือจะใช้แบ็กเอนด์ libusb
ก็ได้
ฟีเจอร์บางอย่าง เช่น attach
, detach
และการตรวจจับความเร็ว USB จะพร้อมใช้งานเมื่อใช้แบ็กเอนด์ libusb
เท่านั้น
คุณเลือกแบ็กเอนด์ได้โดยใช้ตัวแปรสภาพแวดล้อม ADB_LIBUSB
หากไม่ได้ตั้งค่าไว้ adb จะใช้แบ็กเอนด์เริ่มต้น ลักษณะการทำงานเริ่มต้นจะแตกต่างกันไปในแต่ละระบบปฏิบัติการ ADB v34 จะใช้แบ็กเอนด์ liubusb
โดยค่าเริ่มต้นในระบบปฏิบัติการทั้งหมดยกเว้น Windows ซึ่งจะใช้แบ็กเอนด์แบบเนทีฟโดยค่าเริ่มต้น หากตั้งค่า ADB_LIBUSB
ไว้ ระบบจะกำหนดว่าจะใช้แบ็กเอนด์เนทีฟหรือ libusb
ดูหน้าที่กำหนดเอง adb เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรสภาพแวดล้อม adb
แบ็กเอนด์ mDNS ของ adb
ADB สามารถใช้โปรโตคอล DNS แบบมัลติแคสต์เพื่อเชื่อมต่อเซิร์ฟเวอร์และอุปกรณ์โดยอัตโนมัติ เซิร์ฟเวอร์ ADB มาพร้อมกับแบ็กเอนด์ 2 ตัว ได้แก่ Bonjour (mdnsResponder ของ Apple) และ Openscreen
แบ็กเอนด์ Bonjour ต้องมีเดรัมที่กำลังทำงานอยู่บนเครื่องโฮสต์
ใน macOS เดรัมมาในตัวของ Apple จะทำงานอยู่เสมอ แต่ใน Windows และ Linux ผู้ใช้ต้องตรวจสอบว่าเดรัมมา mdnsd
ทำงานอยู่
หากคำสั่ง adb mdns check
แสดงผลข้อผิดพลาด เป็นไปได้ว่า ADB กำลังใช้แบ็กเอนด์ Bonjour แต่ไม่มี Bonjour Daemon ที่กำลังทำงาน
แบ็กเอนด์ของ Openscreen ไม่จำเป็นต้องมี Daemon ที่ทำงานอยู่บนเครื่อง การรองรับแบ็กเอนด์ Openscreen ใน macOS จะเริ่มตั้งแต่ ADB v35 รองรับ Windows และ Linux ตั้งแต่ ADB v34
โดยค่าเริ่มต้น ADB จะใช้แบ็กเอนด์ Bonjour คุณเปลี่ยนแปลงลักษณะการทำงานนี้ได้โดยใช้ตัวแปรสภาพแวดล้อม ADB_MDNS_OPENSCREEN
(ตั้งค่าเป็น 1
หรือ 0
) ดูรายละเอียดเพิ่มเติมได้ที่หน้า ADB ที่กำหนดเอง