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 ในอุปกรณ์ อุปกรณ์และเวิร์กสเตชันจะเชื่อมต่อกันโดยอัตโนมัติเมื่ออยู่ในเครือข่ายเดียวกัน
-
เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป ในอุปกรณ์
-
แตะการแก้ไขข้อบกพร่องผ่าน Wi-Fiในอุปกรณ์
รูปที่ 1 ข้อความแจ้งการแก้ไขข้อบกพร่องแบบไร้สายในโทรศัพท์ Google Pixel -
อนุญาตให้แก้ไขข้อบกพร่องผ่าน Wi-Fi ในเครือข่าย โปรดทราบว่าการคลิกช่องทําเครื่องหมายอนุญาตเสมอในเครือข่ายนี้ จะทําให้เครือข่ายเป็นเครือข่ายการแก้ไขข้อบกพร่องผ่าน Wi-Fi ที่เชื่อถือได้ อุปกรณ์จะ อนุญาตให้แก้ไขข้อบกพร่องผ่าน Wi-Fi ในเครือข่ายนี้เสมอทันทีที่อุปกรณ์เชื่อมต่อกับเครือข่าย
-
ในอุปกรณ์ ให้เลือกจับคู่โดยใช้รหัสการจับคู่และ จดที่อยู่ IP, หมายเลขพอร์ต และรหัสการจับคู่ที่แสดงในอุปกรณ์
-
ในเวิร์กสเตชัน ให้เปิดหน้าต่างเทอร์มินัลแล้วไปที่
android_sdk/platform-tools -
ในเทอร์มินัลของเวิร์กสเตชัน ให้เรียกใช้
adb pair ipaddr:portใช้ที่อยู่ IP และหมายเลขพอร์ตจากด้านบน -
เมื่อได้รับข้อความแจ้ง ให้ป้อนรหัสการจับคู่ตามที่แสดงด้านล่าง
รูปที่ 3 มีข้อความระบุว่าจับคู่อุปกรณ์เรียบร้อยแล้ว -
หลังจากจับคู่อุปกรณ์แล้ว ให้ตรวจสอบว่าอุปกรณ์เชื่อมต่ออยู่ ตอนนี้คุณใช้อุปกรณ์แบบไร้สายได้แล้วเช่นเดียวกับการเชื่อมต่อ USB
หากต้องการเลิกจับคู่เวิร์กสเตชัน ให้ไปที่การแก้ไขข้อบกพร่องผ่าน Wi-Fiในอุปกรณ์ แตะชื่อเวิร์กสเตชันในส่วนอุปกรณ์ที่จับคู่ แล้วเลือกเลิกจำ หรือจะคลิกเพิกถอนการให้สิทธิ์การแก้ไขข้อบกพร่อง adb ในหน้าการตั้งค่าของอุปกรณ์เพื่อยกเลิกการจับคู่เวิร์กสเตชันและเวิร์กสเตชันอื่นๆ ทั้งหมดที่จับคู่ไว้ก่อนหน้านี้ก็ได้
-
หากต้องการเปิดและปิดการแก้ไขข้อบกพร่องผ่าน Wi-Fi อย่างรวดเร็ว คุณสามารถใช้การ์ดการตั้งค่าด่วนสำหรับนักพัฒนาแอปสำหรับการแก้ไขข้อบกพร่องผ่าน Wi-Fiได้ โดยจะอยู่ในตัวเลือกสำหรับนักพัฒนาแอป > การ์ดการตั้งค่าด่วนสำหรับนักพัฒนาแอป
รูปที่ 4 การตั้งค่าองค์ประกอบการตั้งค่าด่วนสำหรับนักพัฒนาแอป ช่วยให้คุณเปิดและปิดการแก้ไขข้อบกพร่องผ่าน Wi-Fi ได้อย่างรวดเร็ว
หมายเหตุ: ผู้ใช้ Android Studio สามารถจับคู่อุปกรณ์ด้วยคิวอาร์โค้ดได้โดยเลือกจับคู่อุปกรณ์ด้วยคิวอาร์โค้ด แล้วสแกน คิวอาร์โค้ดที่ได้จากกล่องโต้ตอบจับคู่อุปกรณ์ผ่าน Wi-Fi ใน Android Studio
แก้ไขปัญหาการเชื่อมต่อแบบไร้สาย
หากพบปัญหาในการเชื่อมต่อกับอุปกรณ์แบบไร้สาย ให้ลองทำตามขั้นตอนการแก้ปัญหาต่อไปนี้เพื่อแก้ไขปัญหา
ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์ของคุณมีคุณสมบัติตรงตามข้อกำหนดเบื้องต้นหรือไม่
ตรวจสอบว่าเวิร์กสเตชันและอุปกรณ์เป็นไปตามข้อกำหนดเบื้องต้นที่ระบุไว้ที่ตอนต้นของส่วนนี้
ตรวจสอบว่าการตั้งค่า adb ในเวิร์กสเตชันถูกต้องหรือไม่
หากต้องการยืนยันว่าการตั้งค่า ADB ในเวิร์กสเตชันถูกต้อง ให้เปิดเทอร์มินัลในเวิร์กสเตชันแล้วป้อน adb server-status ตรวจสอบว่าเอาต์พุตแสดงข้อมูลต่อไปนี้
-
version: "37.0.0"ขึ้นไป: หากไม่เป็นเช่นนั้น ให้ดาวน์โหลด เครื่องมือแพลตฟอร์ม SDK เวอร์ชันล่าสุด -
mdns_enabled: true: หากตั้งค่าเป็นfalseadb จะค้นหาอุปกรณ์ในเครือข่ายโดยอัตโนมัติไม่ได้ หากต้องการแก้ไขปัญหานี้ คุณต้องตั้งค่าตัวแปรสภาพแวดล้อมADB_MDNSเป็น1จากนั้น รีสตาร์ทเซิร์ฟเวอร์ adb โดยเรียกใช้adb kill-serverแล้วเรียกใช้adb start-server -
mdns_backend: LIBADBMDNS: หากไม่เป็นเช่นนั้น adb จะใช้ไลบรารีที่ล้าสมัยเพื่อค้นหาอุปกรณ์ในเครือข่ายโดยอัตโนมัติ หากต้องการแก้ไขปัญหานี้ คุณต้องตั้งค่าตัวแปรสภาพแวดล้อมADB_MDNS_OPENSCREENเป็น0จากนั้น รีสตาร์ทเซิร์ฟเวอร์ adb โดยเรียกใช้adb kill-serverแล้วเรียกใช้adb start-server
ตรวจสอบว่าเครือข่ายรองรับ mDNS หรือไม่
adb ใช้ mDNS เพื่อค้นหาและเชื่อมต่อกับอุปกรณ์ที่จับคู่โดยอัตโนมัติ หากต้องการตรวจสอบว่าเครือข่ายรองรับ mDNS หรือไม่ ให้ทำดังนี้
-
เปิดใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi ในอุปกรณ์ตามที่อธิบายไว้ในส่วนเชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi
-
เปิดเทอร์มินัลในเวิร์กสเตชัน แล้วป้อน
adb mdns track-services --proto-text -
ตรวจสอบว่าเอาต์พุตไม่ว่างเปล่าและมีบริการ TLS พร้อมที่อยู่ IP และ หมายเลขพอร์ตของอุปกรณ์ หากเอาต์พุตว่างเปล่า แสดงว่าเครือข่ายไม่รองรับ mDNS ตัวอย่างเอาต์พุต
tls { service { instance: "adb-35121FDJH000R8-xyMD0H" service: "_adb-tls-connect._tcp" ipv4: "192.168.84.23" ipv6: "fe80:0:0:0:fc7a:299d:8d38:6c1c" port: 37895 product_model: "Pixel 8" build_version_sdk_full: "37.0" given_name: "sherifeid Pixel" serial: "35121FDJH000R8" mdns_service_version: "2.0" hostname: "Android_CXUKYJY1.local" } }
ตรวจสอบว่าอุปกรณ์รองรับ ADB Wi-Fi 2.0 หรือไม่
หมายเหตุ: ADB Wi-Fi 2.0 รองรับใน Android 17 ขึ้นไป
หากต้องการตรวจสอบว่าอุปกรณ์รองรับ ADB Wi-Fi 2.0 หรือไม่ ให้ทำดังนี้
-
เปิดใช้การแก้ไขข้อบกพร่องผ่าน Wi-Fi ในอุปกรณ์ตามที่อธิบายไว้ในส่วนเชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi
-
เปิดเทอร์มินัลในเวิร์กสเตชัน แล้วป้อน
adb mdns track-services --proto-text -
ตรวจสอบว่าเอาต์พุตมี
mdns_service_version: "2.0"ขึ้นไป หากไม่เป็นเช่นนั้น แสดงว่าอุปกรณ์ของคุณไม่ได้ใช้ Android 17 ขึ้นไปและไม่รองรับ ADB Wi-Fi 2.0 หากต้องการอัปเดตเป็น Android 17 ขึ้นไป ให้ตรวจสอบว่าอุปกรณ์มีการอัปเดตระบบที่รอดำเนินการอยู่หรือไม่ ตรวจสอบและอัปเดต เวอร์ชัน Android
รายงานปัญหาใหม่
หากยังพบปัญหาในการเชื่อมต่อกับอุปกรณ์แบบไร้สาย คุณสามารถรายงานปัญหาใหม่ โปรดตรวจสอบว่าคุณได้ระบุข้อมูลต่อไปนี้ในรายงาน
- บันทึกจากอุปกรณ์: จำลองปัญหาและแนบบันทึกของอุปกรณ์
- บันทึกจาก adb ในเวิร์กสเตชัน
- ตั้งค่าตัวแปรสภาพแวดล้อม
ADB_TRACE=all - รีสตาร์ทเซิร์ฟเวอร์ adb โดยเรียกใช้
adb kill-serverแล้วเรียกใช้adb start-server - จำลองการเกิดปัญหา
- ค้นหาไฟล์บันทึก: เรียกใช้
adb server-statusแล้วแนบไฟล์บันทึกที่อ้างอิงในเอาต์พุตlog_absolute_path
- ตั้งค่าตัวแปรสภาพแวดล้อม
เชื่อมต่อแบบไร้สายกับอุปกรณ์หลังจากเชื่อมต่อ USB ครั้งแรก (ตัวเลือกเดียวที่ใช้ได้ใน Android 10 และต่ำกว่า)
หมายเหตุ: เวิร์กโฟลว์นี้ใช้ได้กับ Android 11 (และสูงกว่า) ด้วย โดยมีข้อควรระวังคือต้องมีการเชื่อมต่อ *ครั้งแรก* ผ่าน USB จริงด้วย
หมายเหตุ: วิธีการต่อไปนี้ใช้ไม่ได้กับอุปกรณ์ Wear ที่ใช้ Android 10 (ระดับ API 29) หรือต่ำกว่า ดูข้อมูลเพิ่มเติมได้ที่คู่มือเกี่ยวกับ การแก้ไขข้อบกพร่องของแอป Wear OS
adb มักจะสื่อสารกับอุปกรณ์ผ่าน USB แต่คุณก็ใช้ adb ผ่าน Wi-Fi ได้เช่นกัน หากต้องการเชื่อมต่ออุปกรณ์ที่ใช้ Android 10 (ระดับ API 29) หรือต่ำกว่า
ให้ทำตามขั้นตอนเริ่มต้นต่อไปนี้ผ่าน USB
-
เชื่อมต่ออุปกรณ์ Android และ
adbคอมพิวเตอร์โฮสต์ กับเครือข่าย Wi-Fi เดียวกัน - เชื่อมต่ออุปกรณ์กับคอมพิวเตอร์โฮสต์ด้วยสาย USB
-
ตั้งค่าอุปกรณ์เป้าหมายให้รอรับการเชื่อมต่อ TCP/IP ในพอร์ต 5555 โดยทำดังนี้
adb tcpip 5555
- ถอดสาย USB ออกจากอุปกรณ์เป้าหมาย
- ค้นหาที่อยู่ IP ของอุปกรณ์ Android เช่น ในอุปกรณ์ Nexus คุณจะดูที่อยู่ IP ได้ที่การตั้งค่า > เกี่ยวกับแท็บเล็ต (หรือเกี่ยวกับโทรศัพท์) > สถานะ > ที่อยู่ IP
-
เชื่อมต่อกับอุปกรณ์โดยใช้ที่อยู่ IP
adb connect device_ip_address:5555
-
ตรวจสอบว่าคอมพิวเตอร์โฮสต์เชื่อมต่อกับอุปกรณ์เป้าหมายแล้ว
$ adb devices List of devices attached device_ip_address:5555 device
หมายเหตุ: โปรดทราบว่าจุดเข้าใช้งานบางจุดอาจไม่เหมาะสม คุณอาจต้องใช้จุดเข้าใช้งานที่มีการกำหนดค่าไฟร์วอลล์อย่างถูกต้องเพื่อรองรับ adb
ตอนนี้อุปกรณ์เชื่อมต่อกับ adb แล้ว
หากadbการเชื่อมต่อกับอุปกรณ์ขาดหายไป ให้ทำดังนี้
- ตรวจสอบว่าโฮสต์ยังเชื่อมต่อกับเครือข่าย Wi-Fi เดียวกันกับอุปกรณ์ Android
-
เชื่อมต่ออีกครั้งโดยทำตามขั้นตอน
adb connectอีกครั้ง -
หากไม่ได้ผล ให้รีเซ็ต
adbโฮสต์โดยทำดังนี้adb kill-server
จากนั้นให้เริ่มใหม่ตั้งแต่ต้น
ค้นหาอุปกรณ์
ก่อนที่จะออกคำสั่ง adb คุณควรทราบว่าอินสแตนซ์ของอุปกรณ์ใดเชื่อมต่อกับเซิร์ฟเวอร์ adb สร้างรายการอุปกรณ์ที่เชื่อมต่อโดยใช้คำสั่ง
devices
adb devices -l
ในการตอบสนอง adb จะพิมพ์ข้อมูลสถานะนี้สำหรับอุปกรณ์แต่ละเครื่อง
- หมายเลขซีเรียล:
adbสร้างสตริงเพื่อระบุอุปกรณ์โดยไม่ซ้ำกัน ตามหมายเลขพอร์ต ตัวอย่างหมายเลขซีเรียลemulator-5554 - สถานะ: สถานะการเชื่อมต่อของอุปกรณ์อาจเป็นค่าใดค่าหนึ่งต่อไปนี้
offline: อุปกรณ์ไม่ได้เชื่อมต่อกับadbหรือไม่ตอบสนองdevice: อุปกรณ์เชื่อมต่อกับเซิร์ฟเวอร์adbโปรดทราบว่า สถานะนี้ไม่ได้หมายความว่าระบบ Android บูตและทำงานได้อย่างเต็มที่ เนื่องจาก อุปกรณ์เชื่อมต่อกับadbขณะที่ระบบยังคงบูตอยู่ หลังจากบูตขึ้นมาแล้ว สถานะนี้คือสถานะการทำงานปกติ ของอุปกรณ์no device: ไม่มีอุปกรณ์ที่เชื่อมต่ออยู่
- คำอธิบาย: หากคุณใส่ตัวเลือก
-lคำสั่งdevicesจะบอกคุณว่าอุปกรณ์คืออะไร ข้อมูลนี้มีประโยชน์เมื่อคุณมีอุปกรณ์หลายเครื่อง ที่เชื่อมต่ออยู่เพื่อให้คุณแยกแยะอุปกรณ์เหล่านั้นได้
ตัวอย่างต่อไปนี้แสดงคำสั่ง devices และเอาต์พุต มีอุปกรณ์ 3 เครื่อง
ที่กำลังทำงานอยู่ 2 บรรทัดแรกในรายการคือโปรแกรมจำลอง และบรรทัดที่ 3 คืออุปกรณ์ฮาร์ดแวร์
ที่เชื่อมต่อกับคอมพิวเตอร์
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
โปรแกรมจำลองไม่อยู่ในรายการ
คำสั่ง adb devices มีลำดับคำสั่งในกรณีที่พบได้ยากซึ่งทำให้โปรแกรมจำลองที่กำลังทำงานไม่ปรากฏในเอาต์พุต adb devices แม้ว่าโปรแกรมจำลองจะปรากฏบนเดสก์ท็อปก็ตาม ซึ่งจะเกิดขึ้นเมื่อเงื่อนไขต่อไปนี้ทั้งหมดเป็นจริง
- เซิร์ฟเวอร์
adbไม่ทำงาน - คุณใช้คำสั่ง
emulatorกับตัวเลือก-portหรือ-portsโดยมีค่าพอร์ตเป็นเลขคี่ระหว่าง 5554 ถึง 5584 - พอร์ตหมายเลขคี่ที่คุณเลือกไม่ว่าง ดังนั้นจึงสามารถเชื่อมต่อพอร์ตได้ที่ หมายเลขพอร์ตที่ระบุ หรือหากพอร์ตว่างอยู่ โปรแกรมจำลองจะเปลี่ยนไปใช้ พอร์ตอื่นที่ตรงตามข้อกำหนดในข้อ 2
- คุณจะเริ่มเซิร์ฟเวอร์
adbหลังจากเริ่มโปรแกรมจำลอง
วิธีหนึ่งในการหลีกเลี่ยงสถานการณ์นี้คือการปล่อยให้โปรแกรมจำลองเลือกพอร์ตของตัวเอง และไม่เรียกใช้โปรแกรมจำลองพร้อมกันมากกว่า 16 รายการ
อีกวิธีหนึ่งคือการเริ่มเซิร์ฟเวอร์ adb เสมอก่อนที่จะใช้คำสั่ง emulator ดังที่อธิบายไว้ในตัวอย่างต่อไปนี้
ตัวอย่างที่ 1: ในลำดับคำสั่งต่อไปนี้ คำสั่ง adb devices จะเริ่มเซิร์ฟเวอร์ adb แต่รายการอุปกรณ์จะไม่ปรากฏ
หยุดเซิร์ฟเวอร์ adb แล้วป้อนคำสั่งต่อไปนี้ตามลำดับที่แสดง สำหรับชื่อ AVD
ให้ระบุชื่อ AVD ที่ถูกต้องจากระบบ หากต้องการดูรายการชื่อ AVD ให้พิมพ์
emulator -list-avds คำสั่ง emulator อยู่ในไดเรกทอรี
android_sdk/tools
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
ตัวอย่างที่ 2: ในลำดับคำสั่งต่อไปนี้ adb devices จะแสดง
รายการอุปกรณ์เนื่องจากเริ่มเซิร์ฟเวอร์ adb ก่อน
หากต้องการดูโปรแกรมจำลองในเอาต์พุต adb devices ให้หยุดเซิร์ฟเวอร์ adb แล้ว
เริ่มอีกครั้งหลังจากใช้คำสั่ง emulator และก่อนใช้คำสั่ง
adb devices ดังนี้
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกบรรทัดคำสั่งของโปรแกรมจำลองได้ที่ ตัวเลือกการเริ่มต้น บรรทัดคำสั่ง
ส่งคำสั่งไปยังอุปกรณ์ที่เฉพาะเจาะจง
หากมีอุปกรณ์หลายเครื่องที่ทำงานอยู่ คุณต้องระบุอุปกรณ์เป้าหมาย
เมื่อออกคำสั่ง adb
หากต้องการระบุเป้าหมาย ให้ทำตามขั้นตอนต่อไปนี้
- ใช้คำสั่ง
devicesเพื่อรับหมายเลขซีเรียลของเป้าหมาย - เมื่อได้หมายเลขซีเรียลแล้ว ให้ใช้ตัวเลือก
-sกับคำสั่งadbเพื่อระบุหมายเลขซีเรียล- หากจะออกคำสั่ง
adbจำนวนมาก คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม$ANDROID_SERIALให้มีหมายเลขซีเรียลแทนได้ - หากคุณใช้ทั้ง
-sและ$ANDROID_SERIAL-sจะลบล้าง$ANDROID_SERIAL
- หากจะออกคำสั่ง
ในตัวอย่างต่อไปนี้ ระบบจะดึงรายการอุปกรณ์ที่เชื่อมต่อ จากนั้นจะใช้หมายเลขซีเรียล
ของอุปกรณ์เครื่องใดเครื่องหนึ่งเพื่อติดตั้ง helloWorld.apk ในอุปกรณ์นั้น
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
หมายเหตุ: หากคุณออกคำสั่งโดยไม่ได้ระบุอุปกรณ์เป้าหมาย
เมื่อมีอุปกรณ์หลายเครื่อง adb จะแสดงข้อผิดพลาด
"adb: more than one device/emulator"
หากมีอุปกรณ์หลายเครื่องที่พร้อมใช้งาน แต่มีเพียงเครื่องเดียวที่เป็นโปรแกรมจำลอง
ให้ใช้ตัวเลือก -e เพื่อส่งคำสั่งไปยังโปรแกรมจำลอง หากมีอุปกรณ์หลายเครื่องแต่มีอุปกรณ์ฮาร์ดแวร์ที่เชื่อมต่อเพียงเครื่องเดียว ให้ใช้ตัวเลือก -d เพื่อส่งคำสั่งไปยังอุปกรณ์ฮาร์ดแวร์
ติดตั้งแอป
คุณใช้ adb เพื่อติดตั้ง APK ในโปรแกรมจำลองหรืออุปกรณ์ที่เชื่อมต่อได้
ด้วยคำสั่ง install
adb install path_to_apk
คุณต้องใช้ตัวเลือก -t กับคำสั่ง install
เมื่อติดตั้ง APK สำหรับทดสอบ ดูข้อมูลเพิ่มเติมได้ที่
-t
หากต้องการติดตั้ง APK หลายรายการ ให้ใช้ install-multiple ซึ่งจะมีประโยชน์ในกรณีที่คุณดาวน์โหลด APK ทั้งหมดสำหรับอุปกรณ์ที่เฉพาะเจาะจงของแอปจาก Play Console และต้องการติดตั้งในโปรแกรมจำลองหรืออุปกรณ์จริง
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างไฟล์ APK ที่คุณติดตั้งในอินสแตนซ์โปรแกรมจำลอง/อุปกรณ์ได้ที่สร้างและเรียกใช้แอป
หมายเหตุ: หากใช้ Android Studio คุณไม่จำเป็นต้องใช้
adb โดยตรงเพื่อติดตั้งแอปในโปรแกรมจำลองหรืออุปกรณ์ แต่ Android Studio
จะจัดการการแพ็กเกจและการติดตั้งแอปให้คุณแทน
ตั้งค่าการส่งต่อพอร์ต
ใช้คำสั่ง forward เพื่อตั้งค่าการส่งต่อพอร์ตที่กำหนดเอง ซึ่งจะ
ส่งต่อคำขอในพอร์ตโฮสต์ที่เฉพาะเจาะจงไปยังพอร์ตอื่นในอุปกรณ์
ตัวอย่างต่อไปนี้จะตั้งค่าการส่งต่อพอร์ตโฮสต์ 6100 ไปยังพอร์ตอุปกรณ์ 7100
adb forward tcp:6100 tcp:7100
ตัวอย่างต่อไปนี้จะตั้งค่าการส่งต่อพอร์ตโฮสต์ 6100 ไปยัง local:logd
adb forward tcp:6100 local:logd
ซึ่งอาจมีประโยชน์หากคุณพยายามพิจารณาว่ามีการส่งอะไรไปยังพอร์ตที่กำหนดในอุปกรณ์ ระบบจะเขียนข้อมูลที่ได้รับทั้งหมดไปยัง Daemon การบันทึกของระบบและแสดง ในบันทึกของอุปกรณ์
คัดลอกไฟล์ไปยังและจากอุปกรณ์
ใช้คำสั่ง pull และ push เพื่อคัดลอกไฟล์ไปยังและจากอุปกรณ์
คำสั่ง pull และ push
ช่วยให้คุณคัดลอกไดเรกทอรีและไฟล์ใดก็ได้ไปยังตำแหน่งใดก็ได้ในอุปกรณ์ ซึ่งแตกต่างจากคำสั่ง install
ซึ่งจะคัดลอกไฟล์ APK ไปยังตำแหน่งที่เฉพาะเจาะจงเท่านั้น
หากต้องการคัดลอกไฟล์หรือไดเรกทอรีและไดเรกทอรีย่อยจากอุปกรณ์ ให้ทำดังนี้
adb pull remote local
หากต้องการคัดลอกไฟล์หรือไดเรกทอรีและไดเรกทอรีย่อยไปยังอุปกรณ์ ให้ทำดังนี้
adb push local remote
แทนที่ local และ remote ด้วยเส้นทางไปยัง
ไฟล์/ไดเรกทอรีเป้าหมายในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์ (ในเครื่อง) และใน
อุปกรณ์ (ระยะไกล) เช่น
adb push myfile.txt /sdcard/myfile.txt
หยุดเซิร์ฟเวอร์ adb
ในบางกรณี คุณอาจต้องสิ้นสุดadbกระบวนการของเซิร์ฟเวอร์แล้วรีสตาร์ท
เพื่อแก้ไขปัญหา ตัวอย่างเช่น กรณีที่adbไม่ตอบสนองต่อคำสั่ง
หากต้องการหยุดเซิร์ฟเวอร์ adb ให้ใช้คำสั่ง adb kill-server
จากนั้นคุณจะรีสตาร์ทเซิร์ฟเวอร์ได้โดยใช้คำสั่ง adb อื่นๆ
ออกคำสั่ง adb
ออกadbคำสั่งจากบรรทัดคำสั่งในคอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์หรือจากสคริปต์โดยใช้
รายการต่อไปนี้
adb [-d | -e | -s serial_number] command
หากมีโปรแกรมจำลองที่ทำงานอยู่เพียงโปรแกรมเดียวหรือมีอุปกรณ์ที่เชื่อมต่อเพียงเครื่องเดียว ระบบจะส่งคำสั่ง adb ไปยังอุปกรณ์นั้นโดยค่าเริ่มต้น หากมีโปรแกรมจำลองหลายโปรแกรมที่ทำงานอยู่และ/หรือมีอุปกรณ์หลายเครื่องที่เชื่อมต่ออยู่ คุณจะต้องใช้ตัวเลือก -d, -e หรือ -s เพื่อระบุอุปกรณ์เป้าหมายที่ควรส่งคำสั่งไป
คุณดูรายการคำสั่ง adb ทั้งหมดที่รองรับได้โดยละเอียดโดยใช้คำสั่งต่อไปนี้
คำสั่ง
adb --help
ออกคำสั่ง Shell
คุณใช้คำสั่ง shell เพื่อออกคำสั่งไปยังอุปกรณ์ผ่าน adb หรือเพื่อเริ่มเชลล์แบบอินเทอร์แอกทีฟได้ หากต้องการออกคำสั่งเดียว ให้ใช้คำสั่ง shell ดังนี้
adb [-d |-e | -s serial_number] shell shell_command
หากต้องการเริ่มเชลล์แบบอินเทอร์แอกทีฟในอุปกรณ์ ให้ใช้คำสั่ง shell ดังนี้
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 ตัวเลือกมีดังนี้
|
startservice [options] intent
|
เริ่ม Service ที่ระบุโดย
intent ดูข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent ตัวเลือกมีดังนี้
|
force-stop package
|
บังคับหยุดทุกอย่างที่เชื่อมโยงกับ package
|
kill [options] package
|
สิ้นสุดกระบวนการทั้งหมดที่เชื่อมโยงกับ package คำสั่งนี้จะปิดเฉพาะ
กระบวนการที่ปิดได้อย่างปลอดภัยและจะไม่ส่งผลต่อประสบการณ์ของผู้ใช้
ตัวเลือกมีดังนี้
|
kill-all
|
ปิดกระบวนการเบื้องหลังทั้งหมด |
broadcast [options] intent
|
ออก Intent การออกอากาศ ดูข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent ตัวเลือกมีดังนี้
|
instrument [options] component
|
เริ่มตรวจสอบด้วยอินสแตนซ์ Instrumentation
โดยปกติแล้ว component
เป้าหมายคือฟอร์ม test_package/runner_class ตัวเลือกมีดังนี้
|
profile start process file
|
เริ่มเครื่องมือสร้างโปรไฟล์ใน process เขียนผลลัพธ์ไปยัง file
|
profile stop process
|
หยุดโปรไฟล์ใน process
|
dumpheap [options] process file
|
ดัมพ์ฮีปของ process เขียนถึง fileตัวเลือกมีดังนี้
|
dumpbitmaps [options] [-p process]
|
ส่งออกข้อมูลบิตแมปจาก process
(ระดับ API 36 ขึ้นไป)
ตัวเลือกมีดังนี้
process ระบบจะทิ้งบิตแมปจากกระบวนการทั้งหมด
|
set-debug-app [options] package
|
ตั้งค่าแอป package เพื่อแก้ไขข้อบกพร่อง ตัวเลือกมีดังนี้
|
clear-debug-app
|
ล้างแพ็กเกจที่ตั้งค่าไว้ก่อนหน้าสำหรับการแก้ไขข้อบกพร่องด้วย set-debug-app
|
monitor [options]
|
เริ่มตรวจสอบข้อขัดข้องหรือ ANR ตัวเลือกมีดังนี้
|
screen-compat {on | off} package
|
ควบคุมโหมดความเข้ากันได้ของหน้าจอของ package
|
display-size [reset | widthxheight]
|
ลบล้างขนาดการแสดงผลของอุปกรณ์
คำสั่งนี้มีประโยชน์ในการทดสอบแอปในขนาดหน้าจอต่างๆ โดยการจำลองความละเอียดหน้าจอขนาดเล็กโดยใช้อุปกรณ์ที่มีหน้าจอขนาดใหญ่ และในทางกลับกัน
ตัวอย่าง: |
display-density dpi
|
ลบล้างความหนาแน่นของจอแสดงผลของอุปกรณ์
คำสั่งนี้มีประโยชน์ในการทดสอบแอปในความหนาแน่นของหน้าจอต่างๆ โดยการจำลองสภาพแวดล้อมของหน้าจอความหนาแน่นสูงโดยใช้หน้าจอความหนาแน่นต่ำ และในทางกลับกัน ตัวอย่าง: |
to-uri intent
|
พิมพ์ข้อกำหนดของ Intent ที่ระบุเป็น URI |
to-intent-uri intent
|
พิมพ์ข้อกำหนดของ Intent ที่ระบุเป็น intent: URI |
ข้อกำหนดสำหรับอาร์กิวเมนต์ของ Intent
สำหรับคำสั่ง Activity Manager ที่ใช้อาร์กิวเมนต์ intent คุณสามารถ
ระบุ Intent ด้วยตัวเลือกต่อไปนี้
เรียกใช้เครื่องมือจัดการแพ็กเกจ (pm)
ภายใน adb Shell คุณสามารถออกคำสั่งด้วยเครื่องมือจัดการแพ็กเกจ (pm) เพื่อ
ดำเนินการและค้นหาแพ็กเกจแอปที่ติดตั้งในอุปกรณ์ได้
ขณะอยู่ในเชลล์ ไวยากรณ์ของ pm คือ
pm command
นอกจากนี้ คุณยังออกคำสั่งเครื่องมือจัดการแพ็กเกจได้โดยตรงจาก adb
โดยไม่ต้องเข้า Shell ระยะไกล เช่น
adb shell pm uninstall com.example.MyApp
ตารางที่ 2 คำสั่งตัวจัดการแพ็กเกจที่ใช้ได้
| คำสั่ง | คำอธิบาย |
|---|---|
list packages [options] filter
|
พิมพ์แพ็กเกจทั้งหมด หรือจะพิมพ์เฉพาะ
แพ็กเกจที่มีชื่อแพ็กเกจซึ่งมีข้อความใน filter ก็ได้ ตัวเลือก:
|
list permission-groups
|
พิมพ์กลุ่มสิทธิ์ที่ทราบทั้งหมด |
list permissions [options] group
|
พิมพ์สิทธิ์ที่ทราบทั้งหมด หรือจะพิมพ์เฉพาะสิทธิ์ใน group ก็ได้ ตัวเลือก:
|
list instrumentation [options]
|
แสดงรายการแพ็กเกจทดสอบทั้งหมด ตัวเลือก:
|
list features
|
พิมพ์ฟีเจอร์ทั้งหมดของระบบ |
list libraries
|
พิมพ์ไลบรารีทั้งหมดที่อุปกรณ์ปัจจุบันรองรับ |
list users
|
พิมพ์ผู้ใช้ทั้งหมดในระบบ |
path package
|
พิมพ์เส้นทางไปยัง APK ของ package ที่ระบุ
|
install [options] path
|
ติดตั้งแพ็กเกจที่ระบุโดย path ลงในระบบ ตัวเลือก:
|
uninstall [options] package
|
นำแพ็กเกจออกจากระบบ ตัวเลือก:
|
clear package
|
ลบข้อมูลทั้งหมดที่เชื่อมโยงกับแพ็กเกจ |
enable package_or_component
|
เปิดใช้แพ็กเกจหรือคอมโพเนนต์ที่ระบุ (เขียนเป็น "แพ็กเกจ/คลาส") |
disable package_or_component
|
ปิดใช้แพ็กเกจหรือคอมโพเนนต์ที่ระบุ (เขียนเป็น "แพ็กเกจ/คลาส") |
disable-user [options] package_or_component
|
ตัวเลือก:
|
grant package_name permission
|
ให้สิทธิ์แก่แอป ในอุปกรณ์ที่ใช้ Android 6.0 (ระดับ API 23) ขึ้นไป สิทธิ์อาจเป็นสิทธิ์ใดก็ได้ที่ประกาศไว้ในไฟล์ Manifest ของแอป ในอุปกรณ์ที่ใช้ Android 5.1 (ระดับ API 22) และต่ำกว่า ต้องเป็นสิทธิ์ที่ไม่บังคับซึ่งกำหนดโดยแอป |
revoke package_name permission
|
เพิกถอนสิทธิ์จากแอป ในอุปกรณ์ที่ใช้ Android 6.0 (ระดับ API 23) ขึ้นไป สิทธิ์อาจเป็นสิทธิ์ใดก็ได้ที่ประกาศไว้ในไฟล์ Manifest ของแอป ในอุปกรณ์ที่ใช้ Android 5.1 (ระดับ API 22) และต่ำกว่า ต้องเป็นสิทธิ์ที่ไม่บังคับซึ่งกำหนดโดยแอป |
set-install-location location
|
เปลี่ยนตำแหน่งการติดตั้งเริ่มต้น ค่าสถานที่ตั้ง
หมายเหตุ: ฟีเจอร์นี้มีไว้สำหรับการแก้ไขข้อบกพร่องเท่านั้น การใช้ฟีเจอร์นี้อาจทำให้ แอปทำงานไม่ถูกต้องและเกิดลักษณะการทำงานอื่นๆ ที่ไม่พึงประสงค์ |
get-install-location
|
แสดงผลตำแหน่งการติดตั้งปัจจุบัน ค่าที่แสดงผล
|
set-permission-enforced permission [true | false]
|
ระบุว่าควรบังคับใช้สิทธิ์ที่ระบุหรือไม่ |
trim-caches desired_free_space
|
ตัดไฟล์แคชเพื่อให้มีพื้นที่ว่างตามที่ระบุ |
create-user user_name
|
สร้างผู้ใช้ใหม่ด้วย user_name,
พิมพ์ตัวระบุผู้ใช้ใหม่ของผู้ใช้
|
remove-user user_id
|
นำผู้ใช้ที่มี user_id ที่ระบุออก
โดยลบข้อมูลทั้งหมดที่เชื่อมโยงกับผู้ใช้รายนั้น
|
get-max-users
|
พิมพ์จำนวนผู้ใช้สูงสุดที่อุปกรณ์รองรับ |
get-app-links [options] [package]
|
พิมพ์สถานะการยืนยันโดเมนสำหรับ package ที่ระบุ หรือสำหรับแพ็กเกจทั้งหมดหากไม่ได้ระบุรหัสสถานะไว้ รหัสสถานะมีคำจำกัดความดังนี้
ตัวเลือกมีดังนี้
|
reset-app-links [options] [package]
|
รีเซ็ตสถานะการยืนยันโดเมนสำหรับแพ็กเกจที่ระบุ หรือสำหรับแพ็กเกจทั้งหมดหากไม่ได้ระบุ
ตัวเลือกมีดังนี้
|
verify-app-links [--re-verify] [package]
|
ออกอากาศคำขอยืนยันสำหรับ package ที่ระบุ หรือสำหรับแพ็กเกจทั้งหมด หากไม่ได้ระบุ ส่งเฉพาะในกรณีที่แพ็กเกจไม่ได้บันทึกการตอบกลับไว้ก่อนหน้านี้
|
set-app-links [--package package] state domains
|
ตั้งค่าสถานะของโดเมนสำหรับแพ็กเกจด้วยตนเอง โดเมนต้องได้รับการประกาศโดยแพ็กเกจเป็น autoVerify เพื่อให้การทำงานนี้สำเร็จ คำสั่งนี้ จะไม่รายงานว่าโดเมนที่ใช้ไม่ได้ล้มเหลว
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
ตั้งค่าสถานะการเลือกผู้ใช้โฮสต์สำหรับแพ็กเกจด้วยตนเอง แพ็กเกจต้องประกาศโดเมน เพื่อให้ทำงานได้ คำสั่งนี้จะไม่ รายงานความล้มเหลวสำหรับโดเมนที่ใช้ไม่ได้
|
set-app-links-allowed --user user_id [--package package] allowed
|
สลับการตั้งค่าการจัดการลิงก์ที่ยืนยันอัตโนมัติสำหรับแพ็กเกจ
|
get-app-link-owners --user user_id [--package package] domains
|
พิมพ์เจ้าของสำหรับโดเมนที่เฉพาะเจาะจงสำหรับผู้ใช้ที่กำหนดตามลำดับความสำคัญจากต่ำไปสูง
|
โทรหาผู้จัดการนโยบายอุปกรณ์ (dpm)
ออกคำสั่งไปยังเครื่องมือ Device Policy Manager (dpm) เพื่อช่วยคุณพัฒนาและทดสอบแอปการจัดการอุปกรณ์ ใช้เครื่องมือเพื่อควบคุมแอปผู้ดูแลระบบที่ใช้งานอยู่
หรือเปลี่ยนข้อมูลสถานะของนโยบายในอุปกรณ์
ขณะอยู่ในเชลล์ dpmไวยากรณ์จะเป็นดังนี้
dpm command
นอกจากนี้ คุณยังออกคำสั่ง Device Policy Manager ได้โดยตรงจาก adb
โดยไม่ต้องเข้าสู่เชลล์ระยะไกล
adb shell dpm command
ตารางที่ 3 คำสั่งตัวจัดการนโยบายด้านอุปกรณ์ที่ใช้ได้
| คำสั่ง | คำอธิบาย |
|---|---|
set-active-admin [options] component
|
ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่
ตัวเลือกมีดังนี้
|
set-profile-owner [options] component
|
ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่และตั้งค่าแพ็กเกจเป็นเจ้าของโปรไฟล์สำหรับผู้ใช้ที่มีอยู่
ตัวเลือกมีดังนี้
|
set-device-owner [options] component
|
ตั้งค่า component เป็นผู้ดูแลระบบที่ใช้งานอยู่และตั้งค่าแพ็กเกจเป็นเจ้าของอุปกรณ์
ตัวเลือกมีดังนี้
|
remove-active-admin [options] component
|
ปิดใช้ผู้ดูแลระบบที่ใช้งานอยู่ แอปต้องประกาศ
android:testOnly
ในไฟล์ Manifest คำสั่งนี้จะนำเจ้าของอุปกรณ์และโปรไฟล์ออกด้วย
ตัวเลือกมีดังนี้
|
clear-freeze-period-record
|
ล้างบันทึกช่วงหยุดการอัปเดตที่ตั้งไว้ก่อนหน้านี้สำหรับการอัปเดต OTA ของระบบในอุปกรณ์ ซึ่งจะเป็นประโยชน์
ในการหลีกเลี่ยงข้อจำกัดในการตั้งเวลาอุปกรณ์เมื่อพัฒนาแอปที่จัดการช่วงหยุดทำงาน ดูจัดการการอัปเดตระบบ
รองรับในอุปกรณ์ที่ใช้ Android 9.0 (ระดับ API 28) ขึ้นไป |
force-network-logs
|
บังคับให้ระบบเตรียมบันทึกเครือข่ายที่มีอยู่เพื่อให้ DPC เรียกข้อมูลได้ หากมีบันทึกการเชื่อมต่อหรือ DNS ที่พร้อมใช้งาน DPC จะได้รับการเรียกกลับonNetworkLogsAvailable()
ดูการบันทึกกิจกรรมเครือข่าย
คำสั่งนี้มีการจำกัดอัตราการใช้งาน โดยใช้ได้ในอุปกรณ์ที่ใช้ Android 9.0 (ระดับ API 28) ขึ้นไป |
force-security-logs
|
บังคับให้ระบบแสดงบันทึกความปลอดภัยที่มีอยู่ต่อ DPC หากมีบันทึก
ที่พร้อมใช้งาน DPC จะได้รับการเรียกกลับ
onSecurityLogsAvailable()
ดูบันทึกกิจกรรมในอุปกรณ์ขององค์กร
คำสั่งนี้มีการจำกัดอัตราการใช้งาน โดยใช้ได้ในอุปกรณ์ที่ใช้ Android 9.0 (ระดับ API 28) ขึ้นไป |
ถ่ายภาพหน้าจอ
คำสั่ง screencap เป็นยูทิลิตีเชลล์สำหรับถ่ายภาพหน้าจอของจอแสดงผล
อุปกรณ์
ขณะอยู่ในเชลล์ ไวยากรณ์ของ screencap คือ
screencap filename
หากต้องการใช้ screencap จากบรรทัดคำสั่ง ให้ป้อนข้อมูลต่อไปนี้
adb shell screencap /sdcard/screen.png
ตัวอย่างเซสชันภาพหน้าจอโดยใช้เชลล์ adb เพื่อจับภาพหน้าจอ
และคำสั่ง pull เพื่อดาวน์โหลดไฟล์จากอุปกรณ์มีดังนี้
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
หรือหากไม่ระบุชื่อไฟล์ screencap จะเขียนรูปภาพไปยังเอาต์พุตมาตรฐาน เมื่อใช้ร่วมกับ-pเพื่อระบุรูปแบบ PNG คุณจะสตรีมภาพหน้าจอของอุปกรณ์ไปยังไฟล์ในเครื่องได้โดยตรง
ต่อไปนี้คือตัวอย่างการจับภาพหน้าจอและบันทึกไว้ในเครื่องด้วยคำสั่งเดียว
# use 'exec-out' instead of 'shell' to get raw data $ adb exec-out screencap -p > screen.png
บันทึกวิดีโอ
คำสั่ง screenrecord เป็นยูทิลิตีเชลล์สำหรับบันทึกการแสดงผลของอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 19) ขึ้นไป ยูทิลิตีจะบันทึกกิจกรรมบนหน้าจอลงในไฟล์ MPEG-4 คุณสามารถใช้ไฟล์นี้เพื่อสร้างวิดีโอโปรโมตหรือวิดีโอฝึกอบรม หรือใช้สำหรับการแก้ไขข้อบกพร่องและการทดสอบได้
ในเชลล์ ให้ใช้ไวยากรณ์ต่อไปนี้
screenrecord [options] filename
หากต้องการใช้ screenrecord จากบรรทัดคำสั่ง ให้ป้อนข้อมูลต่อไปนี้
adb shell screenrecord /sdcard/demo.mp4
หยุดการบันทึกหน้าจอโดยกด Control+C ไม่เช่นนั้น การบันทึกจะหยุดโดยอัตโนมัติเมื่อครบ 3 นาทีหรือตามเวลาที่ --time-limit กำหนด
หากต้องการเริ่มบันทึกหน้าจออุปกรณ์ ให้เรียกใช้คำสั่ง screenrecord เพื่อบันทึกวิดีโอ จากนั้นเรียกใช้คำสั่ง pull เพื่อดาวน์โหลดวิดีโอจากอุปกรณ์ไปยังคอมพิวเตอร์โฮสต์
ตัวอย่างเซสชันการบันทึกมีดังนี้
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
screenrecord ยูทิลิตีสามารถบันทึกที่ความละเอียดและบิตเรตที่รองรับที่คุณขอได้
พร้อมทั้งรักษาอัตราส่วนของจอแสดงผลของอุปกรณ์ โดยค่าเริ่มต้น ยูทิลิตีจะบันทึกที่ความละเอียดและวางแนวการแสดงผลดั้งเดิม
โดยมีความยาวสูงสุด 3 นาที
ข้อจำกัดของยูทิลิตี screenrecord มีดังนี้
- ระบบจะไม่บันทึกเสียงพร้อมกับไฟล์วิดีโอ
- การบันทึกวิดีโอไม่พร้อมใช้งานสำหรับอุปกรณ์ที่ใช้ Wear OS
- อุปกรณ์บางเครื่องอาจบันทึกที่ความละเอียดการแสดงผลดั้งเดิมไม่ได้ หากพบปัญหาเกี่ยวกับการบันทึกหน้าจอ ให้ลองใช้ความละเอียดหน้าจอที่ต่ำลง
- ระบบไม่รองรับการหมุนหน้าจอระหว่างการบันทึก หากหน้าจอหมุนระหว่าง การบันทึก ระบบจะตัดบางส่วนของหน้าจอออกจากการบันทึก
ตารางที่ 4 screenrecord ตัวเลือก
| ตัวเลือก | คำอธิบาย |
|---|---|
--help
|
ไวยากรณ์และตัวเลือกของคำสั่งแสดง |
--size widthxheight
|
ตั้งค่าขนาดวิดีโอ: 1280x720 ค่าเริ่มต้นคือความละเอียดในการแสดงผลดั้งเดิมของอุปกรณ์ (หากรองรับ) หรือ 1280x720 หากไม่รองรับ โปรดใช้ขนาดที่เข้ารหัส Advanced Video Coding (AVC) ของอุปกรณ์รองรับเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด |
--bit-rate rate |
ตั้งค่าอัตราบิตของวิดีโอในหน่วยเมกะบิตต่อวินาที ค่าเริ่มต้นคือ 20 Mbps
คุณเพิ่มอัตราบิตเพื่อปรับปรุงคุณภาพวิดีโอได้ แต่การทำเช่นนี้จะทำให้ไฟล์ภาพยนตร์มีขนาดใหญ่ขึ้น
ตัวอย่างต่อไปนี้ตั้งค่าบิตเรตการบันทึกเป็น 6 Mbps
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
ตั้งค่าเวลาในการบันทึกสูงสุดเป็นวินาที ค่าเริ่มต้นและค่าสูงสุดคือ 180 (3 นาที) |
--rotate |
หมุนเอาต์พุต 90 องศา ฟีเจอร์นี้อยู่ในขั้นทดลอง |
--verbose |
แสดงข้อมูลบันทึกในหน้าจอบรรทัดคำสั่ง หากคุณไม่ได้ตั้งค่าตัวเลือกนี้ ยูทิลิตีจะไม่แสดงข้อมูลใดๆ ขณะทำงาน |
อ่านโปรไฟล์ ART สำหรับแอป
ตั้งแต่ Android 7.0 (ระดับ API 24) เป็นต้นไป Android Runtime (ART) จะรวบรวมโปรไฟล์การดำเนินการสำหรับแอปที่ติดตั้ง ซึ่งใช้เพื่อเพิ่มประสิทธิภาพของแอป ตรวจสอบโปรไฟล์ที่รวบรวมเพื่อทำความเข้าใจว่ามีการเรียกใช้เมธอดใดบ่อยครั้ง และมีการใช้คลาสใดในระหว่างการเริ่มต้นแอป
หมายเหตุ: คุณจะดึงชื่อไฟล์ของโปรไฟล์การดำเนินการได้ก็ต่อเมื่อมีสิทธิ์เข้าถึงระดับรูทในระบบไฟล์เท่านั้น เช่น ในโปรแกรมจำลอง
หากต้องการสร้างข้อมูลโปรไฟล์ในรูปแบบข้อความ ให้ใช้คำสั่งต่อไปนี้
adb shell cmd package dump-profiles package
หากต้องการดึงไฟล์ที่สร้างขึ้น ให้ใช้คำสั่งต่อไปนี้
adb pull /data/misc/profman/package.prof.txt
รีเซ็ตอุปกรณ์ทดสอบ
หากทดสอบแอปในอุปกรณ์ทดสอบหลายเครื่อง การรีเซ็ตอุปกรณ์ระหว่างการทดสอบอาจมีประโยชน์ เช่น เพื่อนำข้อมูลผู้ใช้ออกและรีเซ็ตสภาพแวดล้อมการทดสอบ คุณสามารถรีเซ็ตอุปกรณ์ทดสอบที่ใช้ Android 10 (ระดับ API 29) ขึ้นไปเป็นค่าเริ่มต้นได้โดยใช้คำสั่ง 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 เป็นเปิดใช้