Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Android

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

บทความนี้สำรวจวิธีใช้ ADB เพื่อควบคุมรายละเอียดตอนติดตั้ง, ทดสอบ, 診斷, และจัดการอุปกรณ์และ emulators หนึ่งหรือหลายตัว

หลายปีแรกในฐานะ software developer ทำงานกับ Android SDK ผมไม่รู้ ADB (Android Debug Bridge) คืออะไร ทำอะไร ได้เมื่อไหร่

ข้อสนุก: ไม่ใช่เป้าหมายวิชาชีพที่ดחףให้เรียน ADB แต่เป็น Nexus 6 ที่ boot loop ต้องการฟื้นคืน Android Studio และ Gradle ช่วยไม่ได้เลย

บทความนี้เขียนด้วย สองกลุ่มเป้าหมาย:

  • คุ้นเคย CLI, Shell, Processes, และ Client-Server Model
  • ไม่คุ้นเคย CLI, Shell, Processes, และ Client-Server Model

กลุ่มแรกข้ามส่วน "How to Work With The ADB" ได้

กลุ่มที่สอง สมมติเหมือนผมตอน Junior รู้น้อยมาก ส่วนแรกเป็น soft introduction และ glossary คำศัพท์พื้นฐาน อธิบายให้เข้าใจง่ายที่สุด

ข้อมูลเบื้องต้น

เรียนรู้หัวข้อสำคัญเพื่อเข้าใจ ADB ทำงานและใช้อย่างไร

บางคนหลีกเลี่ยง command line tools จาก Vim enthusiasts หรือ Unix System Administrators ที่ตัดสิน ผมรับรู้ว่า CLI ไม่ ideal สำหรับสมองผม คิดว่าคุณอาจชอบมุมมองของผม

Command Line

อย่างง่าย CLI คือ interface (วิธีส่ง/รับข้อมูล) กับคอมพิวเตอร์ที่ ใช้เฉพาะบรรทัดข้อความ

CLI ไม่ใช่โปรแกรมเอง แต่โปรแกรมบางตัว提供 CLI (อาจมี GUI ด้วย)

เคยพิมพ์ใน Windows Command Prompt (หรือ MS-DOS ถ้าเป็น 90s kid), Mac Terminal, หรือ GNOME Terminal บน Linux ทั้งหมดใช้ CLI หลัก

ข้อดีและข้อเสียของ CLI ขึ้นอยู่กับบุคคลและปัญหาที่แก้ ผมไม่ชอบ CLI เว้นแต่ทำทุกวัน

สมองผมไม่เหมาะจดคำสั่งย่อแปลก (เด็กตอนเรียนอ่านยาก) ต้องพึ่ง implicit memory (muscle memory) และ cheat sheets มาก

แต่ผู้ที่ยินดีลงเวลาแม้จะยาก (เหมือนผม) หรือจดจำได้ดี คุณจะค้นพบว่ามีประสิทธิภาพมากกว่า GUI มาก

หลาย operations ทำได้ในเวลาสั้นกว่าคลิกเมนูหลายขั้นตอน สามารถเขียน scripts (ไฟล์คำสั่งข้อความ) เพิ่มประสิทธิภาพได้อีก

ใช้ ABD Shell

สมมติคุ้นเคย Operating System (OS): Android, iOS, Windows, Mac, Linux, Unix-like systems

ทำไม relevant กับ ADB? Android OS based on Linux, Linux based on Unix

ผลคือ ใช้ ADB เข้าถึง Unix Shell ของอุปกรณ์/emulator ได้ ให้ความยืดหยุน ความสามารถ และการควบคุมมากโดยโต้ตอบกับ shell โดยตรง

Shell คือโปรแกรมโต้ตอบกับ OS เหมือนเปลือกเต่า ป้องกันและให้เข้าถึง inner workings ไม่ต้อง overthink ถ้าอ่านนี้บนคอมพิวเตอร์ คุณใช้ shell มาช่วยแล้ว

Shell ให้ CLI หรือ GUI หรือทั้งคู่ ใช้สร้าง/อัปเดต/ลบ/ย้ายไฟล์ เริ่มโปรแกรมอื่น เข้าถึง services ของ OS

ใช้ ABD Client และ ABD Server

เริ่มด้วยคำอธิบายไม่แน่นอนแต่เข้าใจง่าย แล้วปรับปรุง

Clients และ Servers เป็นคอมพิวเตอร์ แยกกันด้วย role คอมพิวเตอร์คุณเป็น Client ของ freeCodeCamp Server ที่ serve หน้า HTML นี้

โดยทั่วไป client คือ สิ่งที่ใช้สิ่งอื่น server คือ สิ่งที่ถูกใช้ ไม่ overthink Client-Server Model อธิบายสิ่งมากมายในและนอก computing

Clients และ Servers เป็น "คอมพิวเตอร์" ไม่จริงในบริบทของเรา เราควรคิดว่าเป็น processes (process คือโปรแกรมที่กำลังรัน)

Client process และ Server process มักรันบนคอมพิวเตอร์ต่างกัน แต่วันบนเครื่องเดียวกันก็ได้ จะครอบครอง memory space ต่างกัน ต่างกันแค่ communicate ด้วย IPC แทน network

ADB ใช้ Server process อนุญาต multiple developers (multiple clients) จัดการ multiple Android devices/emulators

ใน enterprise Server process อาจอยู่บน remote computer แต่เราจะตั้ง Server local กับ Client 簡單กว่าที่คิด

ABD Daemon คืออะไร?

Process คือโปรแกรมที่รัน Daemon คือ process รันใน background ผู้ใช้ไม่โต้ตอบโดยตรง

เปิด web browser การจัดการ network connections ทำโดย NetworkManager Daemon (ไม่ใช่ browser process)

แต่ละ Android device (physical หรือ emulated) ที่ config ถูกต้อง จะมี ADB Daemon (adbd) รันคำสั่งจาก Server process

สรุป: Client ส่งคำสั่งให้ Server Server ส่งต่อให้ ADBD รันบน device

ใช้ ADB สำหรับ Android Development

ส่วนที่เหลือครอบคลุม:

  • Drivers และ configuration ใช้ ADB บนระบบของคุณ
  • ใช้ ADB กับ physical devices และ emulators
  • Basic commands ด้วย ADB CLI
  • Advanced usage ใช้ Android device Shell ผ่าน ADB

ก่อนเริ่ม ตัดสินใจ CLI tool ไหนใช้กับ ADB Windows ชอบ PowerShell แต่ Command Prompt ก็ได้ Linux/Mac ใช้ Terminal เริ่มต้น

ใช้สิ่งที่ทำงานได้

บทความมีรายละเอียดเต็มๆ แต่มี video tutorial สรุปที่นี่:

Video tutorial สำหรับ adb

เข้าใจ CLI Examples

บทความมีคำสั่งมาก ส่วนที่เปลี่ยนตามสถานการณ์ จะอยู่ใน angle brackets

อย่าใส่ angle brackets ใน CLI command

เช่น adb pair <ip-address>:<port> แทนที่ด้วยค่าจริง adb pair 192.168.0.1:5554

ABD Drivers & Configuration

ต้องมี Android SDK Platform-Tools ล่าสุด (หรือล่าสุดพอสมควร) หากไม่ใช้ Android Studio ดาวน์โหลด standalone package สำหรับ OS ของคุณ

ถ้าใช้ Android Studio ดาวน์โหลด/อัปเดตผ่าน SDK Manager

มักมี toolbar icon เปิด SDK Manager แต่เปลี่ยนรูปทุก hotfix หาไม่เจอ ไป File -> Settings ค้นหา "SDK" หา "Android SDK" menu

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android
Settings แสดง Android SDK Platform Tools ติดตั้งแล้ว

ขั้นตอนต่อไปเปลี่ยนตามตัวแปร ตามที่กล่าวใน Preliminaries ADB ใช้ Client-Server Model ให้ความยืดหยุ่น

โดยเฉพาะ อาจมี:

  • Multiple Clients กับ remote Server
  • Server local (เครื่องเดียว) กับ one Client
  • Physical devices และ emulators หลากหลาย ผูกกับ server เดียวกัน

Advanced configuration หลาย clients และอุปกรณ์เยอะ ใช้ ADB ได้ แต่ไม่อยู่ในขอบเขตบทความ

หนึ่ง Server จัดการได้สูงสุด 16 emulators และ physical devices ไม่จำกัด (ในความสมเหตุสมผล) โดยไม่ต้อง advanced config

บทความนี้ทำงานกับ one physical device และ one emulator สำหรับ single ADB server process

ตั้งค่า ABD Emulator

ส่วนใหญ่ไม่ต้อง config เพิ่ม แต่อาจต้อง enable Developer Options บน emulator จะรู้เร็วตอนรันคำสั่ง ADB แรกๆ

หากต้องการ enable บน emulator ต้องค้นหาวิธีสำหรับ Android version นั้น

USB Debugging – ตั้งค่าอุปกรณ์ Physical

หากไม่ใช้ physical device ข้ามส่วนนี้ได้ แต่ควร enable Developer Options

ต้อง config USB Debugging หรือ WiFi Debugging บน Android device และ development machine

ทั้งสองกรณี เริ่ม enable Developer Options บน device ค้นหาวิธีสำหรับ Android version นั้น

USB Debugging

Enable USB Debugging บน Android device ผ่าน Developer Options ลิงก์ข้างบนอธิบายกระบวนการ (เปลี่ยนไปตาม Android OS versions)

ก่อนต่อไป Windows users ต้องดาวน์โหลด USB Driver Ubuntu users ต้องขั้นตอนเพิ่ม Mac และ Chrome OS พร้อมแล้ว

Enable USB Debugging แล้ว เชื่อม Android device ผ่าน USB cable

WiFi Debugging

หากมี multiple physical devices หรือขาด USB cables ใช้ WiFi Debugging

Developer Options บน Android device Enable Wireless debugging จะ prompt เรื่อง Allow debugging on network ที่ device เชื่อมต่ออยู่ Allow (ถ้า network ถูกต้อง)

เริ่มทำงานกับ CLI หา platform-tools directory ใน Android SDK installation directory

สมมติมี Android Studio ไป File -> Settings ค้นหา "SDK" "Android SDK" menu จะบอก SDK installed directory ที่ควรมี platform-tools

ตัวอย่าง: copy path ไปยัง Android SDK directory เปิด Windows PowerShell พิมพ์:

Change Directory:

cd <path-to-SDK-directory>

List Files and Directories:

ls
คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

พิมพ์ cd platform-tools เข้า directory นั้น ขั้นตอนต่อไปสมมติ device รัน Android OS 11 หรือสูงกว่า

หาก Android 10 หรือต่ำกว่า ดูคำแนะนำที่นี่

อยู่ใน platform-tools directory แล้ว พร้อม pair Android device กับ development machine:

1. ใน Wireless debugging submenu Settings -> System -> Developer options เลือก Pair device with pairing code

2. ใน CLI tool (อยู่ใน platform-tools directory) พิมพ์:

adb pair <IP address>:<Port>

IP address และ Port มาจาก dialog บน Android device หลังเลือก Pair device with pairing code (อย่าใส่ angle brackets)

Note: อาจต้อง prepend adb call ด้วย symbols หรือ commands ขึ้นกับ CLI tool, OS, และ access controls เช่นผมพิมพ์ .\adb pair <IP address>:<Port> บน PowerShell Windows

3. สมมติ CLI ทำงานดี จะ prompt ให้ใส่ pairing code ที่มองเห็นใน dialog เดียวกับ IP และ Port

4. หลังใส่ pairing code รู้ว่าสำเร็จถ้าได้ข้อความ:

Successfully paired to <IP Address>:<Port> [guid=<Some GUID>]

5. Windows หรือ Linux ต้องรันคำสั่งเพิ่มด้วย IP Address & Port จาก Wireless debugging preferences menu (ไม่ใช่ dialog pairing code):

adb connect <IP Address>:<Port>

หลังจากนั้นจะได้ notification บนโทรศัพท์ว่า connected แล้ว

ใช้ ADB: Commands

สมมติ config อุปกรณ์และ development machine ถูกต้อง ใช้ ADB tool ได้แล้ว

ก่อนเริ่ม navigate ไป directory ที่มี adb ด้วย CLI tool (เว้นแต่เพิ่งทำ WiFi debugging steps) ไปทำตอนนี้ หรือดูส่วนก่อนหน้าวิธีหา folder

ดูอุปกรณ์ที่เชื่อมต่อกับ Server อยู่

เริ่ม adb server โดยเรียกคำสั่ง ADB ใดๆ ยกเว้น adb kill-server ไม่ว่า server จะรันอยู่หรือไม่ พิมพ์:

adb devices

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

ภาพ: เรียก adb devices ตอนโทรศัพท์เชื่อมต่อ server แล้ว kill server ด้วย adb kill-server เรียก devices อีกครั้ง restart server

หาก ADB server ไม่รัน การเรียกคำสั่ง ADB ใดๆ จะ start server กลับมา (ยกเว้น adb kill-server) มี adb start-server صريح แต่ไม่เคยต้องใช้

Server reset devices ไม่คืน items ก่อนไปขั้นตอนต่อไป ต้อง pair และ connect อีกครั้ง (Windows/Linux) ตามส่วนก่อนหน้า

เริ่ม emulator ด้วย PowerShell และ emulator program ใน subdirectory ของ platform-tools ชื่อ "emulator" ใช้ AVD Manager หรือ Android Studio เริ่ม emulator ก็ได้

หากหลาย devices ใช้ option -l กับ adb devices ได้ข้อมูลมากขึ้น

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

ส่งคำสั่งไปอุปกรณ์เฉพาะ

ไม่ต้องการ brick โทรศัพท์ ส่งคำสั่งไป emulator ใช้ option -s ตามด้วย serial number ของ target device ก่อนคำสั่ง

Serial number คือชุดตัวอักษรแรกที่อธิบาย device หลัง devices command

Serial number ของ emulator คือคำว่า emulator ตามด้วย port ที่ emulator attach อยู่

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

ลูกศรแดงอีกอันชี้ serial number ของโทรศัพท์ (บล็อคเพื่อความปลอดภัย)

หากมี device เดียว (อะไรก็ตาม) ไม่ต้องใช้ option -s

ติดตั้ง APK (App) บนอุปกรณ์

ติดตั้ง test APK บน emulator ที่รันอยู่ ด้วย adb install

เทียบเท่า Android Studio และ Gradle ติดตั้ง debug APK Test APKs ต้องใช้ option -t หลัง install:

adb -s <device-serial-number> install -t <path-to-APK>

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

Note: Android OS กำหนด APK ต้องถูกเซ็นก่อนติดตั้ง (แม้ test/debug APK) วิธีหนึ่ง build และ run app ใน Android Studio จะเซ็นด้วย debug certificate ที่สร้างขึ้น มีวิธีเซ็น APK อื่นๆ ดูที่นี่

ADB ทำอะไรได้อีก?

ก่อนดู advanced usage ลอง adb --help คำสั่ง help พิมพ์ documentation อธิบาย commands และ options ของ tool

ยินดีว่า ADB documentation อ่านง่ายและมีประโยชน์ ไม่ใช่ทุก CLI programs

เคล็ดลับการใช้ ADA ขั้นสูง

ครอบคลุมทุก usage และ command ของ ADB ในบทความเดียวเป็นการเสียเวลา

ใช้ ADB ติดตั้ง APK และทำสิ่งที่ Android Studio/Gradle ทำให้ ไม่แนะนำ (เว้นแต่มีเหตุผลดี)

แต่ ADB ทำได้หลายอย่างที่ยากหรือเป็นไปไม่ได้โดยไม่มีมัน

ใน Preliminaries กล่าวว่า ADB ใช้ hook เข้ากับ shell ของ device จบบทความด้วยการใช้ shell commands และหาข้อมูลเพิ่ม

หากไม่รู้ shell คืออะไร อาจข้ามส่วนอธิบายไป

ใช้ ABD Shell

ส่งคำสั่งไป device shell ผ่าน ADB ง่าย หากหลาย devices ใช้ -s <device-serial-number> นำหน้า

ส่ง single shell command ใช้ adb shell ตามด้วยคำสั่งจริงบน device shell:

adb shell ls

Output:

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

ls แสดงไฟล์และ directories ที่ CLI current directory ซึ่งเป็น root directory ของ Android device จนกว่าจะ cd ไปที่อื่น

หากวางแผนหลาย commands เริ่ม interactive Shell session ด้วย:

adb shell

ใน interactive session พิมพ์ Shell commands โดยตรง ไม่ต้อง adb shell <command> ออกจาก session ด้วย exit หรือ Ctrl+D

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

มี commands และ utilities หลากหลายผ่าน Shell ActivityManager (am) ของ Android device มีประโยชน์สำหรับทดสอบ components (Activities, Services, BroadcastReceivers) ภายใต้สถานการณ์ต่างๆ

สมมติอยาก launch ตรงเข้า Activity เฉพาะ แต่ Activity นั้นไม่ใช่ launcher Activity ใน manifest

ยังต้องเพิ่ม android:exported="true" attribute ในทุก <activity/> entry ใน manifest ที่อยาก launch (สมมติไม่ใช่ launcher Activity)

ใช้คำสั่ง:

am start -n <app-package-id>/<activity-name>

<activity-name> ต้องรวม packages ที่เกี่ยวข้อง relative to package-id ดู output ตัวอย่าง launch Activity ที่อยู่ในหลาย packages

คู่มือ ADB ฉบับสมบูรณ์: ติดตั้ง Drivers และเชี่ยวชาญคำสั่งสำหรับอุปกรณ์ Android

Further Reading

เป้าหมายคือ introduce, explain, และ guide การใช้ ADB ด้วยคำของตัวเอง (ในขอบเขตที่เป็นไปได้)

จุดนี้จะต้องสร้าง contrived examples หรือ copy documentation ไม่สนใจทำทั้งสอง

แนะนำไปอ่าน documentation และดู cool things ที่ทำได้ด้วย tools เช่น Activity Manager, Package Manager, Policy Manager ฯลฯ

ติดต่อผมได้ที่โซเชียลมีเดีย:

https://www.instagram.com/rkay301/
https://www.facebook.com/wiseassblog/
https://twitter.com/wiseass301
https://wiseassblog.com/