Android Debug Bridge (adb)

Android Debug Bridge (adb) เป็นเครื่องมือบรรทัดคำสั่งอเนกประสงค์ที่ช่วยให้คุณสื่อสารกับอุปกรณ์ได้ คำสั่ง adb ช่วยให้ดำเนินการต่างๆ ในอุปกรณ์ได้ เช่น การติดตั้งและ การแก้ไขข้อบกพร่องของแอป adb ให้สิทธิ์เข้าถึงเชลล์ Unix ที่คุณใช้เรียกใช้คำสั่งต่างๆ ในอุปกรณ์ได้ เป็นโปรแกรมไคลเอ็นต์-เซิร์ฟเวอร์ที่มีคอมโพเนนต์ 3 อย่าง ได้แก่

  • ไคลเอ็นต์ที่ส่งคำสั่ง โดยไคลเอ็นต์จะทำงานในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์ คุณเรียกใช้ไคลเอ็นต์จากเทอร์มินัลบรรทัดคำสั่งได้โดยออกคำสั่ง adb
  • Daemon (adbd) ซึ่งเรียกใช้คำสั่งในอุปกรณ์ โดย Daemon จะทำงานเป็นกระบวนการเบื้องหลัง ในอุปกรณ์แต่ละเครื่อง
  • เซิร์ฟเวอร์ที่จัดการการสื่อสารระหว่างไคลเอ็นต์กับ Daemon เซิร์ฟเวอร์ ทำงานเป็นกระบวนการเบื้องหลังในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์

adb รวมอยู่ในแพ็กเกจเครื่องมือแพลตฟอร์ม Android SDK ดาวน์โหลดแพ็กเกจนี้ด้วย เครื่องมือจัดการ SDK ซึ่งจะติดตั้งแพ็กเกจที่ android_sdk/platform-tools/ หากต้องการแพ็กเกจเครื่องมือแพลตฟอร์ม Android SDK แบบสแตนด์อโลน ให้ดาวน์โหลดที่นี่

ดูข้อมูลเกี่ยวกับการเชื่อมต่ออุปกรณ์เพื่อใช้ผ่าน adb รวมถึงวิธีใช้ผู้ช่วยการเชื่อมต่อ เพื่อแก้ปัญหาที่พบบ่อยได้ที่ เรียกใช้แอปในอุปกรณ์ฮาร์ดแวร์

วิธีการทำงานของ 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 ในอุปกรณ์ อุปกรณ์และเวิร์กสเตชันจะเชื่อมต่อกันโดยอัตโนมัติเมื่ออยู่ในเครือข่ายเดียวกัน

  1. เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป ในอุปกรณ์

  2. แตะการแก้ไขข้อบกพร่องผ่าน Wi-Fiในอุปกรณ์

    ภาพหน้าจอของโทรศัพท์ Pixel ที่แสดงข้อความแจ้งการแก้ไขข้อบกพร่องผ่าน Wi-Fi
    รูปที่ 1 ข้อความแจ้งการแก้ไขข้อบกพร่องแบบไร้สายในโทรศัพท์ Google Pixel
  3. อนุญาตให้แก้ไขข้อบกพร่องผ่าน Wi-Fi ในเครือข่าย โปรดทราบว่าการคลิกช่องทําเครื่องหมายอนุญาตเสมอในเครือข่ายนี้ จะทําให้เครือข่ายเป็นเครือข่ายการแก้ไขข้อบกพร่องผ่าน Wi-Fi ที่เชื่อถือได้ อุปกรณ์จะ อนุญาตให้แก้ไขข้อบกพร่องผ่าน Wi-Fi ในเครือข่ายนี้เสมอทันทีที่อุปกรณ์เชื่อมต่อกับเครือข่าย

  4. ภาพหน้าจอของ
            โทรศัพท์ Google Pixel ที่แสดงการตั้งค่าระบบการแก้ไขข้อบกพร่องแบบไร้สาย
    รูปที่ 2 การตั้งค่าการแก้ไขข้อบกพร่องแบบไร้สายในโทรศัพท์ Google Pixel

    หมายเหตุ: ผู้ใช้ Android Studio สามารถจับคู่อุปกรณ์ด้วยคิวอาร์โค้ดได้โดยเลือกจับคู่อุปกรณ์ด้วยคิวอาร์โค้ด แล้วสแกน คิวอาร์โค้ดที่ได้จากกล่องโต้ตอบจับคู่อุปกรณ์ผ่าน Wi-Fi ใน Android Studio

  5. ในอุปกรณ์ ให้เลือกจับคู่โดยใช้รหัสการจับคู่และ จดที่อยู่ IP, หมายเลขพอร์ต และรหัสการจับคู่ที่แสดงในอุปกรณ์

  6. ในเวิร์กสเตชัน ให้เปิดหน้าต่างเทอร์มินัลแล้วไปที่ android_sdk/platform-tools

  7. ในเทอร์มินัลของเวิร์กสเตชัน ให้เรียกใช้ adb pair ipaddr:port ใช้ที่อยู่ IP และหมายเลขพอร์ตจากด้านบน

  8. เมื่อได้รับข้อความแจ้ง ให้ป้อนรหัสการจับคู่ตามที่แสดงด้านล่าง

    ภาพหน้าจอของ
            การจับคู่ในบรรทัดคำสั่ง
    รูปที่ 3 มีข้อความระบุว่าจับคู่อุปกรณ์เรียบร้อยแล้ว
  9. หลังจากจับคู่อุปกรณ์แล้ว ให้ตรวจสอบว่าอุปกรณ์เชื่อมต่ออยู่ ตอนนี้คุณใช้อุปกรณ์แบบไร้สายได้แล้วเช่นเดียวกับการเชื่อมต่อ USB

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

  10. หากต้องการเปิดและปิดการแก้ไขข้อบกพร่องผ่าน Wi-Fi อย่างรวดเร็ว คุณสามารถใช้การ์ดการตั้งค่าด่วนสำหรับนักพัฒนาแอปสำหรับการแก้ไขข้อบกพร่องผ่าน Wi-Fiได้ โดยจะอยู่ในตัวเลือกสำหรับนักพัฒนาแอป > การ์ดการตั้งค่าด่วนสำหรับนักพัฒนาแอป

    ภาพหน้าจอของ
            องค์ประกอบการตั้งค่าด่วนสำหรับนักพัฒนาแอปจากโทรศัพท์ Google Pixel
    รูปที่ 4 การตั้งค่าองค์ประกอบการตั้งค่าด่วนสำหรับนักพัฒนาแอป ช่วยให้คุณเปิดและปิดการแก้ไขข้อบกพร่องผ่าน Wi-Fi ได้อย่างรวดเร็ว

แก้ไขปัญหาการเชื่อมต่อแบบไร้สาย

หากพบปัญหาในการเชื่อมต่อกับอุปกรณ์แบบไร้สาย ให้ลองทำตามขั้นตอนการแก้ปัญหาต่อไปนี้เพื่อแก้ไขปัญหา

ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์ของคุณมีคุณสมบัติตรงตามข้อกำหนดเบื้องต้นหรือไม่

ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์เป็นไปตามข้อกำหนดเบื้องต้นที่ระบุไว้ที่ตอนต้นของส่วนนี้

ตรวจสอบว่าการตั้งค่า adb ในเวิร์กสเตชันถูกต้องหรือไม่

หากต้องการยืนยันว่าการตั้งค่า ADB ในเวิร์กสเตชันถูกต้อง ให้เปิดเทอร์มินัลในเวิร์กสเตชันแล้วป้อน adb server-status ตรวจสอบว่าเอาต์พุตแสดงข้อมูลต่อไปนี้

  • version: "37.0.0" ขึ้นไป: หากไม่เป็นเช่นนั้น ให้ดาวน์โหลด เครื่องมือแพลตฟอร์ม SDK เวอร์ชันล่าสุด
  • mdns_enabled: true: หากตั้งค่าเป็น false adb จะค้นหาอุปกรณ์ในเครือข่ายโดยอัตโนมัติไม่ได้ หากต้องการแก้ไขปัญหานี้ คุณต้องตั้งค่าตัวแปรสภาพแวดล้อม 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 หรือไม่ ให้ทำดังนี้

  1. เปิดใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi ในอุปกรณ์ตามที่อธิบายไว้ในส่วนเชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi

  2. เปิดเทอร์มินัลในเวิร์กสเตชัน แล้วป้อน adb mdns track-services --proto-text

  3. ตรวจสอบว่าเอาต์พุตไม่ว่างเปล่าและมีบริการ 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 หรือไม่ ให้ทำดังนี้

  1. เปิดใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi ในอุปกรณ์ตามที่อธิบายไว้ในส่วนเชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi

  2. เปิดเทอร์มินัลในเวิร์กสเตชัน แล้วป้อน adb mdns track-services --proto-text

  3. ตรวจสอบว่าเอาต์พุตมี mdns_service_version: "2.0" ขึ้นไป หากไม่เป็นเช่นนั้น แสดงว่าอุปกรณ์ของคุณไม่ได้ใช้ Android 17 ขึ้นไปและไม่รองรับ ADB Wi-Fi 2.0 หากต้องการอัปเดตเป็น Android 17 ขึ้นไป ให้ตรวจสอบว่าอุปกรณ์มีการอัปเดตระบบที่รอดำเนินการอยู่หรือไม่ ตรวจสอบและอัปเดต เวอร์ชัน Android

รายงานปัญหาใหม่

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

  • บันทึกจากอุปกรณ์: จำลองปัญหาและแนบบันทึกของอุปกรณ์
  • บันทึกจาก adb ในเวิร์กสเตชัน
    1. ตั้งค่าตัวแปรสภาพแวดล้อม ADB_TRACE=all
    2. รีสตาร์ทเซิร์ฟเวอร์ adb โดยเรียกใช้ adb kill-server แล้วเรียกใช้ adb start-server
    3. จำลองการเกิดปัญหา
    4. ค้นหาไฟล์บันทึก: เรียกใช้ 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

  1. เชื่อมต่ออุปกรณ์ Android และadbคอมพิวเตอร์โฮสต์ กับเครือข่าย Wi-Fi เดียวกัน
  2. หมายเหตุ: โปรดทราบว่าจุดเข้าใช้งานบางจุดอาจไม่เหมาะสม คุณอาจต้องใช้จุดเข้าใช้งานที่มีการกำหนดค่าไฟร์วอลล์อย่างถูกต้องเพื่อรองรับ adb

  3. เชื่อมต่ออุปกรณ์กับคอมพิวเตอร์โฮสต์ด้วยสาย USB
  4. ตั้งค่าอุปกรณ์เป้าหมายให้รอรับการเชื่อมต่อ TCP/IP ในพอร์ต 5555 โดยทำดังนี้
    adb tcpip 5555
    
  5. ถอดสาย USB ออกจากอุปกรณ์เป้าหมาย
  6. ค้นหาที่อยู่ IP ของอุปกรณ์ Android เช่น ในอุปกรณ์ Nexus คุณจะดูที่อยู่ IP ได้ที่การตั้งค่า > เกี่ยวกับแท็บเล็ต (หรือเกี่ยวกับโทรศัพท์) > สถานะ > ที่อยู่ IP
  7. เชื่อมต่อกับอุปกรณ์โดยใช้ที่อยู่ IP
    adb connect device_ip_address:5555
    
  8. ตรวจสอบว่าคอมพิวเตอร์โฮสต์เชื่อมต่อกับอุปกรณ์เป้าหมายแล้ว
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

ตอนนี้อุปกรณ์เชื่อมต่อกับ 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 หากต้องการระบุเป้าหมาย ให้ทำตามขั้นตอนต่อไปนี้

  1. ใช้คำสั่ง devices เพื่อรับหมายเลขซีเรียลของเป้าหมาย
  2. เมื่อได้หมายเลขซีเรียลแล้ว ให้ใช้ตัวเลือก -s กับคำสั่ง adb เพื่อระบุหมายเลขซีเรียล
    1. หากจะออกคำสั่ง adb จำนวนมาก คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม $ANDROID_SERIAL ให้มีหมายเลขซีเรียลแทนได้
    2. หากคุณใช้ทั้ง -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 ดังนี้

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 คำสั่ง Activity Manager ที่ใช้ได้

คำสั่ง คำอธิบาย
start [options] intent เริ่ม Activity ที่ระบุโดย intent

ดูข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent

ตัวเลือกมีดังนี้

  • -D: เปิดใช้การแก้ไขข้อบกพร่อง
  • -W: รอให้การเปิดตัวเสร็จสมบูรณ์
  • --start-profiler file: เริ่มเครื่องมือสร้างโปรไฟล์และส่งผลลัพธ์ไปที่ file
  • -P file: เหมือน --start-profiler แต่การสร้างโปรไฟล์จะหยุดเมื่อแอปไม่ได้ใช้งาน
  • -R count: เปิดใช้กิจกรรมซ้ำ count ครั้ง ก่อนการทำซ้ำแต่ละครั้ง ระบบจะทำกิจกรรมที่อยู่ด้านบนให้เสร็จก่อน
  • -S: บังคับให้แอปเป้าหมายหยุดทำงานก่อนเริ่มกิจกรรม
  • --opengl-trace: เปิดใช้การติดตามฟังก์ชัน OpenGL
  • --user user_id | current: ระบุผู้ใช้ที่จะใช้เรียกใช้ หากไม่ได้ระบุ ให้เรียกใช้ในฐานะผู้ใช้ปัจจุบัน
startservice [options] intent เริ่ม Service ที่ระบุโดย intent

ดูข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent

ตัวเลือกมีดังนี้

  • --user user_id | current: ระบุผู้ใช้ที่จะใช้เรียกใช้ หากไม่ได้ระบุ ให้เรียกใช้ในฐานะผู้ใช้ปัจจุบัน
force-stop package บังคับหยุดทุกอย่างที่เชื่อมโยงกับ package
kill [options] package สิ้นสุดกระบวนการทั้งหมดที่เชื่อมโยงกับ package คำสั่งนี้จะปิดเฉพาะ กระบวนการที่ปิดได้อย่างปลอดภัยและจะไม่ส่งผลต่อประสบการณ์ของผู้ใช้

ตัวเลือกมีดังนี้

  • --user user_id | all | current: ระบุกระบวนการของผู้ใช้ที่จะสิ้นสุด หากไม่ได้ระบุ ให้สิ้นสุดกระบวนการของผู้ใช้ทั้งหมด
kill-all ปิดกระบวนการเบื้องหลังทั้งหมด
broadcast [options] intent ออก Intent การออกอากาศ

ดูข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent

ตัวเลือกมีดังนี้

  • [--user user_id | all | current]: ระบุผู้ใช้ที่จะส่ง หากไม่ได้ระบุ ให้ส่งถึงผู้ใช้ทั้งหมด
instrument [options] component เริ่มตรวจสอบด้วยอินสแตนซ์ Instrumentation โดยปกติแล้ว component เป้าหมายคือฟอร์ม test_package/runner_class

ตัวเลือกมีดังนี้

  • -r: พิมพ์ผลลัพธ์ดิบ (หรือถอดรหัส report_key_streamresult) ใช้กับ [-e perf true] เพื่อสร้างเอาต์พุตดิบสำหรับการวัดประสิทธิภาพ
  • -e name value: ตั้งค่าอาร์กิวเมนต์ name เป็น value สำหรับโปรแกรมเรียกใช้การทดสอบ รูปแบบทั่วไปคือ -e testrunner_flag value[,value...]
  • -p file: เขียนข้อมูลการทำโปรไฟล์ไปยัง file
  • -w: รอให้การวัดผลเสร็จสิ้นก่อนส่งคืน ต้องใช้สำหรับ โปรแกรมเรียกใช้การทดสอบ
  • --no-window-animation: ปิดภาพเคลื่อนไหวของหน้าต่างขณะทำงาน
  • --user user_id | current: ระบุว่าเครื่องมือวัดผู้ใช้ใดที่ทำงานอยู่ หากไม่ได้ระบุ ให้เรียกใช้ในผู้ใช้ปัจจุบัน
profile start process file เริ่มเครื่องมือสร้างโปรไฟล์ใน process เขียนผลลัพธ์ไปยัง file
profile stop process หยุดโปรไฟล์ใน process
dumpheap [options] process file ดัมพ์ฮีปของ process เขียนถึง file

ตัวเลือกมีดังนี้

  • --user [user_id | current]: เมื่อระบุชื่อกระบวนการ ให้ระบุผู้ใช้ของกระบวนการที่จะทิ้ง หากไม่ได้ระบุ ระบบจะใช้ผู้ใช้ปัจจุบัน
  • -b [| png | jpg | webp]: ดัมพ์บิตแมปจากหน่วยความจำกราฟิก (ระดับ API 35 ขึ้นไป) ระบุรูปแบบที่จะดัมพ์ (PNG โดยค่าเริ่มต้น)
  • -n: ทิ้งฮีปดั้งเดิมแทนฮีปที่มีการจัดการ
dumpbitmaps [options] [-p process] ส่งออกข้อมูลบิตแมปจาก process (ระดับ API 36 ขึ้นไป)

ตัวเลือกมีดังนี้

  • -d|--dump [format]: ดัมพ์เนื้อหาบิตแมปใน format ที่ระบุ ซึ่งอาจเป็น png, jpg หรือ webp โดยค่าเริ่มต้นจะเป็น png หากไม่ได้ระบุไว้ จะมีการสร้างไฟล์ ZIP dumpbitmaps-<time>.zip ที่มีบิตแมป
  • -p process: ดัมพ์บิตแมปจาก process, ระบุได้หลายรายการ -p process
หากไม่ได้ระบุ process ระบบจะทิ้งบิตแมปจากกระบวนการทั้งหมด
set-debug-app [options] package ตั้งค่าแอป package เพื่อแก้ไขข้อบกพร่อง

ตัวเลือกมีดังนี้

  • -w: รอดีบักเกอร์เมื่อแอปเริ่มต้น
  • --persistent: เก็บค่านี้ไว้
clear-debug-app ล้างแพ็กเกจที่ตั้งค่าไว้ก่อนหน้าสำหรับการแก้ไขข้อบกพร่องด้วย set-debug-app
monitor [options] เริ่มตรวจสอบข้อขัดข้องหรือ ANR

ตัวเลือกมีดังนี้

  • --gdb: เริ่ม gdbserv ในพอร์ตที่ระบุเมื่อเกิดข้อขัดข้อง/ANR
screen-compat {on | off} package ควบคุมโหมดความเข้ากันได้ของหน้าจอของ package
display-size [reset | widthxheight] ลบล้างขนาดการแสดงผลของอุปกรณ์ คำสั่งนี้มีประโยชน์ในการทดสอบแอปในขนาดหน้าจอต่างๆ โดยการจำลองความละเอียดหน้าจอขนาดเล็กโดยใช้อุปกรณ์ที่มีหน้าจอขนาดใหญ่ และในทางกลับกัน

ตัวอย่าง:
am display-size 1280x800

display-density dpi ลบล้างความหนาแน่นของจอแสดงผลของอุปกรณ์ คำสั่งนี้มีประโยชน์ในการทดสอบแอปในความหนาแน่นของหน้าจอต่างๆ โดยการจำลองสภาพแวดล้อมของหน้าจอความหนาแน่นสูงโดยใช้หน้าจอความหนาแน่นต่ำ และในทางกลับกัน

ตัวอย่าง:
am display-density 480

to-uri intent พิมพ์ข้อกำหนดของ Intent ที่ระบุเป็น URI

ดูข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent

to-intent-uri intent พิมพ์ข้อกำหนดของ Intent ที่ระบุเป็น intent: URI

ดูข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent

ข้อกำหนดสำหรับอาร์กิวเมนต์ของ 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 ก็ได้

ตัวเลือก:

  • -f: ดูไฟล์ที่เกี่ยวข้อง
  • -d: กรองเพื่อแสดงเฉพาะแพ็กเกจที่ปิดใช้
  • -e: กรองเพื่อแสดงเฉพาะแพ็กเกจที่เปิดใช้
  • -s: กรองเพื่อแสดงเฉพาะแพ็กเกจระบบ
  • -3: กรองเพื่อแสดงเฉพาะแพ็กเกจของบุคคลที่สาม
  • -i: ดูโปรแกรมติดตั้งสำหรับแพ็กเกจ
  • -u: รวมแพ็กเกจที่ถอนการติดตั้งแล้ว
  • --user user_id: พื้นที่ผู้ใช้ที่จะค้นหา
list permission-groups พิมพ์กลุ่มสิทธิ์ที่ทราบทั้งหมด
list permissions [options] group พิมพ์สิทธิ์ที่ทราบทั้งหมด หรือจะพิมพ์เฉพาะสิทธิ์ใน group ก็ได้

ตัวเลือก:

  • -g: จัดระเบียบตามกลุ่ม
  • -f: พิมพ์ข้อมูลทั้งหมด
  • -s: ข้อมูลสรุปสั้นๆ
  • -d: แสดงเฉพาะสิทธิ์ที่เป็นอันตราย
  • -u: แสดงเฉพาะสิทธิ์ที่ผู้ใช้จะเห็น
list instrumentation [options] แสดงรายการแพ็กเกจทดสอบทั้งหมด

ตัวเลือก:

  • -f: แสดงรายการไฟล์ APK สำหรับแพ็กเกจทดสอบ
  • target_package: แสดงแพ็กเกจทดสอบสำหรับแอปนี้เท่านั้น
list features พิมพ์ฟีเจอร์ทั้งหมดของระบบ
list libraries พิมพ์ไลบรารีทั้งหมดที่อุปกรณ์ปัจจุบันรองรับ
list users พิมพ์ผู้ใช้ทั้งหมดในระบบ
path package พิมพ์เส้นทางไปยัง APK ของ package ที่ระบุ
install [options] path ติดตั้งแพ็กเกจที่ระบุโดย path ลงในระบบ

ตัวเลือก:

  • -r: ติดตั้งแอปที่มีอยู่แล้วอีกครั้งโดยเก็บข้อมูลของแอปไว้
  • -t: อนุญาตให้ติดตั้ง APK สำหรับทดสอบ Gradle จะสร้าง APK สำหรับทดสอบเมื่อ คุณเรียกใช้หรือแก้ไขข้อบกพร่องของแอปเท่านั้น หรือใช้คำสั่ง Build > Build APK ใน Android Studio หากสร้าง APK โดยใช้ SDK เวอร์ชันตัวอย่างสำหรับนักพัฒนาแอป คุณต้องใส่ตัวเลือก -t พร้อมคำสั่ง install หากคุณกำลังติดตั้ง APK ทดสอบ
  • -i installer_package_name: ระบุชื่อแพ็กเกจโปรแกรมติดตั้ง
  • --user user_id: ระบุผู้ใช้ที่จะติดตั้งแพ็กเกจให้ โดยค่าเริ่มต้น ระบบจะ ติดตั้งแพ็กเกจสำหรับผู้ใช้ทั้งหมดที่มีอยู่ในอุปกรณ์
  • --install-location location: ตั้งค่าตำแหน่งการติดตั้ง โดยใช้ค่าใดค่าหนึ่งต่อไปนี้
    • 0: ใช้ตำแหน่งการติดตั้งเริ่มต้น
    • 1: ติดตั้งในพื้นที่เก็บข้อมูลภายในของอุปกรณ์
    • 2: ติดตั้งในสื่อภายนอก
  • -f: ติดตั้งแพ็กเกจในหน่วยความจำระบบภายใน
  • -d: อนุญาตการดาวน์เกรดรหัสเวอร์ชัน
  • -g: ให้สิทธิ์ทั้งหมดที่ระบุไว้ในไฟล์ Manifest ของแอป
  • --fastdeploy: อัปเดตแพ็กเกจที่ติดตั้งอย่างรวดเร็วโดยอัปเดตเฉพาะส่วนของ APK ที่มีการเปลี่ยนแปลง
  • --incremental: ติดตั้ง APK ให้เพียงพอที่จะเปิดแอป ขณะที่สตรีมข้อมูลที่เหลือในเบื้องหลัง หากต้องการใช้ฟีเจอร์นี้ คุณต้องลงชื่อใน APK สร้างไฟล์ APK Signature Scheme v4 และวางไฟล์นี้ในไดเรกทอรีเดียวกับ APK ฟีเจอร์นี้ใช้ได้ใน อุปกรณ์บางรุ่นเท่านั้น ตัวเลือกนี้บังคับให้ adb ใช้ฟีเจอร์ดังกล่าวหรือล้มเหลวหากไม่รองรับ พร้อมข้อมูลแบบละเอียดเกี่ยวกับสาเหตุที่ล้มเหลว ต่อท้ายตัวเลือก --wait เพื่อ รอจนกว่าจะติดตั้ง APK เสร็จสมบูรณ์ก่อนให้สิทธิ์เข้าถึง APK

    --no-incremental ป้องกันไม่ให้ adb ใช้ฟีเจอร์นี้

uninstall [options] package นำแพ็กเกจออกจากระบบ

ตัวเลือก:

  • -k: เก็บไดเรกทอรีข้อมูลและแคชไว้หลังจากนำแพ็กเกจออก
  • --user user_id: ระบุผู้ใช้ที่จะนำแพ็กเกจออก โดยค่าเริ่มต้น ระบบจะนำแพ็กเกจออกสำหรับผู้ใช้ทุกคนในอุปกรณ์
  • --versionCode version_code: จะถอนการติดตั้งเฉพาะในกรณีที่แอปมีรหัสเวอร์ชันที่ระบุ
clear package ลบข้อมูลทั้งหมดที่เชื่อมโยงกับแพ็กเกจ
enable package_or_component เปิดใช้แพ็กเกจหรือคอมโพเนนต์ที่ระบุ (เขียนเป็น "แพ็กเกจ/คลาส")
disable package_or_component ปิดใช้แพ็กเกจหรือคอมโพเนนต์ที่ระบุ (เขียนเป็น "แพ็กเกจ/คลาส")
disable-user [options] package_or_component

ตัวเลือก:

  • --user user_id: ผู้ใช้ที่จะปิดใช้
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 เปลี่ยนตำแหน่งการติดตั้งเริ่มต้น ค่าสถานที่ตั้ง
  • 0: อัตโนมัติ: ให้ระบบตัดสินใจเลือกตำแหน่งที่ดีที่สุด
  • 1: ภายใน: ติดตั้งในพื้นที่เก็บข้อมูลของอุปกรณ์ภายใน
  • 2: ภายนอก: ติดตั้งในสื่อภายนอก

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

get-install-location แสดงผลตำแหน่งการติดตั้งปัจจุบัน ค่าที่แสดงผล
  • 0 [auto]: ให้ระบบตัดสินใจเลือกตำแหน่งที่ดีที่สุด
  • 1 [internal]: ติดตั้งในพื้นที่เก็บข้อมูลภายในของอุปกรณ์
  • 2 [external]: ติดตั้งในสื่อภายนอก
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 ที่ระบุ หรือสำหรับแพ็กเกจทั้งหมดหากไม่ได้ระบุรหัสสถานะไว้ รหัสสถานะมีคำจำกัดความดังนี้

  • none: ไม่มีการบันทึกข้อมูลสำหรับโดเมนนี้
  • verified: ยืนยันโดเมนเรียบร้อยแล้ว
  • approved: ได้รับอนุมัติโดยบังคับ ซึ่งมักจะผ่าน Shell
  • denied: ถูกปฏิเสธโดยบังคับ ซึ่งมักจะผ่านเชลล์
  • migrated: เก็บการยืนยันจากการตอบกลับเดิม
  • restored: การยืนยันที่เก็บไว้จากการกู้คืนข้อมูลผู้ใช้
  • legacy_failure: ถูกปฏิเสธโดยผู้ยืนยันรุ่นเดิม ไม่ทราบสาเหตุ
  • system_configured: ได้รับอนุมัติโดยอัตโนมัติจากการกำหนดค่าอุปกรณ์
  • >= 1024: รหัสข้อผิดพลาดที่กำหนดเองซึ่งเฉพาะสำหรับเครื่องมือตรวจสอบอุปกรณ์

ตัวเลือกมีดังนี้

  • --user user_id: รวมถึงตัวเลือกของผู้ใช้ รวมโดเมนทั้งหมด ไม่ใช่เฉพาะโดเมนที่ยืนยันอัตโนมัติ
reset-app-links [options] [package]

รีเซ็ตสถานะการยืนยันโดเมนสำหรับแพ็กเกจที่ระบุ หรือสำหรับแพ็กเกจทั้งหมดหากไม่ได้ระบุ

  • package: แพ็กเกจที่จะรีเซ็ต หรือ "all" เพื่อรีเซ็ตแพ็กเกจทั้งหมด

ตัวเลือกมีดังนี้

  • --user user_id: รวมถึงตัวเลือกของผู้ใช้ รวมโดเมนทั้งหมด ไม่ใช่เฉพาะโดเมนที่ยืนยันอัตโนมัติ
verify-app-links [--re-verify] [package]

ออกอากาศคำขอยืนยันสำหรับ package ที่ระบุ หรือสำหรับแพ็กเกจทั้งหมด หากไม่ได้ระบุ ส่งเฉพาะในกรณีที่แพ็กเกจไม่ได้บันทึกการตอบกลับไว้ก่อนหน้านี้

  • --re-verify: ส่งแม้ว่าแพ็กเกจจะบันทึกการตอบกลับแล้วก็ตาม
set-app-links [--package package] state domains

ตั้งค่าสถานะของโดเมนสำหรับแพ็กเกจด้วยตนเอง โดเมนต้องได้รับการประกาศโดยแพ็กเกจเป็น autoVerify เพื่อให้การทำงานนี้สำเร็จ คำสั่งนี้ จะไม่รายงานว่าโดเมนที่ใช้ไม่ได้ล้มเหลว

  • --package package: แพ็กเกจที่จะตั้งค่า หรือ "all" เพื่อตั้งค่าแพ็กเกจทั้งหมด
  • state: รหัสสำหรับตั้งค่าโดเมน ค่าที่ถูกต้องมีดังนี้
    • STATE_NO_RESPONSE (0): รีเซ็ตเหมือนกับว่าไม่เคยมีการบันทึกคำตอบ
    • STATE_SUCCESS (1): ถือว่าโดเมนได้รับการยืนยันเรียบร้อยแล้วโดยตัวแทนการยืนยันโดเมน โปรดทราบว่าตัวแทนยืนยันโดเมนสามารถ ลบล้างการตั้งค่านี้ได้
    • STATE_APPROVED (2): ถือว่าโดเมนได้รับอนุมัติเสมอ ซึ่งจะป้องกันไม่ให้ ตัวแทนการยืนยันโดเมนเปลี่ยนแปลงโดเมน
    • STATE_DENIED (3): ถือว่าโดเมนถูกปฏิเสธเสมอ ซึ่งจะป้องกันไม่ให้ตัวแทนการยืนยันโดเมน เปลี่ยนแปลงโดเมน
  • domains: รายชื่อโดเมนที่คั่นด้วยช่องว่างที่จะเปลี่ยน หรือ "all" เพื่อ เปลี่ยนทุกโดเมน
set-app-links-user-selection --user user_id [--package package] enabled domains

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

  • --user user_id: ผู้ใช้ที่จะเปลี่ยนการเลือก
  • --package package: แพ็กเกจที่จะตั้งค่า
  • enabled: เลือกว่าจะอนุมัติโดเมนหรือไม่
  • domains: รายการโดเมนที่คั่นด้วยช่องว่างที่จะเปลี่ยน หรือ "all" เพื่อ เปลี่ยนทุกโดเมน
set-app-links-allowed --user user_id [--package package] allowed

สลับการตั้งค่าการจัดการลิงก์ที่ยืนยันอัตโนมัติสำหรับแพ็กเกจ

  • --user user_id: ผู้ใช้ที่จะเปลี่ยนการเลือก
  • --package package: แพ็กเกจที่จะตั้งค่า หรือ "all" เพื่อตั้งค่าแพ็กเกจทั้งหมด ระบบจะรีเซ็ตแพ็กเกจหากไม่ได้ระบุแพ็กเกจ
  • allowed: จริงเพื่ออนุญาตให้แพ็กเกจเปิดลิงก์ที่ยืนยันอัตโนมัติ เท็จเพื่อปิดใช้
get-app-link-owners --user user_id [--package package] domains

พิมพ์เจ้าของสำหรับโดเมนที่เฉพาะเจาะจงสำหรับผู้ใช้ที่กำหนดตามลำดับความสำคัญจากต่ำไปสูง

  • --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 เป็นผู้ดูแลระบบที่ใช้งานอยู่

ตัวเลือกมีดังนี้

  • --user user_id: ระบุผู้ใช้เป้าหมาย นอกจากนี้ คุณยังส่ง --user current เพื่อเลือกผู้ใช้ปัจจุบันได้ด้วย
set-profile-owner [options] component ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่และตั้งค่าแพ็กเกจเป็นเจ้าของโปรไฟล์สำหรับผู้ใช้ที่มีอยู่

ตัวเลือกมีดังนี้

  • --user user_id: ระบุผู้ใช้เป้าหมาย คุณยังส่ง --user current เพื่อเลือกผู้ใช้ปัจจุบันได้ด้วย
  • --name name: ระบุชื่อองค์กรที่อ่านแล้วเข้าใจได้
set-device-owner [options] component ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่และตั้งค่าแพ็กเกจเป็นเจ้าของอุปกรณ์

ตัวเลือกมีดังนี้

  • --user user_id: ระบุผู้ใช้เป้าหมาย นอกจากนี้ คุณยังส่ง --user current เพื่อเลือกผู้ใช้ปัจจุบันได้ด้วย
  • --name name: ระบุชื่อองค์กรที่อ่านแล้วเข้าใจได้
remove-active-admin [options] component ปิดใช้ผู้ดูแลระบบที่ใช้งานอยู่ แอปต้องประกาศ android:testOnly ในไฟล์ Manifest คำสั่งนี้จะนำเจ้าของอุปกรณ์และโปรไฟล์ออกด้วย

ตัวเลือกมีดังนี้

  • --user user_id: ระบุผู้ใช้เป้าหมาย นอกจากนี้ คุณยังส่ง --user current เพื่อเลือกผู้ใช้ปัจจุบันได้ด้วย
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) ขึ้นไปเป็นค่าเริ่มต้นได้โดยใช้คำสั่ง 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 ใช้โปรโตคอล mDNS (DNS แบบหลายผู้รับ) เพื่อเชื่อมต่อเซิร์ฟเวอร์และอุปกรณ์โดยอัตโนมัติสำหรับการแก้ไขข้อบกพร่องแบบไร้สาย ตั้งแต่ ADB เวอร์ชัน 37 เป็นต้นไป เซิร์ฟเวอร์ 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 เป็นเปิดใช้