Bước tới nội dung

Android Debug Bridge

Bách khoa toàn thư mở Wikipedia
Android Debug Bridge
Tác giả gốcGoogle
Phiên bản ổn định
34.0.1 (March 2023)
Kho mã nguồnandroid.googlesource.com
Viết bằngC++
Hệ điều hànhWindows, Linux, macOS
Đi kèm vớiAndroid SDK
Thể loạiCông cụ lập trình
Giấy phépApache License 2.0
Websitedeveloper.android.com/studio/command-line/adb

Android Debug Bridge, còn được gọi là Cầu gỡ lỗi Android (trong tiếng Việt)[1] cũng như adb hay ADB, là một công cụ lập trình sử dụng cho việc gỡ lỗi các thiết bị dựa trên nền tảng Android. Ứng dụng khách (client) adb giao tiếp với máy chủ adb trên máy tính chủ, còn máy chủ quản lý các kết nối đến trình nền adbd trên thiết bị Android thông qua USB hoặc TCP/IP.

Được cung cấp dưới dạng phần mềm nguồn mở theo Giấy phép Apache của Google từ năm 2007, các tính năng bao gồm shell và khả năng tạo bản sao lưu. Phần mềm adb có thể được cài đặt cho Windows, Linux và macOS.

adb từng bị lạm dụng bởi botnet và các phần mềm độc hại. Các nhà phát triển adb đã đưa ra một số biện pháp giảm thiểu như xác thực RSA và danh sách trắng.

Tính năng nổi bật

[sửa | sửa mã nguồn]
Android Device Monitor

Android cung cấp hầu hết các công cụ dòng lệnh Unix thông thường. Người dùng có thể dùng lệnh adb shell ls /system/bin để xem danh sách liệt kê các công cụ có sẵn.[1]

adb cung cấp giao diện dòng lệnh để giao tiếp với các thiết bị và trình giả lập Android. Nó có thể liệt kê các thiết bị đang kết nối, báo cáo trạng thái kết nối và chọn một thiết bị cụ thể khi có nhiều thiết bị cùng hoạt động. Ví dụ, lệnh adb devices liệt kê các thiết bị đã kết nối với máy chủ adb, trong khi tùy chọn -s cho phép chọn thiết bị dựa trên số series của nó. Điều này giúp định hướng các lệnh đến một thiết bị cụ thể khi có nhiều thiết bị đang kết nối.[1]

adb cũng cho phép truy cập vào shell của thiết bị. Lệnh adb shell khởi động một shell tương tác, trong khi adb shell kèm theo một lệnh cụ thể sẽ thực thi lệnh đó. Tính năng này cho phép các nhà phát triển thực hiện nhiều tác vụ như đọc các thông số hệ thống liên quan đến bộ nhớ, pin,... thông qua dumpsys hoặc nhật ký (log) hệ thống thông qua công cụ Logcat.[1][2][3]

adb có thể cài đặt các ứng dụng Android từ tệp APK. Lệnh adb install dùng để cài đặt tệp APK lên thiết bị hoặc trình giả lập, còn adb install-multiple cho phép cài đặt nhiều tệp APK cho một thiết bị. adb cũng hỗ trợ các thao tác quản lý ứng dụng khác phục vụ quá trình phát triển và thử nghiệm.[1][2]

Việc truyền tải tệp và thư mục giữa máy tính chủ và thiết bị có thể được thực hiện thông qua các lệnh adb push và adb pull. Khác với quy trình cài đặt ứng dụng (vốn đặt tệp APK vào vị trí cụ thể thích hợp), các lệnh này cho phép chuyển bất kỳ tệp hoặc thư mục nào đến và đi từ các vị trí mà adb có quyền truy cập.[1]

adb cũng cung cấp các công cụ hỗ trợ gỡ lỗi và chẩn đoán. Nhà phát triển có thể trích xuất nhật ký hệ thống Android và ứng dụng bằng lệnh adb logcat. Đồng thời, adb cung cấp các kết nối cần thiết cho các công cụ gỡ lỗi, bao gồm cả giao thức Java Debug Wire Protocol.[3][4]

adb cũng hỗ trợ chuyển tiếp cổng (port forwarding) TCP giữa máy tính chủ và thiết bị Android. Ví dụ, lệnh adb forward tcp:6100 tcp:7100 sẽ chuyển tiếp các kết nối gửi đến cổng 6100 trên máy chủ sang cổng 7100 trên thiết bị. Cơ chế chuyển tiếp ngược (reverse forwarding) cũng có thể được sử dụng cho các kết nối theo chiều ngược lại.[1][5]

adb cũng có thể được sử dụng thông qua giao diện đồ họa. Giao diện từ phần mền Android Device Monitor trong Android Studio có thể được sử dụng để truy xuất thông tin từ thiết bị Android.[6]

Lịch sử phát triển

[sửa | sửa mã nguồn]

Bộ công cụ phát triển phần mềm Android (SDK) được phát hành lần đầu tiên vào năm 2007.[7] adb cũng được bao gồm trong SDK khi đó, nhưng người dùng không thể tải adb một cách riêng biệt.[8]

Trước SDK Tools Revision 8 vào khoảng cuối năm 2010, các công cụ như adb được đặt trong gói SDK Tools chung, tại thư mục tools. Sau đó, Google tách nhóm công cụ tương tác với thiết bị thành Platform-tools và đặt chúng trong platform-tools. Nhờ đó, các Android SDK Platform thuộc những cấp API khác nhau có thể dùng chung một phiên bản công cụ mới nhất, thay vì phải phụ thuộc vào các bản công cụ gắn với từng cấp API.[9][10][11]

Vào năm 2015, Microsoft đã phát hành trình giả lập Android có thể kết nối với ứng dụng khách adb.[12] Vào năm 2016 Android Studio 2.0 đã cải thiện hiệu suất gấp 5 lần để cài đặt ứng dụng và đẩy tệp qua adb.[13] Để sử dụng Android Things dễ dàng hơn, một trình bao bọc (wrapper) đã được tạo vào năm 2017 xung quanh các lệnh adb thủ công.[14]

Năm 2017, Google cho phép tải xuống adb một cách riêng biệt từ SDK Android.[15]

Các lệnh adb backup và adb restore có thể được dùng để tạo và khôi phục bản sao lưu thiết bị. Vào tháng 5 năm 2019, AOSP thêm cảnh báo rằng hai lệnh này đã lỗi thời và "có thể bị loại bỏ trong bản phát hành tương lai". Tuy nhiên, các lệnh này vẫn được giữ và người dùng vẫn có thể sử dụng chúng.[16][17]

Vào năm 2020, Google giới thiệu tính năng cài đặt gia tăng (incremental installation) qua adb, một tính năng được giới thiệu trong Android 11 (API cấp 30) giúp tăng tốc đáng kể quá trình cài đặt các APK lớn lên thiết bị vật lý hoặc trình giả lập.[18] Cũng vào năm 2020, Wi-Fi adb đã được tích hợp vào Android Studio dành cho macOS.[19] Vào năm 2021, Android 12 (API cấp 31) đã hạn chế việc sử dụng lệnh adb backup để sao lưu dữ liệu ứng dụng đối với các ứng dụng nhắm mục tiêu API cấp 31 trở lên.[17]

Fuchsia, một hệ điều hành của Google, có khả năng tương thích ngược với adb. Tuy vậy, khả năng hỗ trợ adb của Fuchsia được mô tả là chưa đầy đủ và chủ yếu dành cho các quy trình kiểm thử phần cứng, và adb được ưu tiên thay thế bằng fx và ffx cho các tương tác giữa máy chủ và mục tiêu.[20][21]

Kể từ Android 11 (API cấp 30), hệ thống hỗ trợ tính năng gỡ lỗi không dây mà không cần đến kết nối USB.[1]

Vào năm 2026, cùng với sự xuất hiện của Android 17 (API cấp 37), Google tung ra tính năng ADB Wi-Fi 2.0. Tính năng này cho phép người dùng tự động kết nối với thiết bị chủ khi đang ở trong hệ thống mạng không dây được đánh dấu là đáng tin cậy, và mDNS được dùng để tự động phát hiện các thiết bị đã ghép nối. Ngoài ra, việc ghép nối chỉ cần thực hiện một lần, và quá trình ghép nối sẽ được duy trì cho đến khi bị người dùng chủ động xóa ghép nối hoặc quyền truy cập adb bị thu hồi.[22][1]

Thiết lập

[sửa | sửa mã nguồn]

Máy chủ

[sửa | sửa mã nguồn]

Android SDK Platform Tools có thể được cài đặt cho Windows, macOS và Linux.[9]

Đối với Windows, SDK Platform Tools chứa tệp nhị phân adb.exe có thể được giải nén và cài đặt.[23] Đường dẫn chứa thư mục Platform Tools có thể được thêm vào biến môi trường PATH để người dùng có thể gọi adb mà không cần chỉ định đường dẫn đầy đủ của nó.[24][25]

Trên Ubuntu, adb có thể được cài đặt cùng với gói android-tools-adb.[26] Đối với Debian, người dùng có thể cài gói android-sdk-platform-tools-common cùng với gói adb, trong đó cài đặt các quy tắc udev giúp người dùng chạy công cụ mà không cần quyền root.[27] Với macOS và các họ hệ điều hành Linux, người dùng có thể tải xuống các công cụ nền tảng và sửa đổi biến PATH trong bashrc.[28]

Thiết bị Android

[sửa | sửa mã nguồn]

Từ hệ điều hành Android 4.2.2 trở đi (API cấp 17), một hộp thoại được hiển thị với dấu vân tay RSA mà người dùng cần đồng ý để tiếp tục; điều này giúp ngăn chặn hiện tượng máy tính khai thác cơ chế gỡ lỗi mà không có sự đồng ý của người dùng thiết bị.[29] Bắt đầu từ Android 4.2, tùy chọn dành cho nhà phát triển được ẩn theo mặc định, mà nếu muốn hiển thị ra thì người dùng cần nhấn bảy lần vào số bản dựng trong menu giới thiệu về điện thoại. Từ đó, người dùng có thể bật gỡ lỗi adb trong mục tùy chọn dành cho nhà phát triển.[30] Một số nhà cung cấp Android có các quy trình khác nhau để kích hoạt nó. Ví dụ, Huawei yêu cầu nhập mã PIN trước khi có thể bật adb.[31]

Nếu màn hình cảm ứng của thiết bị Android bị hỏng, người dùng có thể kết nối chuột với thiết bị bằng USB On-The-Go và bật gỡ lỗi USB.[31][32]

Với tính năng gỡ lỗi không dây kể từ Android 11, người dùng không cần đến kết nối USB mà thay vào đấy có thể dùng kết nối không dây. Trong đó, thiết bị Android sẽ tạo ra một mã ghép nối hoặc mã QR để xác thực kết nối với thiết bị chủ. Hai thiết bị cần phải được kết nối với nhau trong cùng một mạng không dây.[1]

Kiến trúc

[sửa | sửa mã nguồn]

Giao thức adb có thể được truyền qua USB hoặc qua Wi-Fi thông qua TCP, sử dụng kiến trúc máy khách–máy chủ. adb sử dụng hai giao thức khác nhau, đầu tiên là giữa máy khách và máy chủ, thứ hai là giữa máy chủ và trình nền. Trình nền adb được triển khai trong C và nằm trong không gian người dùng Android. Trình nền này được hỗ trợ bởi khung USB Android, UsbDeviceManager và UsbDebuggingManager.[4]

Máy khách và giao thức máy chủ

[sửa | sửa mã nguồn]

Chế độ giao tiếp giữa máy khách và máy chủ sử dụng gói TCP. Máy chủ lắng nghe trên một cổng mà máy khách phải gửi yêu cầu. Yêu cầu này chứa trường ban đầu (initial field) có kích thước 4 byte dưới dạng ASCII và payload. Payload bắt đầu bằng word host nhằm chỉ ra rằng nó nên được gửi đến máy chủ. Sau đó, máy chủ có thể trả lời bằng OKAY hoặc FAIL để cho biết trạng thái, kết hợp với payload và độ dài tùy chọn.[4]

Máy chủ và giao thức trình nền

[sửa | sửa mã nguồn]

Các thông báo được gửi từ máy chủ bao gồm một tiêu đề dài 24 byte, với các trường sau:[4]

  • Lệnh.
  • Argument đầu tiên.
  • Argument thứ hai.
  • Độ dài của payload, 0 hoặc cao hơn.
  • CRC32 của payload đó.
  • Magic value, được tính thông qua lệnh XOR 0xFFFFFFFF.

Bảo mật

[sửa | sửa mã nguồn]

Android từng dễ bị tấn công bởi lỗ hổng RageAgainstTheCage cho đến Android 2.2. Trình nền adb không kiểm tra giá trị trả về của lời gọi hệ thống setuid khi hạ thấp quyền. Lỗ hổng này tạo ra các tiến trình con cho đến khi thất bại do hết mã định danh tiến trình (process identifier). Khi trình nền gặp sự cố và khởi động lại, nó không thể khởi tạo một tiến trình mới với quyền đã bị hạ thấp và tiếp tục chạy với quyền root. Khi đó, adb cung cấp một shell root.[33] Vào năm 2017, một lỗ hổng bảo mật đã được phát hiện, cho phép khai thác adb để chiếm quyền điều khiển modem tích hợp (onboard modem). Cuộc tấn công yêu cầu adb phải được kích hoạt và ủy quyền từ trước, mặc dù đã có một số biện pháp khắc phục.[34]

Nhiều dòng phần mềm độc hại khác nhau như ADB.Miner, Ares, IPStorm, Fbot and Trinity có khả năng quét Internet để tìm các trình adb công khai và cài đặt phần mềm độc hại trên các thiết bị đó.[35] adb cũng có thể dùng để gỡ phần mềm độc hại, bằng cách khởi động vào chế độ an toàn (safe mode) và chạy dòng lệnh adb uninstall.[36]

Tài liệu tham khảo

[sửa | sửa mã nguồn]
  1. 1 2 3 4 5 6 7 8 9 10 "Cầu gỡ lỗi Android (adb) | Android Studio". Android Developers. Truy cập ngày 9 tháng 9 năm 2026.
  2. 1 2 "dumpsys". Android Developers. Truy cập ngày 1 tháng 10 năm 2026.
  3. 1 2 "Logcat command-line tool". Android Developers. Truy cập ngày 1 tháng 10 năm 2026.
  4. 1 2 3 4 Regupathy, Rajaram (2014). Unboxing Android USB: a hands-on approach with real World examples. Berkeley, CA. ISBN 978-1-4302-6209-1. OCLC 880673864. Lưu trữ bản gốc ngày 26 tháng 9 năm 2021. Truy cập ngày 26 tháng 9 năm 2021.{{Chú thích sách}}: Quản lý CS1: địa điểm thiếu nhà xuất bản (liên kết)
  5. ↑ "SERVICES.TXT - platform/packages/modules/adb - Git at Google". android.googlesource.com. Truy cập ngày 1 tháng 10 năm 2026. This implements the 'adb reverse' feature, i.e. the ability to reverse socket connections from a device to the host. [Chức năng này triển khai tính năng 'adb reverse', tức là khả năng đảo ngược kết nối socket từ thiết bị đến máy chủ.]
  6. ↑ Morgillo, Ivan; Viola, Stefano (2016). Learning embedded Android N programming: create the perfectly customized system by unleashing the power of Android OS on your embedded device. Birmingham, UK. tr. 89. ISBN 9781785283284. OCLC 1020708322. Lưu trữ bản gốc ngày 26 tháng 9 năm 2021. Truy cập ngày 26 tháng 9 năm 2021.{{Chú thích sách}}: Quản lý CS1: địa điểm thiếu nhà xuất bản (liên kết)
  7. ↑ "Google releases Android SDK". Macworld (bằng tiếng Anh). Lưu trữ bản gốc ngày 10 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.
  8. ↑ "Google makes ADB and fastboot available without Android Studio or SDK". Android Authority (bằng tiếng Anh). ngày 6 tháng 1 năm 2017. Truy cập ngày 30 tháng 9 năm 2026.
  9. 1 2 "Ghi chú về việc phát hành công cụ SDK | Android Studio". Android Developers. Truy cập ngày 9 tháng 9 năm 2026.
  10. ↑ "changes.txt - platform/sdk - Git at Google". android.googlesource.com. Truy cập ngày 30 tháng 9 năm 2026. New SDK component: platform-tools. This makes all platforms use the same latest version of aapt/aidl/dx. [Thành phần SDK mới: platform-tools. Thành phần này giúp tất cả các nền tảng sử dụng cùng một phiên bản mới nhất của aapt/aidl/dx.]
  11. ↑ "SDK Tools | Android Developers". Đại học Vanderbilt. Truy cập ngày 1 tháng 10 năm 2026.
  12. ↑ Vasile, Cosmin. "Microsoft Releases Android Emulator and It's Supposed to Be Faster than Google's". Softpedia (bằng tiếng Anh). Lưu trữ bản gốc ngày 10 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.
  13. ↑ "Android Studio 2.0 - Beta". Android Developers Blog (bằng tiếng Anh). Lưu trữ bản gốc ngày 10 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.
  14. ↑ "Android Things Developer Preview 6". Android Developers Blog (bằng tiếng Anh). Lưu trữ bản gốc ngày 10 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.
  15. ↑ "Google makes ADB, fastboot, and other platform tools available without full SDK or Android Studio download". Android Police (bằng tiếng Anh). ngày 5 tháng 1 năm 2017. Lưu trữ bản gốc ngày 10 tháng 4 năm 2021. Truy cập ngày 9 tháng 9 năm 2021.
  16. ↑ "Diff - 09070afd38466fc0e84aa58b90a336fd4b3f56a0^1..09070afd38466fc0e84aa58b90a336fd4b3f56a0 - platform/system/core - Git at Google". android.googlesource.com. Truy cập ngày 1 tháng 10 năm 2026.
  17. 1 2 "Behavior changes: Apps targeting Android 12 | Android 12 Beta". Android Developers (bằng tiếng Anh). Lưu trữ bản gốc ngày 28 tháng 9 năm 2021. Truy cập ngày 28 tháng 9 năm 2021.
  18. ↑ "Turning it up to 11: Android 11 for developers". Android Developers Blog (bằng tiếng Anh). Lưu trữ bản gốc ngày 17 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.
  19. ↑ "Announcing Android Studio Arctic Fox (2020.3.1) & Android Gradle plugin 7.0". Android Developers Blog (bằng tiếng Anh). Lưu trữ bản gốc ngày 12 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.
  20. ↑ "Hardware testing guide". Fuchsia (bằng tiếng Anh). Truy cập ngày 9 tháng 9 năm 2026.
  21. ↑ Bradshaw, Kyle (ngày 26 tháng 8 năm 2022). "Google wants to make Fuchsia devices manageable with Android's ADB tool". 9to5Google (bằng tiếng Anh). Truy cập ngày 29 tháng 8 năm 2022.
  22. ↑ "Android 17 fixes wireless ADB headaches with ADB Wi-Fi 2.0". Android Authority (bằng tiếng Anh). ngày 17 tháng 6 năm 2026. Truy cập ngày 30 tháng 9 năm 2026.
  23. ↑ Harwani, B. M. (2013). PhoneGap build: developing cross platform mobile applications in the cloud. Boca Raton. tr. 38. ISBN 978-1-4665-8975-9. OCLC 862745697. Lưu trữ bản gốc ngày 7 tháng 3 năm 2022. Truy cập ngày 29 tháng 1 năm 2022.{{Chú thích sách}}: Quản lý CS1: địa điểm thiếu nhà xuất bản (liên kết)
  24. ↑ Hoffman, Chris; Fedewa, Joe (ngày 4 tháng 9 năm 2021). "How to Install and Use ADB, the Android Debug Bridge Utility". How-To Geek (bằng tiếng Anh). Lưu trữ bản gốc ngày 18 tháng 9 năm 2021. Truy cập ngày 9 tháng 9 năm 2021.
  25. ↑ "Biến môi trường | Android Studio". Android Developers. Truy cập ngày 9 tháng 9 năm 2026.
  26. ↑ Smyth, Neil (2020). "7". Android Studio 4. 0 Development Essentials - Java Edition: Developing Android Apps Using Android Studio 4. 0, Java and Android Jetpack. Cary. ISBN 978-1-951442-21-7. OCLC 1190906409. Lưu trữ bản gốc ngày 26 tháng 9 năm 2021. Truy cập ngày 26 tháng 9 năm 2021.{{Chú thích sách}}: Quản lý CS1: địa điểm thiếu nhà xuất bản (liên kết)
  27. ↑ "Debian -- Details of package adb in bullseye". packages.debian.org. Lưu trữ bản gốc ngày 8 tháng 9 năm 2021. Truy cập ngày 8 tháng 9 năm 2021.
  28. ↑ "How to Install Android Debug Bridge (ADB) and Fastboot". Lifewire (bằng tiếng Anh). Lưu trữ bản gốc ngày 30 tháng 1 năm 2022. Truy cập ngày 18 tháng 1 năm 2022.
  29. ↑ "Run apps on a hardware device". Android Developers (bằng tiếng Anh). Lưu trữ bản gốc ngày 8 tháng 9 năm 2021. Truy cập ngày 8 tháng 9 năm 2021.
  30. ↑ Wallen, Jack. "How to enable Developer options in Android 4.2". TechRepublic (bằng tiếng Anh). Lưu trữ bản gốc ngày 9 tháng 9 năm 2021. Truy cập ngày 9 tháng 9 năm 2021.
  31. 1 2 Aranzulla, Salvatore. "Come attivare debug USB". Salvatore Aranzulla (bằng tiếng Ý). Lưu trữ bản gốc ngày 9 tháng 9 năm 2021. Truy cập ngày 9 tháng 9 năm 2021.
  32. ↑ Ogubuike, Udochi (ngày 9 tháng 8 năm 2019). "How to enable USB debugging mode on Android". The Punch (bằng tiếng Anh). Lưu trữ bản gốc ngày 17 tháng 9 năm 2019. Truy cập ngày 9 tháng 9 năm 2021.
  33. ↑ Drake, Joshua J. (2014). Android hacker's handbook. Zach Lanier, Collin Mulliner, Pau Oliva, Stephen A. Ridley, Georg Wicherski. Indianapolis, IN: Wiley. tr. 75. ISBN 978-1-118-60861-6. OCLC 875820167. Lưu trữ bản gốc ngày 26 tháng 9 năm 2021. Truy cập ngày 26 tháng 9 năm 2021.
  34. ↑ Mendelsohn, Tom (ngày 9 tháng 1 năm 2017). "Google plugs severe Android vulnerability that exposed devices to spying". Ars Technica (bằng tiếng Anh). Lưu trữ bản gốc ngày 10 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.
  35. ↑ Cimpanu, Catalin. "Android devices ensnared in DDoS botnet". ZDNet (bằng tiếng Anh). Lưu trữ bản gốc ngày 10 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.
  36. ↑ Schuman, Evan. "This Vultur app takes malicious to the next level". Computerworld (bằng tiếng Anh). Lưu trữ bản gốc ngày 10 tháng 9 năm 2021. Truy cập ngày 10 tháng 9 năm 2021.

Liên kết ngoài

[sửa | sửa mã nguồn]