Android Debug Bridge (adb) เป็นเครื่องมือบรรทัดคำสั่งอเนกประสงค์ที่ช่วยให้คุณสื่อสารกับอุปกรณ์ได้ คำสั่ง adb ช่วยให้ดำเนินการต่างๆ ในอุปกรณ์ได้ เช่น การติดตั้งและ
การแก้ไขข้อบกพร่องของแอป adb ให้สิทธิ์เข้าถึงเชลล์ Unix ที่คุณใช้เรียกใช้คำสั่งต่างๆ
ในอุปกรณ์ได้ เป็นโปรแกรมไคลเอ็นต์-เซิร์ฟเวอร์ที่มีคอมโพเนนต์ 3 อย่าง ได้แก่
- ไคลเอ็นต์ซึ่งส่งคำสั่ง ไคลเอ็นต์จะทำงานในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์ของคุณ คุณ
เรียกใช้ไคลเอ็นต์จากเทอร์มินัลบรรทัดคำสั่งได้โดยออกคำสั่ง
adb - Daemon (adbd) ซึ่งเรียกใช้คำสั่งในอุปกรณ์ โดย Daemon จะทำงานเป็นกระบวนการเบื้องหลัง ในอุปกรณ์แต่ละเครื่อง
- เซิร์ฟเวอร์ที่จัดการการสื่อสารระหว่างไคลเอ็นต์กับ Daemon เซิร์ฟเวอร์ ทำงานเป็นกระบวนการเบื้องหลังในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์
adb รวมอยู่ในแพ็กเกจเครื่องมือแพลตฟอร์ม Android SDK ดาวน์โหลดแพ็กเกจนี้ด้วย เครื่องมือจัดการ SDK ซึ่งจะติดตั้งแพ็กเกจนี้ที่ android_sdk/platform-tools/ หากต้องการแพ็กเกจเครื่องมือแพลตฟอร์ม Android SDK แบบสแตนด์อโลน
โปรดดาวน์โหลดที่นี่
ดูข้อมูลเกี่ยวกับการเชื่อมต่ออุปกรณ์เพื่อใช้ผ่าน adb รวมถึงวิธีใช้ผู้ช่วยการเชื่อมต่อเพื่อแก้ปัญหาที่พบบ่อยได้ที่เรียกใช้แอปในอุปกรณ์ฮาร์ดแวร์
Android CLI
ดาวน์โหลด Android CLIลองใช้ Android CLI เพื่อสื่อสารกับอุปกรณ์
เช่น ใช้คำสั่ง
android run หรือ screen capture
เมื่อต้องการติดตั้งใช้งานและโต้ตอบกับแอปในอุปกรณ์จากบรรทัดคำสั่งandroid [install|run|screen capture|layout]วิธีการทำงานของ adb
เมื่อคุณเริ่มไคลเอ็นต์ adb ไคลเอ็นต์จะตรวจสอบก่อนว่ามีadbเซิร์ฟเวอร์ที่ทำงานอยู่แล้วหรือไม่ หากไม่มี ก็จะเริ่มกระบวนการของเซิร์ฟเวอร์
เมื่อเซิร์ฟเวอร์เริ่มต้นทำงาน เซิร์ฟเวอร์จะเชื่อมโยงกับพอร์ต TCP 5037 ในเครื่องและรอรับคำสั่งที่ส่งจากไคลเอ็นต์ adb
หมายเหตุ: ไคลเอ็นต์ adb ทั้งหมดใช้พอร์ต 5037 เพื่อสื่อสารกับเซิร์ฟเวอร์ adb
จากนั้นเซิร์ฟเวอร์จะตั้งค่าการเชื่อมต่อกับอุปกรณ์ทั้งหมดที่กำลังทำงาน
โดยจะค้นหาโปรแกรมจำลองด้วยการสแกนพอร์ตเลขคี่ในช่วง
5555 ถึง 5585 ซึ่งเป็นช่วงที่โปรแกรมจำลอง 16 ตัวแรกใช้ เมื่อเซิร์ฟเวอร์พบ adb
daemon (adbd) เซิร์ฟเวอร์จะตั้งค่าการเชื่อมต่อกับพอร์ตนั้น
โปรแกรมจำลองแต่ละตัวใช้พอร์ตคู่ที่ต่อเนื่องกัน โดยใช้พอร์ตหมายเลขคู่สำหรับการเชื่อมต่อคอนโซลและพอร์ตหมายเลขคี่สำหรับการเชื่อมต่อ 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 17 พร้อมกับ adb 37.0.0 ได้เปิดตัว adb Wi-Fi 2.0 ซึ่งช่วยแก้ปัญหาด้านการใช้งานหลายอย่างในเวอร์ชันก่อนหน้า โปรดทราบว่า อุปกรณ์จะเชื่อมต่อกับเวิร์กสเตชันโดยอัตโนมัติเมื่ออุปกรณ์เชื่อมต่อกับเครือข่ายที่เชื่อถือได้สำหรับการแก้ไขข้อบกพร่องแบบไร้สาย
ก่อนที่จะเริ่มใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi ให้ทำดังนี้
-
ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์เชื่อมต่อกับเครือข่ายไร้สายเดียวกัน
-
ตรวจสอบว่าอุปกรณ์ใช้ Android 11 (ระดับ API 30) ขึ้นไปสำหรับโทรศัพท์ หรือ Android 13 (ระดับ API 33) ขึ้นไปสำหรับทีวีและ WearOS ดูข้อมูลเพิ่มเติมได้ที่ ตรวจสอบและอัปเดต เวอร์ชัน Android
-
ในเวิร์กสเตชัน ให้อัปเดตเป็นเวอร์ชันล่าสุดของ เครื่องมือแพลตฟอร์ม SDK
หากต้องการใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi คุณต้องจับคู่อุปกรณ์กับเวิร์กสเตชันโดยใช้คิวอาร์โค้ดหรือ รหัสการจับคู่ เวิร์กสเตชันและอุปกรณ์ต้องเชื่อมต่อกับเครือข่ายไร้สายเดียวกัน หากต้องการ จับคู่กับอุปกรณ์ ให้ทำตามขั้นตอนต่อไปนี้
หมายเหตุ: คุณต้องจับคู่อุปกรณ์กับเวิร์กสเตชันเพียงครั้งเดียว เท่านั้น อุปกรณ์จะยังคงจับคู่กับเวิร์กสเตชันจนกว่าคุณจะสั่งให้ลืมอุปกรณ์อย่างชัดแจ้งหรือ เพิกถอนการให้สิทธิ์การแก้ไขข้อบกพร่องของ adb ในอุปกรณ์ อุปกรณ์และเวิร์กสเตชันจะเชื่อมต่อกันโดยอัตโนมัติเมื่ออยู่ในเครือข่ายเดียวกัน
-
เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป ในอุปกรณ์
-
แตะการแก้ไขข้อบกพร่องผ่าน Wi-Fiในอุปกรณ์
รูปที่ 1 ข้อความแจ้งการแก้ไขข้อบกพร่องแบบไร้สายในโทรศัพท์ Google Pixel -
อนุญาตให้แก้ไขข้อบกพร่องผ่าน Wi-Fi ในเครือข่าย โปรดทราบว่าการคลิกช่องทําเครื่องหมายอนุญาตในเครือข่ายนี้เสมอ จะทําให้เครือข่ายเป็นเครือข่ายการแก้ไขข้อบกพร่องผ่าน Wi-Fi ที่เชื่อถือได้ อุปกรณ์จะอนุญาตให้ ทำการแก้ไขข้อบกพร่องผ่าน Wi-Fi ในเครือข่ายนี้เสมอทันทีที่อุปกรณ์เชื่อมต่อกับเครือข่าย
รูปที่ 2 การตั้งค่าการแก้ไขข้อบกพร่องแบบไร้สายในโทรศัพท์ Google Pixelหมายเหตุ: ผู้ใช้ Android Studio สามารถจับคู่อุปกรณ์ด้วยคิวอาร์โค้ดได้โดยเลือกจับคู่อุปกรณ์กับคิวอาร์โค้ด แล้วสแกน คิวอาร์โค้ดที่ได้จากกล่องโต้ตอบจับคู่อุปกรณ์ผ่าน Wi-Fi ใน Android Studio
-
ในอุปกรณ์ ให้เลือกจับคู่โดยใช้รหัสการจับคู่และ จดที่อยู่ IP, หมายเลขพอร์ต และรหัสการจับคู่ที่แสดงในอุปกรณ์
-
เปิดหน้าต่างเทอร์มินัลในเวิร์กสเตชัน แล้วไปที่
android_sdk/platform-tools -
เรียกใช้
adb pair ipaddr:portในเทอร์มินัลของเวิร์กสเตชัน ใช้ที่อยู่ IP และหมายเลขพอร์ตจากด้านบน -
เมื่อได้รับข้อความแจ้ง ให้ป้อนรหัสการจับคู่ตามที่แสดงด้านล่าง
รูปที่ 3 มีข้อความระบุว่าจับคู่อุปกรณ์เรียบร้อยแล้ว -
หลังจากจับคู่อุปกรณ์แล้ว ให้ตรวจสอบว่าอุปกรณ์เชื่อมต่ออยู่ ตอนนี้คุณใช้อุปกรณ์แบบไร้สายได้แล้วเช่นเดียวกับการเชื่อมต่อ USB
หากต้องการเลิกจับคู่เวิร์กสเตชัน ให้ไปที่การแก้ไขข้อบกพร่องผ่าน Wi-Fiในอุปกรณ์ แตะชื่อเวิร์กสเตชันในส่วนอุปกรณ์ที่จับคู่ แล้วเลือกเลิกจำ หรือคลิกเพิกถอนการให้สิทธิ์การแก้ไขข้อบกพร่องของ adb ในหน้าการตั้งค่าของอุปกรณ์เพื่อยกเลิกการจับคู่เวิร์กสเตชันและเวิร์กสเตชันอื่นๆ ทั้งหมดที่จับคู่ไว้ก่อนหน้านี้
-
หากต้องการเปิดและปิดการแก้ไขข้อบกพร่องผ่าน Wi-Fi อย่างรวดเร็ว คุณสามารถใช้การ์ดนักพัฒนาแอปในการตั้งค่าด่วนสำหรับการแก้ไขข้อบกพร่องผ่าน Wi-Fiได้ ซึ่งอยู่ตัวเลือกสำหรับนักพัฒนาแอป > การ์ดนักพัฒนาแอปในการตั้งค่าด่วน
รูปที่ 4 การตั้งค่าการ์ดนักพัฒนาแอปในการตั้งค่าด่วน ช่วยให้คุณเปิดและปิดการแก้ไขข้อบกพร่องผ่าน Wi-Fi ได้อย่างรวดเร็ว
แก้ไขปัญหาการเชื่อมต่อแบบไร้สาย
หากพบปัญหาในการเชื่อมต่อกับอุปกรณ์แบบไร้สาย ให้ลองทำตามขั้นตอนการแก้ปัญหาต่อไปนี้เพื่อแก้ไขปัญหา
ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์เป็นไปตามข้อกำหนดเบื้องต้นหรือไม่
ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์เป็นไปตามข้อกำหนดเบื้องต้นที่ระบุไว้ที่ตอนต้นของส่วนนี้
ตรวจสอบว่าการตั้งค่า adb ในเวิร์กสเตชันถูกต้องหรือไม่
หากต้องการยืนยันว่าการตั้งค่า ADB ในเวิร์กสเตชันถูกต้อง ให้เปิดเทอร์มินัลในเวิร์กสเตชันแล้วป้อน adb server-status ตรวจสอบว่าเอาต์พุตแสดงข้อมูลต่อไปนี้
-
version: "37.0.0"ขึ้นไป: หากไม่ใช่ ให้ดาวน์โหลดเวอร์ชันล่าสุดของ เครื่องมือแพลตฟอร์ม SDK -
mdns_enabled: true: หากตั้งค่าเป็นfalseadb จะค้นหาอุปกรณ์ในเครือข่ายโดยอัตโนมัติไม่ได้ หากต้องการแก้ไขปัญหานี้ คุณต้องตั้งค่าตัวแปรสภาพแวดล้อมADB_MDNSเป็น1จากนั้น รีสตาร์ทเซิร์ฟเวอร์ adb โดยเรียกใช้adb kill-serverแล้วเรียกใช้adb start-server -
mdns_backend: LIBADBMDNS: หากไม่ใช่กรณีนี้ แสดงว่า adb กำลังใช้ไลบรารีที่ล้าสมัยเพื่อค้นหาอุปกรณ์ในเครือข่ายโดยอัตโนมัติ หากต้องการแก้ไขปัญหานี้ คุณต้องตั้งค่าตัวแปรสภาพแวดล้อมADB_MDNS_OPENSCREENเป็น0จากนั้น รีสตาร์ทเซิร์ฟเวอร์ adb โดยเรียกใช้adb kill-serverแล้วเรียกใช้adb start-server
ตรวจสอบว่าเครือข่ายรองรับ mDNS หรือไม่
adb ใช้ mDNS เพื่อค้นหาและเชื่อมต่อกับอุปกรณ์ที่จับคู่โดยอัตโนมัติ หากต้องการตรวจสอบว่าเครือข่ายรองรับ mDNS หรือไม่ ให้ทำดังนี้
-
เปิดใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi ในอุปกรณ์ตามที่อธิบายไว้ในส่วนเชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi
-
เปิดเทอร์มินัลในเวิร์กสเตชัน แล้วป้อน
adb mdns track-services --proto-text -
ตรวจสอบว่าเอาต์พุตไม่ว่างเปล่าและมีบริการ TLS พร้อมที่อยู่ IP และ หมายเลขพอร์ตของอุปกรณ์ หากเอาต์พุตว่างเปล่า แสดงว่าเครือข่ายไม่รองรับ mDNS ตัวอย่างเอาต์พุต
tls { service { instance: "adb-35121FDJH000R8-xyMD0H" service: "_adb-tls-connect._tcp" ipv4: "192.168.84.23" ipv6: "fe80:0:0:0:fc7a:299d:8d38:6c1c" port: 37895 product_model: "Pixel 8" build_version_sdk_full: "37.0" given_name: "sherifeid Pixel" serial: "35121FDJH000R8" mdns_service_version: "2.0" hostname: "Android_CXUKYJY1.local" } }
ตรวจสอบว่าอุปกรณ์รองรับ ADB Wi-Fi 2.0 หรือไม่
หมายเหตุ: ADB Wi-Fi 2.0 รองรับใน Android 17 ขึ้นไป
หากต้องการตรวจสอบว่าอุปกรณ์รองรับ ADB Wi-Fi 2.0 หรือไม่ ให้ทำดังนี้
-
เปิดใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi ในอุปกรณ์ตามที่อธิบายไว้ในส่วนเชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi
-
เปิดเทอร์มินัลในเวิร์กสเตชัน แล้วป้อน
adb mdns track-services --proto-text -
ตรวจสอบว่าเอาต์พุตมี
mdns_service_version: "2.0"ขึ้นไป หากไม่เป็นเช่นนั้น แสดงว่าอุปกรณ์ของคุณไม่ได้ใช้ Android 17 ขึ้นไปและไม่รองรับ ADB Wi-Fi 2.0 หากต้องการอัปเดตเป็น Android 17 ขึ้นไป ให้ตรวจสอบว่าอุปกรณ์มีการอัปเดตระบบที่รอดำเนินการหรือไม่ ตรวจสอบและอัปเดต เวอร์ชัน Android
รายงานปัญหาใหม่
หากยังคงพบปัญหาในการเชื่อมต่อกับอุปกรณ์แบบไร้สาย คุณสามารถรายงานปัญหาใหม่ได้ โปรดระบุข้อมูลต่อไปนี้ในรายงาน
- บันทึกจากอุปกรณ์: จำลองปัญหาและแนบบันทึกของอุปกรณ์
- บันทึกจาก adb ในเวิร์กสเตชัน
- ตั้งค่าตัวแปรสภาพแวดล้อม
ADB_TRACE=all - รีสตาร์ทเซิร์ฟเวอร์ adb โดยเรียกใช้
adb kill-serverแล้วเรียกใช้adb start-server - จำลองการเกิดปัญหา
- ค้นหาไฟล์บันทึก: เรียกใช้
adb server-statusและแนบไฟล์บันทึกที่อ้างอิงในเอาต์พุตlog_absolute_path
- ตั้งค่าตัวแปรสภาพแวดล้อม
เชื่อมต่อแบบไร้สายกับอุปกรณ์หลังจากเชื่อมต่อ 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
ซึ่งอาจมีประโยชน์หากคุณพยายามพิจารณาว่ามีการส่งอะไรไปยังพอร์ตที่กำหนดในอุปกรณ์ ระบบจะเขียนข้อมูลที่ได้รับทั้งหมดไปยัง Daemon การบันทึกของระบบและแสดง ในบันทึกของอุปกรณ์
คัดลอกไฟล์ไปยังและจากอุปกรณ์
ใช้คำสั่ง pull และ push เพื่อคัดลอกไฟล์ไปยังและจากอุปกรณ์
คำสั่ง pull และ push
ช่วยให้คุณคัดลอกไดเรกทอรีและไฟล์ใดก็ได้ไปยังตำแหน่งใดก็ได้ในอุปกรณ์ ซึ่งแตกต่างจากคำสั่ง install
ที่คัดลอกไฟล์ APK ไปยังตำแหน่งที่เฉพาะเจาะจงเท่านั้น
หากต้องการคัดลอกไฟล์หรือไดเรกทอรีและไดเรกทอรีย่อยจากอุปกรณ์ ให้ทำดังนี้
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
หากมีอีมูเลเตอร์ที่ทำงานอยู่เพียงตัวเดียวหรือมีอุปกรณ์ที่เชื่อมต่อเพียงเครื่องเดียว ระบบจะส่งคำสั่ง adb ไปยังอุปกรณ์นั้นโดยค่าเริ่มต้น
หากมีอีมูเลเตอร์หลายตัวที่กําลังทํางานอยู่และ/หรือมีอุปกรณ์หลายเครื่องที่เชื่อมต่ออยู่
คุณต้องใช้ตัวเลือก -d, -e หรือ -s
เพื่อระบุอุปกรณ์เป้าหมายที่ควรส่งคําสั่งไป
คุณดูรายการคำสั่ง adb ที่รองรับทั้งหมดได้โดยละเอียดโดยใช้คำสั่งต่อไปนี้
adb --help
ออกคำสั่ง Shell
คุณสามารถใช้คำสั่ง shell เพื่อออกคำสั่งอุปกรณ์ผ่าน adb หรือเพื่อเริ่ม
เชลล์แบบอินเทอร์แอกทีฟ หากต้องการออกคำสั่งเดียว ให้ใช้คำสั่ง shell ดังนี้
adb [-d |-e | -s serial_number] shell shell_command
หากต้องการเริ่ม Shell แบบอินเทอร์แอกทีฟในอุปกรณ์ ให้ใช้คำสั่ง shell ดังนี้
adb [-d | -e | -s serial_number] shell
หากต้องการออกจากเชลล์แบบอินเทอร์แอกทีฟ ให้กด Control+D หรือพิมพ์ exit
Android มีเครื่องมือบรรทัดคำสั่ง Unix ทั่วไปส่วนใหญ่ หากต้องการดูรายการเครื่องมือที่ใช้ได้ ให้ใช้คำสั่งต่อไปนี้
adb shell ls /system/bin
คุณรับความช่วยเหลือสำหรับคำสั่งส่วนใหญ่ได้ผ่านอาร์กิวเมนต์ --help
คำสั่งเชลล์หลายคำสั่งมาจาก toybox
ความช่วยเหลือทั่วไปที่ใช้ได้กับคำสั่ง Toybox ทั้งหมดจะพร้อมใช้งานผ่าน toybox --help
เมื่อใช้ Android Platform Tools 23 ขึ้นไป adb จะจัดการอาร์กิวเมนต์ในลักษณะเดียวกับที่คำสั่ง ssh(1) ทำ การเปลี่ยนแปลงนี้ได้แก้ไขปัญหาต่างๆ เกี่ยวกับ
การแทรกคำสั่ง
และทำให้สามารถเรียกใช้คำสั่งที่มีเชลล์
อักขระเมตาได้อย่างปลอดภัย
เช่น adb install Let\'sGo.apk การเปลี่ยนแปลงนี้หมายความว่าการตีความ
คำสั่งใดๆ ที่มีอักขระเมตาของเชลล์ก็เปลี่ยนไปด้วย
เช่น adb shell setprop key 'two words' ตอนนี้เป็นข้อผิดพลาด
เนื่องจากเชลล์ในเครื่องจะกลืนเครื่องหมายคำพูด และอุปกรณ์จะเห็น
adb shell setprop key two words หากต้องการให้คำสั่งทำงาน ให้ใส่เครื่องหมายคำพูด 2 ครั้ง
ครั้งหนึ่งสำหรับเชลล์ในเครื่องและอีกครั้งสำหรับเชลล์ระยะไกล เหมือนกับที่คุณทำกับ
ssh(1) ตัวอย่างเช่น adb shell setprop key "'two words'"
ใช้ได้เนื่องจากเชลล์ในเครื่องจะใช้เครื่องหมายคำพูดระดับนอกสุดและอุปกรณ์
ยังคงเห็นเครื่องหมายคำพูดระดับในสุด: setprop key 'two words' การหลีกเลี่ยง
ก็เป็นอีกทางเลือกหนึ่ง แต่การใส่เครื่องหมายคำพูด 2 ครั้งมักจะง่ายกว่า
ดูเครื่องมือบรรทัดคำสั่ง Logcat ด้วย ซึ่งมีประโยชน์ สำหรับการตรวจสอบบันทึกของระบบ
ผู้จัดการกิจกรรมการโทร
ภายในadbเชลล์ คุณสามารถออกคำสั่งด้วยเครื่องมือ Activity Manager (am) เพื่อ
ดำเนินการต่างๆ ในระบบ เช่น เริ่มกิจกรรม หยุดกระบวนการโดยบังคับ
ออกอากาศ Intent แก้ไขพร็อพเพอร์ตี้หน้าจออุปกรณ์ และอื่นๆ
ขณะอยู่ในเชลล์ ไวยากรณ์ของ am จะเป็นดังนี้
am command
นอกจากนี้ คุณยังออกคำสั่ง Activity Manager ได้โดยตรงจาก adb
โดยไม่ต้องเข้าเชลล์ระยะไกล เช่น
adb shell am start -a android.intent.action.VIEW
ตารางที่ 1 คำสั่งตัวจัดการกิจกรรมที่ใช้ได้
| คำสั่ง | คำอธิบาย |
|---|---|
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 ตัวเลือกมีดังนี้
|
dumpbitmaps [options] [-p process]
|
ส่งออกข้อมูลบิตแมปจาก process
(ระดับ API 36 ขึ้นไป)
ตัวเลือกมีดังนี้
process ระบบจะทิ้งบิตแมปจากกระบวนการทั้งหมด
|
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 ที่ระบุเป็น intent: URI |
memory-limiter subcommand [options]
|
ปรับหรือปิดใช้ขีดจำกัดหน่วยความจำ ที่กำหนดไว้ในอุปกรณ์ที่ใช้ Android 17 ขึ้นไป ไม่มีผลกับอุปกรณ์ที่ใช้ Android 16 และต่ำกว่า คำสั่งย่อยมีดังนี้
|
ข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent
สำหรับคำสั่ง Activity Manager ที่ใช้อาร์กิวเมนต์ intent คุณสามารถ
ระบุ Intent ด้วยตัวเลือกต่อไปนี้
เรียกใช้เครื่องมือจัดการแพ็กเกจ (pm)
ภายใน adb Shell คุณสามารถออกคำสั่งด้วยเครื่องมือจัดการแพ็กเกจ (pm) เพื่อ
ดำเนินการและค้นหาแพ็กเกจแอปที่ติดตั้งในอุปกรณ์ได้
ขณะอยู่ในเชลล์ ไวยากรณ์ของ pm จะเป็นดังนี้
pm command
นอกจากนี้ คุณยังออกคำสั่งเครื่องมือจัดการแพ็กเกจได้โดยตรงจาก adb
โดยไม่ต้องเข้า Shell ระยะไกล เช่น
adb shell pm uninstall com.example.MyApp
ตารางที่ 2 คำสั่งเครื่องมือจัดการแพ็กเกจที่ใช้ได้
| คำสั่ง | คำอธิบาย |
|---|---|
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-allowed --user user_id [--package package] allowed
|
สลับการตั้งค่าการจัดการลิงก์ที่ยืนยันโดยอัตโนมัติสำหรับแพ็กเกจ
|
get-app-link-owners --user user_id [--package package] domains
|
พิมพ์เจ้าของสำหรับโดเมนที่เฉพาะเจาะจงสำหรับผู้ใช้ที่กำหนดตามลำดับความสำคัญจากต่ำไปสูง
|
โทรหาผู้จัดการนโยบายอุปกรณ์ (dpm)
หากต้องการช่วยคุณพัฒนาและทดสอบแอปการจัดการอุปกรณ์ ให้ส่งคำสั่งไปยังเครื่องมือ Device Policy Manager (dpm) ใช้เครื่องมือเพื่อควบคุมแอปผู้ดูแลระบบที่ใช้งานอยู่
หรือเปลี่ยนข้อมูลสถานะของนโยบายในอุปกรณ์
ขณะอยู่ในเชลล์ dpmไวยากรณ์จะเป็นดังนี้
dpm command
นอกจากนี้ คุณยังออกคำสั่ง Device Policy Manager ได้โดยตรงจาก adb
โดยไม่ต้องเข้าเชลล์ระยะไกล
adb shell dpm command
ตารางที่ 3 คำสั่งตัวจัดการนโยบายด้านอุปกรณ์ที่ใช้ได้
| คำสั่ง | คำอธิบาย |
|---|---|
set-active-admin [options] component
|
ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่
ตัวเลือกมีดังนี้
|
set-profile-owner [options] component
|
ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่และตั้งค่าแพ็กเกจเป็นเจ้าของโปรไฟล์สำหรับผู้ใช้ที่มีอยู่
ตัวเลือกมีดังนี้
|
set-device-owner [options] 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
หรือหากไม่ระบุชื่อไฟล์ screencap จะเขียนรูปภาพไปยังเอาต์พุตมาตรฐาน เมื่อใช้ร่วมกับ-pตัวเลือกเพื่อระบุรูปแบบ PNG คุณจะสตรีมภาพหน้าจอของอุปกรณ์ไปยังไฟล์ในเครื่องได้โดยตรง
ต่อไปนี้เป็นตัวอย่างการจับภาพหน้าจอและบันทึกไว้ในเครื่องด้วยคำสั่งเดียว
# use 'exec-out' instead of 'shell' to get raw data $ adb exec-out screencap -p > 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
- อุปกรณ์บางเครื่องอาจบันทึกที่ความละเอียดการแสดงผลดั้งเดิมไม่ได้ หากพบปัญหาเกี่ยวกับการบันทึกหน้าจอ ให้ลองใช้ความละเอียดหน้าจอที่ต่ำลง
- ระบบไม่รองรับการหมุนหน้าจอระหว่างการบันทึก หากหน้าจอหมุนระหว่าง การบันทึก ระบบจะตัดบางส่วนของหน้าจอในการบันทึก
ตารางที่ 4 screenrecord ตัวเลือก
| ตัวเลือก | คำอธิบาย |
|---|---|
--help
|
แสดงไวยากรณ์และตัวเลือกของคำสั่ง |
--size widthxheight
|
ตั้งค่าขนาดวิดีโอ: 1280x720 ค่าเริ่มต้นคือความละเอียดในการแสดงผลดั้งเดิมของอุปกรณ์ (หากรองรับ) หรือ 1280x720 หากไม่รองรับ โปรดใช้ขนาดที่ตัวเข้ารหัส Advanced Video Coding (AVC) ของอุปกรณ์รองรับเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด |
--bit-rate rate |
ตั้งค่าอัตราบิตของวิดีโอในหน่วยเมกะบิตต่อวินาที ค่าเริ่มต้นคือ 20 Mbps
คุณเพิ่มอัตราบิตเพื่อปรับปรุงคุณภาพวิดีโอได้ แต่การทำเช่นนี้จะทำให้ไฟล์ภาพยนตร์มีขนาดใหญ่ขึ้น
ตัวอย่างต่อไปนี้จะตั้งค่าบิตเรตการบันทึกเป็น 6 Mbps
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
ตั้งค่าเวลาในการบันทึกสูงสุดเป็นวินาที ค่าเริ่มต้นและค่าสูงสุดคือ 180 (3 นาที) |
--rotate |
หมุนเอาต์พุต 90 องศา ฟีเจอร์นี้อยู่ในขั้นทดลอง |
--verbose |
แสดงข้อมูลบันทึกในหน้าจอบรรทัดคำสั่ง หากคุณไม่ตั้งค่าตัวเลือกนี้ ยูทิลิตีจะไม่แสดงข้อมูลใดๆ ขณะทำงาน |
อ่านโปรไฟล์ ART สำหรับแอป
ตั้งแต่ Android 7.0 (ระดับ API 24) เป็นต้นไป Android Runtime (ART) จะรวบรวมโปรไฟล์การดำเนินการสำหรับแอปที่ติดตั้ง ซึ่งใช้เพื่อเพิ่มประสิทธิภาพของแอป ตรวจสอบโปรไฟล์ที่รวบรวมเพื่อ ทำความเข้าใจว่ามีการเรียกใช้เมธอดใดบ่อยครั้ง และมีการใช้คลาสใดในระหว่างการเริ่มต้นแอป
หมายเหตุ: คุณจะดึงข้อมูลชื่อไฟล์ของโปรไฟล์การดำเนินการได้ก็ต่อเมื่อมีสิทธิ์เข้าถึงระดับรูทในระบบไฟล์เท่านั้น เช่น ในโปรแกรมจำลอง
หากต้องการสร้างข้อมูลโปรไฟล์ในรูปแบบข้อความ ให้ใช้คำสั่งต่อไปนี้
adb shell cmd package dump-profiles package
หากต้องการดึงไฟล์ที่สร้างขึ้น ให้ใช้คำสั่งต่อไปนี้
adb pull /data/misc/profman/package.prof.txt
รีเซ็ตอุปกรณ์ทดสอบ
หากคุณทดสอบแอปในอุปกรณ์ทดสอบหลายเครื่อง การรีเซ็ตอุปกรณ์ระหว่างการทดสอบอาจมีประโยชน์ เช่น เพื่อนำข้อมูลผู้ใช้ออกและรีเซ็ตสภาพแวดล้อมการทดสอบ คุณรีเซ็ตเป็นค่าเริ่มต้นของอุปกรณ์ทดสอบที่ใช้ Android 10 (API ระดับ 29) ขึ้นไปได้โดยใช้คำสั่งเชลล์ 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 เป็นต้นไป ระบบจะใช้แบ็กเอนด์ libusb โดยค่าเริ่มต้นในทุกระบบปฏิบัติการยกเว้น Windows ซึ่งจะใช้แบ็กเอนด์ดั้งเดิมโดยค่าเริ่มต้น หากตั้งค่า ADB_LIBUSB ระบบจะพิจารณาว่าจะใช้แบ็กเอนด์เนทีฟหรือ libusb ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรสภาพแวดล้อม adb ได้ที่หน้าคู่มือ adb
แบ็กเอนด์ mDNS ของ adb
ADB ใช้โปรโตคอล mDNS (DNS แบบหลายผู้รับ) เพื่อเชื่อมต่อเซิร์ฟเวอร์และอุปกรณ์โดยอัตโนมัติสำหรับการแก้ไขข้อบกพร่องแบบไร้สาย
ตั้งแต่ ADB v37 เป็นต้นไป เซิร์ฟเวอร์ ADB จะมาพร้อมกับแบ็กเอนด์ mDNS 2 รายการ ได้แก่ libadbmdns และ
openscreen
แบ็กเอนด์เริ่มต้นและที่แนะนำคือ libadbmdns คุณเปลี่ยนลักษณะการทำงานนี้ได้
โดยใช้ตัวแปรสภาพแวดล้อม ADB_MDNS_OPENSCREEN (ตั้งค่าเป็น 1 หรือ 0)
การรองรับแบ็กเอนด์ Openscreen ใน macOS จะเริ่มที่ ADB v35 รองรับ Windows และ Linux ตั้งแต่ ADB v34 เป็นต้นไป
โหมดถ่ายภาพต่อเนื่องของ ADB (เริ่มตั้งแต่ ADB 36.0.0)
โหมดถ่ายภาพต่อเนื่องเป็นฟีเจอร์ทดลองที่ช่วยให้ ADB ส่งแพ็กเก็ตไปยังอุปกรณ์ได้แม้ว่าอุปกรณ์จะยังไม่ได้ตอบกลับแพ็กเก็ตก่อนหน้าก็ตาม ซึ่งจะช่วยเพิ่มอัตราการส่งข้อมูลของ ADB เมื่อโอนไฟล์ขนาดใหญ่และลดเวลาในการตอบสนองขณะ แก้ไขข้อบกพร่องได้อย่างมาก
โหมดถ่ายภาพต่อเนื่องจะปิดอยู่โดยค่าเริ่มต้น หากต้องการเปิดใช้ฟีเจอร์นี้ ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้
- ตั้งค่าตัวแปรสภาพแวดล้อม
ADB_BURST_MODEเป็น1 - ใน Android Studio ให้ไปที่การตั้งค่าโปรแกรมแก้ไขข้อบกพร่องที่ไฟล์ (หรือ Android Studio ใน macOS) > การตั้งค่า > บิลด์, การดำเนินการ, การทำให้ใช้งานได้ > โปรแกรมแก้ไขข้อบกพร่อง และตั้งค่าโหมดต่อเนื่องของเซิร์ฟเวอร์ adb เป็นเปิดใช้