Android Debug Bridge (adb)

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

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

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

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

วิธีการทำงานของ adb

เมื่อคุณเริ่มไคลเอ็นต์ adb ไคลเอ็นต์จะตรวจสอบก่อนว่ามีกระบวนการเซิร์ฟเวอร์ adb ทำงานอยู่หรือไม่ หากไม่มี ระบบจะเริ่มกระบวนการของเซิร์ฟเวอร์ เมื่อเซิร์ฟเวอร์เริ่มต้นทำงาน เซิร์ฟเวอร์จะเชื่อมโยงกับพอร์ต TCP ในเครื่อง 5037 และรอรับคำสั่งที่ส่งจากไคลเอ็นต์ adb

หมายเหตุ: ไคลเอ็นต์ adb ทั้งหมดใช้พอร์ต 5037 ในการสื่อสารกับเซิร์ฟเวอร์ adb

จากนั้นเซิร์ฟเวอร์จะตั้งค่าการเชื่อมต่อกับอุปกรณ์ทั้งหมดที่ทำงานอยู่ โดยจะค้นหาโปรแกรมจำลองด้วยการสแกนพอร์ตเลขคี่ในช่วง 5555 ถึง 5585 ซึ่งเป็นช่วงที่โปรแกรมจำลอง 16 ตัวแรกใช้ เมื่อเซิร์ฟเวอร์พบ adb daemon (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 เช่น การติดตั้งไดรเวอร์

ก่อนเริ่มใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi ให้ทำดังนี้

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

  • ตรวจสอบว่าอุปกรณ์ของคุณใช้ Android 11 (API ระดับ 30) ขึ้นไปสำหรับโทรศัพท์ หรือ Android 13 (API ระดับ 33) ขึ้นไปสำหรับทีวีและ WearOS ดูข้อมูลเพิ่มเติมได้ที่ ตรวจสอบและอัปเดต เวอร์ชัน Android

  • หากใช้ IDE โปรดตรวจสอบว่าคุณได้ติดตั้ง Android Studio เวอร์ชันล่าสุดแล้ว คุณสามารถดาวน์โหลดได้ ที่นี่

  • ในเวิร์กสเตชัน ให้อัปเดตเป็นเวอร์ชันล่าสุดของ เครื่องมือแพลตฟอร์ม SDK

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

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

  2. เปิด Android Studio แล้วเลือกจับคู่อุปกรณ์โดยใช้ Wi-Fi จากเมนูการกำหนดค่าการเรียกใช้

    เมนูแบบเลื่อนลงของการกำหนดค่าการเรียกใช้
    รูปที่ 1 เมนูการกำหนดค่าการเรียกใช้

    หน้าต่างจับคู่อุปกรณ์ผ่าน Wi-Fi จะปรากฏขึ้นดังแสดงในรูปที่ 2

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

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

    2. หากต้องการจับคู่อุปกรณ์ด้วยรหัสการจับคู่ ให้เลือกจับคู่อุปกรณ์ด้วยรหัสการจับคู่จาก ป๊อปอัปจับคู่อุปกรณ์ผ่าน Wi-Fi ในอุปกรณ์ ให้เลือกจับคู่โดยใช้รหัส การจับคู่และจดรหัส 6 หลักที่ระบุไว้ เมื่ออุปกรณ์ปรากฏในหน้าต่างจับคู่อุปกรณ์ผ่าน Wi-Fi แล้ว คุณสามารถเลือกจับคู่และป้อนรหัส 6 หลัก ที่แสดงในอุปกรณ์

      ภาพหน้าจอของตัวอย่างการป้อนรหัส PIN
      รูปที่ 4 ตัวอย่างการป้อนรหัส 6 หลัก
  4. หลังจากจับคู่อุปกรณ์แล้ว คุณจะพยายามติดตั้งใช้งานแอปในอุปกรณ์ได้

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

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

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

การเชื่อมต่อ Wi-Fi โดยใช้บรรทัดคำสั่ง

หรือหากต้องการเชื่อมต่อกับอุปกรณ์โดยใช้บรรทัดคำสั่งโดยไม่ต้องใช้ Android Studio ให้ทำตาม ขั้นตอนต่อไปนี้

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

  2. เปิดใช้การแก้ไขข้อบกพร่องแบบไร้สายในอุปกรณ์ตามที่อธิบายไว้ก่อนหน้านี้

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

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

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

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

    ภาพหน้าจอของ
            การจับคู่ในบรรทัดคำสั่ง
    รูปที่ 6 ข้อความจะระบุว่าจับคู่อุปกรณ์เรียบร้อยแล้ว

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

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

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

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

ตรวจสอบปัญหาอื่นๆ ที่ทราบ

ต่อไปนี้คือรายการปัญหาที่ทราบแล้วในปัจจุบันเกี่ยวกับการแก้ไขข้อบกพร่องแบบไร้สาย (ด้วย 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

  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 เพื่อคัดลอกไฟล์ไปยังและจากอุปกรณ์ คำสั่ง 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

หากมีโปรแกรมจำลองทำงานอยู่เพียงโปรแกรมเดียวหรือมีอุปกรณ์เชื่อมต่ออยู่เพียงเครื่องเดียว ระบบจะส่งคำสั่ง 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 --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 shell คุณสามารถออกคำสั่งด้วยเครื่องมือ 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

นอกจากนี้ คุณยังออกคำสั่ง Package Manager ได้โดยตรงจาก adb โดยไม่ต้องเข้าเชลล์ระยะไกล เช่น

adb shell pm uninstall com.example.MyApp

ตารางที่ 2 คำสั่ง Package Manager ที่ใช้ได้

คำสั่ง คำอธิบาย
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 เปิดใช้แพ็กเกจหรือคอมโพเนนต์ที่ระบุ (เขียนเป็น "package/class")
disable package_or_component ปิดใช้แพ็กเกจหรือคอมโพเนนต์ที่ระบุ (เขียนเป็น "package/class")
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: ได้รับอนุมัติโดยบังคับ ซึ่งมักจะผ่านเชลล์
  • 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 สามารถใช้โปรโตคอล DNS แบบหลายผู้รับเพื่อเชื่อมต่อเซิร์ฟเวอร์และอุปกรณ์โดยอัตโนมัติ เซิร์ฟเวอร์ ADB มาพร้อมกับแบ็กเอนด์ 2 รายการ ได้แก่ Bonjour (mdnsResponder ของ Apple) และ Openscreen

แบ็กเอนด์ Bonjour ต้องมี Daemon ทำงานในเครื่องโฮสต์ ใน macOS Daemon ในตัวของ Apple จะทำงานอยู่เสมอ แต่ใน Windows และ Linux ผู้ใช้ต้องตรวจสอบว่า Daemon 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

โหมดถ่ายภาพต่อเนื่องของ adb (เริ่มตั้งแต่ ADB 36.0.0)

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

โหมดถ่ายภาพต่อเนื่องจะปิดอยู่โดยค่าเริ่มต้น หากต้องการเปิดใช้ฟีเจอร์นี้ ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้

  • ตั้งค่าตัวแปรสภาพแวดล้อม ADB_DELAYED_ACK เป็น 1
  • ใน Android Studio ให้ไปที่การตั้งค่าดีบักเกอร์ที่ไฟล์ (หรือ Android Studio ใน macOS) > การตั้งค่า > สร้าง, ดำเนินการ, การติดตั้งใช้งาน > ดีบักเกอร์ แล้วตั้งค่าโหมดต่อเนื่องของเซิร์ฟเวอร์ ADB เป็นเปิดใช้