Android Debug Bridge (adb)

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

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

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

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

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

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

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

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

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

โปรแกรมจำลอง 1, คอนโซล: 5554
โปรแกรมจำลอง 1, adb: 5555
โปรแกรมจำลอง 2, คอนโซล: 5556
โปรแกรมจำลอง 2, adb: 5557
และอื่นๆ

ดังที่แสดง โปรแกรมจำลองที่เชื่อมต่อกับ adb ในพอร์ต 5555 นั้นเหมือนกับโปรแกรมจำลองที่มีคอนโซลรอรับฟังในพอร์ต 5554

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

เปิดใช้การแก้ไขข้อบกพร่อง ADB ในอุปกรณ์

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

ตอนนี้คุณเชื่อมต่ออุปกรณ์ด้วย USB ได้แล้ว คุณสามารถตรวจสอบว่าอุปกรณ์เชื่อมต่ออยู่หรือไม่โดยเรียกใช้ adb devices จากไดเรกทอรี android_sdk/platform-tools/ หากเชื่อมต่ออยู่ คุณจะเห็นชื่ออุปกรณ์แสดงเป็น "อุปกรณ์"

หมายเหตุ: เมื่อเชื่อมต่ออุปกรณ์ที่ใช้ Android 4.2.2 (API ระดับ 17) ขึ้นไป ระบบจะแสดงกล่องโต้ตอบเพื่อถามว่าต้องการยอมรับคีย์ RSA ที่อนุญาตให้แก้ไขข้อบกพร่องผ่านคอมพิวเตอร์นี้หรือไม่ กลไกความปลอดภัยนี้ช่วยปกป้องอุปกรณ์ของผู้ใช้เนื่องจากจะป้องกันไม่ให้การแก้ไขข้อบกพร่องผ่าน USB และคำสั่ง adb อื่นๆ ทำงานได้ เว้นแต่คุณจะปลดล็อกอุปกรณ์และยอมรับกล่องโต้ตอบ

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

เชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi

หมายเหตุ: วิธีการด้านล่างนี้ใช้ไม่ได้กับอุปกรณ์ Wear ที่ใช้ Android 11 (API ระดับ 30) ดูข้อมูลเพิ่มเติมได้ที่คู่มือการแก้ไขข้อบกพร่องของแอป Wear OS

Android 11 (API ระดับ 30) ขึ้นไปรองรับการติดตั้งใช้งานและการแก้ไขข้อบกพร่องของแอปแบบไร้สายจากเวิร์กสเตชันโดยใช้ Android Debug Bridge (adb) เช่น คุณสามารถทำให้แอปที่แก้ไขข้อบกพร่องได้ใช้งานได้ในอุปกรณ์ระยะไกลหลายเครื่องโดยไม่ต้องเชื่อมต่ออุปกรณ์ผ่าน USB ซึ่งจะช่วยขจัดปัญหาการเชื่อมต่อ USB ที่พบได้ทั่วไป เช่น การติดตั้งไดรเวอร์

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

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

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

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

  • อัปเดต SDK Platform Tools เป็นเวอร์ชันล่าสุดในเวิร์กสเตชัน

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

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

$ 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 เหล่านั้นในโปรแกรมจำลองหรืออุปกรณ์จริง

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

หมายเหตุ: หากใช้ Android Studio คุณไม่จำเป็นต้องใช้ adb โดยตรงเพื่อติดตั้งแอปในโปรแกรมจำลองหรืออุปกรณ์ แต่ Android Studio จะจัดการการแพ็กเกจและการติดตั้งแอปให้คุณแทน

ตั้งค่าการส่งต่อพอร์ต

ใช้คำสั่ง forward เพื่อตั้งค่าการส่งต่อพอร์ตแบบกำหนดเอง ซึ่งจะส่งต่อคำขอในพอร์ตโฮสต์ที่เจาะจงไปยังพอร์ตอื่นในอุปกรณ์ ตัวอย่างต่อไปนี้จะตั้งค่าการส่งต่อพอร์ตโฮสต์ 6100 ไปยังพอร์ตอุปกรณ์ 7100

adb forward tcp:6100 tcp:7100

ตัวอย่างต่อไปนี้จะตั้งค่าการส่งต่อพอร์ตโฮสต์ 6100 ไปยัง local:logd

adb forward tcp:6100 local:logd

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

คัดลอกไฟล์ไปยังและจากอุปกรณ์

ใช้คำสั่ง pull และ push เพื่อคัดลอกไฟล์ไปยังและจากอุปกรณ์ ซึ่งแตกต่างจากคำสั่ง install ที่คัดลอกเฉพาะไฟล์ APK ไปยังตำแหน่งที่เจาะจง คำสั่ง pull และ push ให้คุณคัดลอกไดเรกทอรีและไฟล์ไปยังตำแหน่งใดก็ได้ในอุปกรณ์

หากต้องการคัดลอกไฟล์หรือไดเรกทอรีและไดเรกทอรีย่อยจากอุปกรณ์ ให้ทําดังนี้

adb pull remote local

หากต้องการคัดลอกไฟล์หรือไดเรกทอรีและไดเรกทอรีย่อยไปยังอุปกรณ์ ให้ทำดังนี้

adb push local remote

แทนที่ local และ remote ด้วยเส้นทางไปยังไฟล์/ไดเรกทอรีเป้าหมายในเครื่องสำหรับพัฒนาซอฟต์แวร์ (ในเครื่อง) และในอุปกรณ์ (ระยะไกล) เช่น

adb push myfile.txt /sdcard/myfile.txt

หยุดเซิร์ฟเวอร์ ADB

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

หากต้องการหยุดเซิร์ฟเวอร์ adb ให้ใช้คำสั่ง adb kill-server จากนั้นคุณสามารถรีสตาร์ทเซิร์ฟเวอร์ได้โดยออกคำสั่ง adb อื่นๆ

ออกคำสั่ง adb

ออกคำสั่ง adb จากบรรทัดคำสั่งในเครื่องสำหรับพัฒนาซอฟต์แวร์หรือจากสคริปต์โดยใช้สิ่งต่อไปนี้

adb [-d | -e | -s serial_number] command

หากมีโปรแกรมจำลองที่ทำงานอยู่เพียงตัวเดียวหรือมีอุปกรณ์ที่เชื่อมต่ออยู่เพียงเครื่องเดียว ระบบจะส่งคำสั่ง 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 เวอร์ชัน 23 ขึ้นไป adb จะจัดการอาร์กิวเมนต์ในลักษณะเดียวกับคำสั่ง ssh(1) การเปลี่ยนแปลงนี้ช่วยแก้ปัญหาการแทรกคำสั่งได้มากมาย และทำให้สามารถเรียกใช้คำสั่งที่มีเชลล์อักขระเมตาได้อย่างปลอดภัย เช่น adb install Let\'sGo.apk การเปลี่ยนแปลงนี้หมายความว่าการตีความคำสั่งที่มีอักขระเมตาเชลล์จะเปลี่ยนไปด้วย

ตัวอย่างเช่น adb shell setprop key 'two words' จะกลายเป็นข้อผิดพลาดเนื่องจากเชลล์ในเครื่องจะตัดเครื่องหมายคำพูดออก และอุปกรณ์จะเห็นadb shell setprop key two words หากต้องการให้คำสั่งทำงาน ให้ใส่เครื่องหมายคำพูด 2 ครั้ง โดยใส่เครื่องหมายคำพูด 1 ครั้งสำหรับเชลล์ในเครื่องและ 1 ครั้งสำหรับเชลล์ระยะไกล เช่นเดียวกับที่ใช้กับ ssh(1) ตัวอย่างเช่น adb shell setprop key "'two words'" ใช้งานได้เนื่องจากเชลล์ในเครื่องใช้การอ้างอิงระดับนอก และอุปกรณ์จะยังคงเห็นการอ้างอิงระดับใน setprop key 'two words' การใช้เครื่องหมายหลีกเป็นอีกทางเลือกหนึ่ง แต่การยกข้อความมา 2 ครั้งมักจะง่ายกว่า

ดูเครื่องมือบรรทัดคำสั่ง Logcat ซึ่งมีประโยชน์ในการตรวจสอบบันทึกของระบบ

เครื่องมือจัดการกิจกรรมการโทร

ในเชลล์ adb คุณสามารถออกคำสั่งด้วยเครื่องมือตัวจัดการกิจกรรม (am) เพื่อดำเนินการต่างๆ ของระบบ เช่น เริ่มกิจกรรม บังคับหยุดกระบวนการ ออกอากาศ Intent แก้ไขพร็อพเพอร์ตี้หน้าจออุปกรณ์ และอื่นๆ

ไวยากรณ์ am ขณะอยู่ในเชลล์มีดังนี้

am command

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

adb shell am start -a android.intent.action.VIEW

ตารางที่ 1 คำสั่งเครื่องมือจัดการกิจกรรมที่ใช้ได้

คำสั่ง คำอธิบาย
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: ดัมพ์ฮีปเนทีฟแทนฮีปที่มีการจัดการ
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 ที่ระบุเป็น URI intent:

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

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

สําหรับคําสั่งตัวจัดการกิจกรรมที่ใช้อาร์กิวเมนต์ intent คุณสามารถระบุความตั้งใจด้วยตัวเลือกต่อไปนี้

โทรหาผู้จัดการแพ็กเกจ (pm)

ในเชลล์ adb คุณสามารถออกคำสั่งด้วยเครื่องมือจัดการแพ็กเกจ (pm) เพื่อดำเนินการและค้นหาแพ็กเกจแอปที่ติดตั้งในอุปกรณ์

ไวยากรณ์ pm ขณะอยู่ในเชลล์มีดังนี้

pm command

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

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: ระบุชื่อแพ็กเกจโปรแกรมติดตั้ง
  • --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-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: พิมพ์สำหรับเว็บโดเมนทั้งหมดที่แพ็กเกจประกาศไว้ด้วย (ไม่บังคับ) หรือ "all" เพื่อพิมพ์แพ็กเกจทั้งหมด
  • domains: รายการโดเมนที่คั่นด้วยเว้นวรรคที่จะค้นหา

โทรหาผู้จัดการนโยบายอุปกรณ์ (dpm)

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

ขณะอยู่ในเชลล์ ไวยากรณ์ของ dpm มีดังนี้

dpm command

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

adb shell dpm command

ตารางที่ 3 คำสั่งตัวจัดการนโยบายด้านอุปกรณ์ที่ใช้ได้

คำสั่ง คำอธิบาย
set-active-admin [options] component ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่

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

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

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

  • --user user_id: ระบุผู้ใช้เป้าหมาย นอกจากนี้ คุณยังส่ง --user current เพื่อเลือกผู้ใช้ปัจจุบันได้ด้วย
  • --name name: ระบุชื่อองค์กรที่อ่านแล้วเข้าใจได้
set-device-owner [options] component ตั้งค่า 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() callback โปรดดูหัวข้อบันทึกกิจกรรมในอุปกรณ์ขององค์กร

คำสั่งนี้ถูกจำกัดอัตรา ใช้ได้ในอุปกรณ์ที่ใช้ Android 9.0 (API ระดับ 28) ขึ้นไป

ถ่ายภาพหน้าจอ

คำสั่ง screencap เป็นยูทิลิตีเชลล์สำหรับการถ่ายภาพหน้าจอของจอแสดงผลของอุปกรณ์

ไวยากรณ์ screencap ขณะอยู่ในเชลล์มีดังนี้

screencap filename

หากต้องการใช้ screencap จากบรรทัดคำสั่ง ให้ป้อนข้อมูลต่อไปนี้

adb shell screencap /sdcard/screen.png

ตัวอย่างเซสชันภาพหน้าจอโดยใช้เชลล์ adb เพื่อจับภาพหน้าจอและคำสั่ง pull เพื่อดาวน์โหลดไฟล์จากอุปกรณ์มีดังนี้

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

บันทึกวิดีโอ

คำสั่ง screenrecord เป็นยูทิลิตีเชลล์สำหรับการบันทึกการแสดงผลของอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 19) ขึ้นไป ยูทิลิตีจะบันทึกกิจกรรมบนหน้าจอลงในไฟล์ MPEG-4 คุณสามารถใช้ไฟล์นี้เพื่อสร้างวิดีโอโปรโมตหรือวิดีโอฝึกอบรม หรือใช้เพื่อแก้ไขข้อบกพร่องและทดสอบ

ในเชลล์ ให้ใช้ไวยากรณ์ต่อไปนี้

screenrecord [options] filename

หากต้องการใช้ screenrecord จากบรรทัดคำสั่ง ให้ป้อนข้อมูลต่อไปนี้

adb shell screenrecord /sdcard/demo.mp4

หยุดการอัดหน้าจอโดยกดแป้น Control+C มิเช่นนั้น การบันทึกจะหยุดโดยอัตโนมัติเมื่อครบ 3 นาทีหรือเมื่อถึงขีดจำกัดเวลาที่กำหนดโดย --time-limit

หากต้องการเริ่มบันทึกหน้าจออุปกรณ์ ให้เรียกใช้คำสั่ง screenrecord เพื่อบันทึกวิดีโอ จากนั้นเรียกใช้คำสั่ง pull เพื่อดาวน์โหลดวิดีโอจากอุปกรณ์ไปยังคอมพิวเตอร์โฮสต์ ตัวอย่างเซสชันการบันทึกมีดังนี้

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

ยูทิลิตี screenrecord สามารถบันทึกด้วยความละเอียดและอัตราบิตที่รองรับได้ทุกรูปแบบที่คุณขอ ขณะเดียวกันก็รักษาสัดส่วนการแสดงผลของจอแสดงผลของอุปกรณ์ไว้ ยูทิลิตีจะบันทึกที่ความละเอียดและการวางแนวของจอแสดงผลเดิมโดยค่าเริ่มต้น โดยมีความยาวสูงสุด 3 นาที

ข้อจํากัดของยูทิลิตี screenrecord

  • ระบบจะไม่บันทึกเสียงพร้อมกับไฟล์วิดีโอ
  • อุปกรณ์ที่ใช้ Wear OS ไม่สามารถบันทึกวิดีโอได้
  • อุปกรณ์บางรุ่นอาจบันทึกด้วยความละเอียดของจอแสดงผลเดิมไม่ได้ หากพบปัญหาเกี่ยวกับการบันทึกหน้าจอ ให้ลองใช้ความละเอียดหน้าจอที่ต่ำลง
  • ไม่รองรับการหมุนหน้าจอระหว่างการบันทึก หากหน้าจอหมุนระหว่างการบันทึก วิดีโอที่บันทึกไว้อาจตัดหน้าจอบางส่วนออก

ตารางที่ 4 ตัวเลือก screenrecord

ตัวเลือก คำอธิบาย
--help แสดงไวยากรณ์และตัวเลือกคำสั่ง
--size widthxheight ตั้งค่าขนาดวิดีโอ: 1280x720 ค่าเริ่มต้นคือความละเอียดของจอแสดงผลเริ่มต้นของอุปกรณ์ (หากรองรับ) หรือ 1280x720 หากไม่รองรับ โปรดใช้ขนาดที่โปรแกรมเปลี่ยนไฟล์ Advanced Video Coding (AVC) ของอุปกรณ์รองรับเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
--bit-rate rate ตั้งค่าอัตราบิตของวิดีโอเป็นเมกะบิตต่อวินาที ค่าเริ่มต้นคือ 20 Mbps คุณสามารถเพิ่มอัตราบิตเพื่อปรับปรุงคุณภาพวิดีโอได้ แต่ไฟล์ภาพยนตร์ก็จะมีขนาดเพิ่มขึ้นด้วย ตัวอย่างต่อไปนี้ตั้งค่าอัตราบิตในการบันทึกเป็น 6Mbps
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time ตั้งค่าเวลาในการบันทึกสูงสุดเป็นวินาที ค่าเริ่มต้นและค่าสูงสุดคือ 180 (3 นาที)
--rotate หมุนเอาต์พุต 90 องศา ฟีเจอร์นี้อยู่ในขั้นทดลอง
--verbose แสดงข้อมูลบันทึกในหน้าจอบรรทัดคำสั่ง หากคุณไม่ได้ตั้งค่าตัวเลือกนี้ ยูทิลิตีจะไม่แสดงข้อมูลใดๆ ขณะทำงาน

อ่านโปรไฟล์ ART สําหรับแอป

ตั้งแต่ Android 7.0 (API ระดับ 24) เป็นต้นไป รันไทม์ Android (ART) จะรวบรวมโปรไฟล์การเรียกใช้สําหรับแอปที่ติดตั้งไว้ ซึ่งจะใช้เพื่อเพิ่มประสิทธิภาพแอป ตรวจสอบโปรไฟล์ที่รวบรวมเพื่อทําความเข้าใจว่าเมธอดใดที่เรียกใช้บ่อยและคลาสใดที่ใช้ระหว่างการเริ่มต้นแอป

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

หากต้องการสร้างข้อมูลโปรไฟล์ในรูปแบบข้อความ ให้ใช้คำสั่งต่อไปนี้

adb shell cmd package dump-profiles package

หากต้องการเรียกดูไฟล์ที่สร้างขึ้น ให้ใช้คำสั่งต่อไปนี้

adb pull /data/misc/profman/package.prof.txt

รีเซ็ตอุปกรณ์ทดสอบ

หากคุณทดสอบแอปในอุปกรณ์ทดสอบหลายเครื่อง คุณอาจต้องรีเซ็ตอุปกรณ์ระหว่างการทดสอบ เช่น เพื่อนำข้อมูลผู้ใช้ออกและรีเซ็ตสภาพแวดล้อมการทดสอบ คุณสามารถรีเซ็ตอุปกรณ์ทดสอบที่ใช้ Android 10 (API ระดับ 29) ขึ้นไปเป็นค่าเริ่มต้นได้โดยใช้คำสั่ง Shell testharness adb ดังที่แสดง

adb shell cmd testharness enable

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

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

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

หากแอปต้องตรวจหาและปรับให้เข้ากับการตั้งค่าเริ่มต้นของคำสั่ง testharness ใช้ ActivityManager.isRunningInUserTestHarness()

sqlite

sqlite3 เริ่มโปรแกรมบรรทัดคำสั่ง sqlite สำหรับตรวจสอบฐานข้อมูล SQLite ซึ่งรวมถึงคําสั่งต่างๆ เช่น .dump เพื่อพิมพ์เนื้อหาของตาราง และ .schema เพื่อพิมพ์คำสั่ง SQL CREATE สำหรับตารางที่มีอยู่ นอกจากนี้ คุณยังเรียกใช้คำสั่ง SQLite จากบรรทัดคำสั่งได้ด้วย ดังที่แสดงด้านล่าง

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions

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

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับบรรทัดคำสั่ง sqlite3

แบ็กเอนด์ USB ของ adb

เซิร์ฟเวอร์ adb สามารถโต้ตอบกับสแต็ก USB ผ่านแบ็กเอนด์ 2 รายการ โดยจะใช้แบ็กเอนด์ดั้งเดิมของระบบปฏิบัติการ (Windows, Linux หรือ macOS) หรือจะใช้แบ็กเอนด์ libusb ก็ได้ ฟีเจอร์บางอย่าง เช่น attach, detach และการตรวจจับความเร็ว USB จะพร้อมใช้งานเมื่อใช้แบ็กเอนด์ libusb เท่านั้น

คุณเลือกแบ็กเอนด์ได้โดยใช้ตัวแปรสภาพแวดล้อม ADB_LIBUSB หากไม่ได้ตั้งค่าไว้ adb จะใช้แบ็กเอนด์เริ่มต้น ลักษณะการทำงานเริ่มต้นจะแตกต่างกันไปตามระบบปฏิบัติการ ADB v34 จะใช้แบ็กเอนด์ liubusb โดยค่าเริ่มต้นในระบบปฏิบัติการทั้งหมด ยกเว้น Windows ที่จะใช้แบ็กเอนด์แบบเนทีฟโดยค่าเริ่มต้น หากตั้งค่า ADB_LIBUSB ระบบจะกำหนดว่าจะใช้แบ็กเอนด์แบบเนทีฟหรือ libusb ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรสภาพแวดล้อม adb ได้ที่หน้าคู่มือ adb

แบ็กเอนด์ mDNS ของ adb

ADB สามารถใช้โปรโตคอล DNS แบบมัลติแคสต์เพื่อเชื่อมต่อเซิร์ฟเวอร์และอุปกรณ์โดยอัตโนมัติ เซิร์ฟเวอร์ ADB มาพร้อมกับแบ็กเอนด์ 2 รายการ ได้แก่ Bonjour (mdnsResponder ของ Apple) และ Openscreen

แบ็กเอนด์ Bonjour ต้องมีเดรัมที่กำลังทำงานอยู่บนเครื่องโฮสต์ ใน macOS เดรัมมาในตัวของ Apple จะทำงานอยู่เสมอ แต่ใน Windows และ Linux ผู้ใช้ต้องตรวจสอบว่าเดรัมมา mdnsd ทำงานอยู่ หากคำสั่ง adb mdns check แสดงข้อผิดพลาด แสดงว่า ADB อาจใช้แบ็กเอนด์ Bonjour แต่ไม่มีเดมอน Bonjour ทำงานอยู่

แบ็กเอนด์ของ Openscreen ไม่จำเป็นต้องมี Daemon ที่ทำงานอยู่บนเครื่อง การรองรับแบ็กเอนด์ Openscreen ใน macOS จะเริ่มตั้งแต่ ADB v35 รองรับ Windows และ Linux ตั้งแต่ ADB v34

โดยค่าเริ่มต้น ADB จะใช้แบ็กเอนด์ Bonjour คุณเปลี่ยนลักษณะการทํางานนี้ได้โดยใช้ตัวแปรสภาพแวดล้อม ADB_MDNS_OPENSCREEN (ตั้งค่าเป็น 1 หรือ 0) ดูรายละเอียดเพิ่มเติมได้ที่หน้าคู่มือ ADB

โหมด Burst ของ adb (เริ่มต้นด้วย ADB 36.0.0)

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

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

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