Cầu gỡ lỗi Android (adb)

Cầu gỡ lỗi Android (adb) là một công cụ dòng lệnh linh hoạt cho phép bạn giao tiếp với thiết bị. Lệnh adb hỗ trợ nhiều thao tác trên thiết bị, chẳng hạn như cài đặt và gỡ lỗi ứng dụng. adb cung cấp quyền truy cập vào một shell Unix mà bạn có thể dùng để chạy nhiều lệnh trên thiết bị. Đây là một chương trình ứng dụng-máy chủ bao gồm ba thành phần:

  • Ứng dụng: sẽ gửi lệnh. Ứng dụng chạy trên máy phát triển của bạn. Bạn có thể gọi ứng dụng qua một dòng lệnh bằng cách phát ra lệnh adb.
  • Một trình nền (adbd) chạy lệnh trên thiết bị. daemon chạy dưới dạng quy trình trong nền trên từng thiết bị.
  • Máy chủ (server) quản lý việc giao tiếp giữa ứng dụng và trình nền. Máy chủ chạy dưới dạng quy trình nền trên máy phát triển của bạn.

adb nằm trong gói Công cụ nền tảng Android SDK. Hãy tải gói này xuống bằng Trình quản lý SDK rồi cài đặt gói này tại android_sdk/platform-tools/. Nếu bạn muốn có gói Công cụ nền tảng Android SDK độc lập, hãy tải gói này xuống tại đây.

Để biết thông tin về cách kết nối một thiết bị để sử dụng qua adb, bao gồm cả cách sử dụng Trợ lý kết nối để khắc phục các sự cố thường gặp, hãy xem phần Chạy ứng dụng trên thiết bị phần cứng.

Cách hoạt động của adb

Khi bạn khởi động một ứng dụng adb, trước tiên, ứng dụng sẽ kiểm tra liệu có quá trình máy chủ adb nào đang chạy hay không. Nếu không có, ứng dụng sẽ khởi động quá trình máy chủ. Khi khởi động, máy chủ sẽ liên kết với cổng TCP 5037 cục bộ và lắng nghe các lệnh đã gửi từ ứng dụng adb.

Lưu ý: Tất cả ứng dụng adb đều sử dụng cổng 5037 để giao tiếp với máy chủ adb.

Sau đó, máy chủ thiết lập kết nối với tất cả thiết bị đang chạy. Máy chủ định vị các trình mô phỏng khi quét các cổng được đánh số lẻ thuộc dải từ 5555 đến 5585. Đây là dải được 16 trình mô phỏng đầu tiên sử dụng. Tìm thấy một trình nền adb (adbd) ở đâu thì máy chủ sẽ thiết lập kết nối với cổng đó.

Mỗi trình mô phỏng sử dụng một cặp cổng tuần tự – một cổng được đánh số chẵn để kết nối với bảng điều khiển và một cổng được đánh số lẻ để kết nối với adb. Ví dụ:

Trình mô phỏng 1, bảng điều khiển: 5554
Trình mô phỏng 1, adb: 5555
Trình mô phỏng 2, bảng điều khiển: 5556
Trình mô phỏng 2, adb: 5557
, v.v.

Như đã thấy, trình mô phỏng được kết nối với adb trên cổng 5555 cũng giống như trình mô phỏng có bảng điều khiển xử lý trên cổng 5554.

Sau khi máy chủ đã thiết lập kết nối với tất cả các thiết bị, bạn có thể sử dụng lệnh adb để truy cập các thiết bị đó. Vì máy chủ quản lý các kết nối tới thiết bị và xử lý các lệnh từ nhiều ứng dụng adb, nên bạn có thể kiểm soát mọi thiết bị qua ứng dụng hoặc tập lệnh bất kỳ.

Bật tính năng gỡ lỗi adb trên thiết bị của bạn

Để sử dụng adb với một thiết bị được kết nối qua USB, bạn phải bật tuỳ chọn gỡ lỗi qua USB ở phần cài đặt hệ thống của thiết bị, trong Tuỳ chọn cho nhà phát triển. Theo mặc định, trên Android 4.2 (API cấp 17) trở lên, màn hình Tuỳ chọn cho nhà phát triển sẽ bị ẩn. Để hiển thị màn hình này, hãy bật Tuỳ chọn cho nhà phát triển.

Giờ đây, bạn có thể kết nối thiết bị của mình với USB. Bạn có thể xác minh rằng thiết bị đã kết nối bằng cách thực thi adb devices qua thư mục android_sdk/platform-tools/. Nếu đã kết nối, bạn sẽ thấy tên thiết bị được liệt kê là "device" ("thiết bị").

Lưu ý: Khi bạn kết nối một thiết bị chạy Android 4.2.2 (API cấp 17) trở lên, hệ thống sẽ hiện một hộp thoại hỏi xem liệu có chấp nhận khoá RSA cho phép gỡ lỗi qua máy tính này hay không. Cơ chế bảo mật này là nhằm bảo vệ thiết bị của người dùng vì nó bảo đảm rằng không thể thực thi thao tác gỡ lỗi qua USB và các lệnh adb khác trừ phi bạn có thể mở khoá thiết bị và xác nhận hộp thoại.

Để biết thêm thông tin về cách kết nối với một thiết bị qua USB, hãy đọc phần Chạy ứng dụng trên thiết bị phần cứng.

Kết nối với một thiết bị qua Wi-Fi

Lưu ý: Hướng dẫn bên dưới không áp dụng cho các thiết bị Wear chạy Android 11 (API cấp 30). Hãy xem hướng dẫn gỡ lỗi ứng dụng Wear OS để biết thêm thông tin.

Android 11 (API cấp 30) trở lên hỗ trợ triển khai và gỡ lỗi ứng dụng qua mạng không dây từ máy trạm bằng Cầu gỡ lỗi Android (adb). Ví dụ: bạn có thể triển khai ứng dụng có thể gỡ lỗi cho nhiều thiết bị từ xa mà không cần kết nối thực tế thiết bị qua USB. Việc này giúp bạn không cần giải quyết các vấn đề thường gặp về kết nối USB, chẳng hạn như việc cài đặt trình điều khiển.

Trước khi bắt đầu sử dụng tính năng gỡ lỗi qua Wi-Fi, hãy làm như sau:

  • Đảm bảo rằng máy trạm và thiết bị của bạn được kết nối với cùng một mạng không dây.

  • Đảm bảo rằng thiết bị của bạn chạy Android 11 (API cấp 30) trở lên đối với điện thoại hoặc Android 13 (API cấp 33) trở lên đối với TV và Wear OS. Để biết thêm thông tin, hãy xem bài viết Kiểm tra và cập nhật phiên bản Android.

  • Nếu sử dụng IDE, hãy đảm bảo bạn đã cài đặt phiên bản Android Studio mới nhất. Bạn có thể tải xuống tại đây.

  • Trên máy trạm, hãy cập nhật phiên bản mới nhất của Công cụ nền tảng SDK.

Để sử dụng tính năng gỡ lỗi qua Wi-Fi, bạn phải ghép nối thiết bị với máy trạm bằng Mã QR hoặc mã ghép nối. Máy trạm và thiết bị phải được kết nối với cùng một mạng không dây. Để kết nối với thiết bị, hãy làm theo các bước sau:

  1. Bật Developer Options (Tuỳ chọn cho nhà phát triển) trên thiết bị của bạn.

  2. Mở Android Studio, rồi chọn Pair Devices Using Wi-Fi (Ghép nối thiết bị qua Wi-Fi) trên trình đơn về cấu hình chạy.

    Trình đơn thả xuống về cấu hình chạy
    Hình 1. Trình đơn về cấu hình chạy.

    Cửa sổ về Thiết bị đã ghép nối qua Wi-Fi sẽ bật lên, như minh họa trong hình 2.

    Ảnh chụp màn hình cửa sổ bật lên về các thiết bị đã ghép nối qua Wi-Fi
    Hình 2. Cửa sổ bật lên để ghép nối thiết bị bằng mã QR hoặc mã ghép nối
  3. Trên thiết bị, hãy nhấn vào Gỡ lỗi qua Wi-Fi và ghép nối thiết bị:

    Ảnh chụp màn hình trên điện thoại Pixel cho thấy chế độ cài đặt Hệ thống Gỡ lỗi qua Wi-Fi.
    Hình 3. Ảnh chụp màn hình chế độ cài đặt Gỡ lỗi qua Wi-Fi trên điện thoại Google Pixel.
    1. Để ghép nối thiết bị của bạn với mã QR, hãy chọn Ghép nối thiết bị với mã QR rồi quét mã QR thu được qua cửa sổ bật lên Ghép nối thiết bị qua Wi-Fi như minh hoạ trong hình 2.

    2. Để ghép nối thiết bị của bạn với mã ghép nối, hãy chọn Ghép nối thiết bị với mã ghép nối trong cửa sổ bật lên Ghép nối thiết bị qua Wi-Fi. Trên thiết bị của bạn, hãy chọn Ghép nối bằng mã ghép nối và ghi lại mã gồm sáu chữ số được cung cấp. Khi thiết bị xuất hiện trong cửa sổ Ghép nối thiết bị qua Wi-Fi, bạn có thể chọn Ghép nối rồi nhập mã gồm sáu chữ số hiện trên thiết bị của bạn.

      Ảnh chụp màn hình về ví dụ nhập mã PIN
      Hình 4. Ví dụ về nhập mã gồm sáu chữ số.
  4. Sau khi thiết bị của bạn được ghép nối, bạn có thể thử triển khai ứng dụng cho thiết bị.

    Để ghép nối với một thiết bị khác hoặc quên thiết bị này trên máy trạm, hãy chuyển đến phần Wireless debugging (Gỡ lỗi qua Wi-Fi) trên thiết bị, nhấn vào tên máy trạm trong phần Paired devices (Thiết bị đã ghép nối) rồi chọn Forget (Quên).

  5. Nếu muốn nhanh chóng bật và tắt tính năng gỡ lỗi qua Wi-Fi, bạn có thể sử dụng ô Cài đặt nhanh dành cho nhà phát triển cho Gỡ lỗi qua Wi-Fi, nằm trong thẻ thông tin Developer Options > Quick settings developer tiles (Tuỳ chọn cho nhà phát triển > Cài đặt nhanh dành cho nhà phát triển).

    Ảnh chụp màn hình về thẻ thông tin Cài đặt nhanh dành cho nhà phát triển trên điện thoại Google Pixel.
    Hình 5. Chế độ cài đặt thẻ thông tin Cài đặt nhanh dành cho nhà phát triển cho phép bạn nhanh chóng bật và tắt tính năng gỡ lỗi qua Wi-Fi.

Kết nối Wi-Fi bằng dòng lệnh

Ngoài ra, để kết nối với thiết bị của bạn bằng dòng lệnh mà không dùng Android Studio, hãy làm theo các bước sau:

  1. Bật tuỳ chọn cho nhà phát triển trên thiết bị như mô tả ở trên.

  2. Bật tính năng gỡ lỗi qua Wi-Fi trên thiết bị như mô tả ở trên.

  3. Trên máy trạm của bạn, hãy mở một cửa sổ dòng lệnh rồi chuyển đến android_sdk/platform-tools.

  4. Tìm địa chỉ IP, số cổng và mã ghép nối bằng cách chọn Ghép nối thiết bị bằng mã ghép nối. Ghi lại địa chỉ IP, số cổng và mã ghép nối hiển thị trên thiết bị.

  5. Trên thiết bị đầu cuối của máy trạm, hãy chạy adb pair ipaddr:port. Hãy sử dụng địa chỉ IP và số cổng nêu trên.

  6. Khi được nhắc, hãy nhập mã ghép nối, như hiển thị dưới đây.

    Ảnh chụp màn hình của quá trình ghép nối trên dòng lệnh.
    Hình 6. Thông báo cho biết thiết bị của bạn đã được ghép nối thành công.

Khắc phục các sự cố kết nối không dây

Nếu gặp sự cố khi kết nối không dây cho thiết bị, bạn có thể thử các bước sau đây để khắc phục sự cố.

Kiểm tra xem máy trạm và thiết bị của bạn có đáp ứng các điều kiện tiên quyết không

Kiểm tra để đảm bảo máy trạm và thiết bị đáp ứng các điều kiện tiên quyết nêu ở đầu phần này.

Kiểm tra xem có các sự cố đã biết khác không

Sau đây là danh sách các sự cố đã biết khi gỡ lỗi qua Wi-Fi (bằng adb hoặc Android Studio) và cách khắc phục:

  • Wi-Fi không kết nối: Các mạng Wi-Fi bảo mật, chẳng hạn như mạng Wi-Fi công ty, có thể chặn kết nối ngang hàng (p2p) và không cho phép bạn kết nối qua Wi-Fi. Hãy thử kết nối bằng cáp hoặc mạng Wi-Fi khác (không phải của doanh nghiệp). Kết nối không dây sử dụng adb connect ip:port qua tcp/ip (sau khi kết nối USB ban đầu) là một lựa chọn khác, trong trường hợp bạn có thể sử dụng một mạng không phải của công ty.

  • adb qua Wi-Fi đôi khi tự động tắt: Tình trạng này có thể xảy ra nếu thiết bị thay đổi hoặc ngắt kết nối với mạng Wi-Fi. Để giải quyết vấn đề này, kết nối lại với mạng.

  • Thiết bị không kết nối sau khi ghép nối thành công: adb dựa vào mDNS để khám phá và tự động kết nối với các thiết bị đã ghép nối. Nếu cấu hình mạng hoặc thiết bị của bạn không hỗ trợ mDNS hoặc đã tắt mDNS, thì bạn cần kết nối với thiết bị theo cách thủ công bằng adb connect ip:port.

Kết nối không dây với một thiết bị sau khi kết nối USB ban đầu (chỉ có trên Android 10 trở xuống)

Lưu ý: Quy trình này cũng áp dụng cho Android 11 (và trở lên), nhưng lưu ý là quy trình này cũng liên quan đến một kết nối *ban đầu* qua USB thực.

Lưu ý: Hướng dẫn sau đây không áp dụng cho các thiết bị Wear chạy Android 10 (API cấp 29) trở xuống. Xem hướng dẫn gỡ lỗi ứng dụng Wear OS để biết thêm thông tin.

adb thường giao tiếp với thiết bị qua USB, nhưng bạn cũng có thể sử dụng adb qua Wi-Fi. Để kết nối một thiết bị chạy Android 10 (API cấp 29) trở xuống, hãy làm theo các bước ban đầu sau đây qua USB:

  1. Kết nối thiết bị Android và máy tính lưu trữ adb với mạng Wi-Fi chung.
  2. Lưu ý: không phải tất cả các điểm truy cập đều phù hợp. Bạn có thể cần phải sử dụng một điểm truy cập có tường lửa được định cấu hình đúng cách để hỗ trợ adb.

  3. Kết nối thiết bị với máy tính lưu trữ bằng cáp USB.
  4. Đặt thiết bị đích để theo dõi kết nối TCP/IP trên cổng 5555:
    adb tcpip 5555
    
  5. Rút cáp USB khỏi thiết bị đích.
  6. Tìm địa chỉ IP của thiết bị Android. Ví dụ: trên thiết bị Nexus, bạn có thể tìm thấy địa chỉ IP trong Settings (Cài đặt) > About tablet (Giới thiệu về máy tính bảng) (hoặc About phone (Giới thiệu về điện thoại) ) > Status (Trạng thái) > IP address (Địa chỉ IP).
  7. Kết nối với thiết bị theo địa chỉ IP của thiết bị:
    adb connect device_ip_address:5555
    
  8. Xác nhận rằng máy tính lưu trữ của bạn đã kết nối với thiết bị mục tiêu:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

Thiết bị của bạn hiện đã kết nối với adb.

Nếu bị mất kết nối adb với thiết bị:

  • Đảm bảo rằng máy tính lưu trữ vẫn kết nối với cùng mạng Wi-Fi như thiết bị Android của bạn.
  • Kết nối lại bằng cách thực thi bước adb connect lần nữa.
  • Nếu cách đó không hiệu quả, hãy đặt lại máy chủ adb:
    adb kill-server
    

    Sau đó, hãy bắt đầu lại từ đầu.

Truy vấn cho thiết bị

Trước khi đưa ra các lệnh adb, bạn nên biết phiên bản thiết bị nào được kết nối với máy chủ adb. Tạo danh sách các thiết bị được đính kèm bằng lệnh devices:

  adb devices -l
  

Để đáp lại, adb sẽ in thông tin trạng thái này cho từng thiết bị:

  • Số sê-ri: adb tạo một chuỗi để chỉ nhận dạng thiết bị bằng số cổng của thiết bị. Dưới đây là một ví dụ về số sê-ri: emulator-5554
  • Trạng thái: Trạng thái kết nối của thiết bị có thể là một trong những trạng thái sau:
    • offline: Thiết bị chưa kết nối với adb hoặc không phản hồi.
    • device: Thiết bị đã kết nối với máy chủ adb. Xin lưu ý trạng thái này không ngụ ý rằng hệ thống Android đã khởi động đầy đủ và đang hoạt động vì thiết bị kết nối với adb trong khi hệ thống vẫn đang khởi động. Sau khi khởi động, đây là trạng thái hoạt động bình thường của thiết bị.
    • no device: Không có thiết bị nào được kết nối.
  • Mô tả: Nếu bạn thêm tuỳ chọn -l, lệnh devices cho bạn biết thiết bị là gì. Thông tin này sẽ hữu ích khi bạn kết nối nhiều thiết bị do có thể phân biệt những thiết bị đó.

Ví dụ sau đây cho thấy lệnh devices và kết quả của lệnh đó. Có ba thiết bị đang chạy. Hai dòng đầu tiên trong danh sách là trình mô phỏng, và dòng thứ ba là một thiết bị phần cứng được gắn vào máy tính.

$ 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

Trình mô phỏng không có trong danh sách

Lệnh adb devices có một trình tự lệnh trong trường hợp góc khiến các trình mô phỏng đang chạy không hiển thị tại đầu ra adb devices ngay cả khi các trình mô phỏng này hiển thị trên màn hình máy tính. Điều này xảy ra khi tất cả các điều kiện sau đây là đúng.

  • Máy chủ adb không chạy.
  • Bạn sử dụng lệnh emulator với tuỳ chọn -port hoặc -ports với giá trị cổng được đánh số lẻ từ 5554 đến 5584.
  • Cổng được đánh số lẻ bạn đã chọn không bận nên có thể thực hiện kết nối cổng tại số cổng được chỉ định hoặc nếu nó bận, trình giả lập sẽ chuyển sang một cổng khác đáp ứng các yêu cầu trong 2.
  • Bạn khởi động máy chủ adb sau khi khởi động trình mô phỏng

Một cách để tránh tình trạng này là để trình mô phỏng chọn cổng của riêng mình và chạy không quá 16 trình mô phỏng cùng một lúc. Một cách khác là luôn khởi động máy chủ adb trước khi bạn sử dụng lệnh emulator, như được giải thích trong các ví dụ sau.

Ví dụ 1: Trong trình tự lệnh sau, lệnh adb devices sẽ khởi động máy chủ adb, nhưng danh sách thiết bị không xuất hiện.

Dừng máy chủ adb và nhập các lệnh sau theo thứ tự hiển thị. Đối với tên AVD, hãy cung cấp một tên AVD hợp lệ từ hệ thống của bạn. Để có danh sách tên AVD, hãy nhập emulator -list-avds. Lệnh emulator nằm trong thư mục 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 *

Ví dụ 2: Trong trình tự lệnh sau, adb devices cho thấy danh sách thiết bị vì máy chủ adb đã được khởi động trước.

Để xem trình mô phỏng trong đầu ra adb devices, hãy dừng máy chủ adb, rồi khởi động lại sau khi sử dụng lệnh emulator và trước khi sử dụng lệnh adb devices, như sau:

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5557
$ adb start-server
$ adb devices

List of devices attached
emulator-5557 device

Để biết thêm thông tin về các tuỳ chọn dòng lệnh của trình mô phỏng, hãy xem Tuỳ chọn khởi động Dòng lệnh.

Gửi lệnh đến một thiết bị cụ thể

Nếu nhiều thiết bị đang chạy, bạn phải chỉ định thiết bị mục tiêu khi kích hoạt lệnh adb. Để xác định mục tiêu, làm theo các bước sau:

  1. Dùng lệnh devices để lấy số sê-ri của mục tiêu.
  2. Sau khi bạn có số sê-ri, hãy sử dụng tuỳ chọn -s cùng với các lệnh adb để chỉ định số sê-ri.
    1. Nếu sẽ thực hiện nhiều lệnh adb, thì bạn có thể đặt biến môi trường $ANDROID_SERIAL để chứa số sê-ri.
    2. Nếu bạn sử dụng cả -s$ANDROID_SERIAL, thì -s sẽ ghi đè lên $ANDROID_SERIAL.

Trong ví dụ sau, hãy lấy danh sách thiết bị đính kèm, rồi dùng số sê-ri của một trong những thiết bị đó để cài đặt helloWorld.apk trên thiết bị đó.

$ 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

Lưu ý: Nếu bạn ra lệnh mà không chỉ định một thiết bị mục tiêu khi có nhiều thiết bị, thì adb sẽ hiển thị lỗi "adb: nhiều thiết bị/trình mô phỏng".

Nếu bạn có nhiều thiết bị, nhưng chỉ có một thiết bị là trình mô phỏng, thì hãy sử dụng tuỳ chọn -e để gửi lệnh đến trình mô phỏng. Tương tự, nếu có nhiều thiết bị nhưng chỉ có một thiết bị phần cứng được đính kèm, hãy sử dụng tuỳ chọn -d để gửi lệnh đến thiết bị phần cứng.

Cài đặt ứng dụng

Bạn có thể sử dụng adb để cài đặt một tệp APK trên trình mô phỏng hoặc thiết bị đã kết nối bằng lệnh install:

adb install path_to_apk

Bạn phải sử dụng tuỳ chọn -t kèm theo lệnh install khi cài đặt một tệp APK kiểm thử. Để biết thêm thông tin, hãy xem -t.

Để cài đặt nhiều tệp APK, hãy sử dụng install-multiple. Cách này rất hữu ích nếu bạn tải mọi tệp APK xuống cho một thiết bị cụ thể của ứng dụng qua Play Console và muốn cài đặt những tệp APK đó trên một trình mô phỏng hoặc thiết bị thực.

Để biết thêm thông tin về cách tạo tệp APK mà bạn có thể cài đặt trên một phiên bản trình mô phỏng/thiết bị, hãy xem phần Tạo và chạy ứng dụng của bạn.

Lưu ý: Nếu đang sử dụng Android Studio, thì bạn không cần trực tiếp sử dụng adb để cài đặt ứng dụng trên trình mô phỏng hoặc thiết bị. Thay vào đó, Android Studio sẽ xử lý việc đóng gói và cài đặt ứng dụng cho bạn.

Thiết lập chuyển tiếp cổng

Dùng lệnh forward để thiết lập tính năng chuyển tiếp cổng tuỳ ý, trong đó chuyển tiếp các yêu cầu từ một cổng máy tính lưu trữ cụ thể sang một cổng khác trên thiết bị. Ví dụ sau đây thiết lập tính năng chuyển tiếp cổng máy tính lưu trữ 6100 đến cổng thiết bị 7100:

adb forward tcp:6100 tcp:7100

Ví dụ sau đây thiết lập tính năng chuyển tiếp cổng máy tính lưu trữ 6100 đến local:logd:

adb forward tcp:6100 local:logd

Điều này sẽ hữu ích nếu bạn đang cố gắng xác định nội dung nào đang được gửi đến một cổng nhất định trên thiết bị. Tất cả dữ liệu đã nhận sẽ được ghi vào trình nền ghi nhật ký hệ thống và hiển thị trong nhật ký thiết bị.

Sao chép tệp vào và từ thiết bị

Sử dụng các lệnh pullpush để sao chép các tệp vào và từ một thiết bị. Không giống như lệnh install, chỉ sao chép tệp APK vào một vị trí cụ thể, lệnh pullpush cho phép bạn sao chép thư mục và tệp tuỳ ý vào bất kỳ vị trí nào trong thiết bị.

Để sao chép một tệp hoặc thư mục và thư mục con của nó từ thiết bị, làm như sau:

adb pull remote local

Để sao chép một tệp hoặc thư mục và thư mục con của tệp đó vào thiết bị, làm như sau:

adb push local remote

Thay thế localremote bằng các đường dẫn đến tệp/thư mục tiêu trên máy phát triển của bạn (địa phương) và trên thiết bị (từ xa). Ví dụ:

adb push myfile.txt /sdcard/myfile.txt

Dừng máy chủ adb

Trong một số trường hợp, bạn có thể cần phải dừng quá trình máy chủ adb rồi khởi động lại để giải quyết vấn đề. Ví dụ: trường hợp này có thể xảy ra nếu adb không phản hồi một lệnh.

Để dừng máy chủ adb, hãy dùng lệnh adb kill-server. Sau đó, bạn có thể khởi động lại máy chủ bằng cách ra bất kỳ lệnh adb nào khác.

Ra lệnh adb

Ra các lệnh adb qua một dòng lệnh trên máy phát triển của bạn hoặc qua một tập lệnh bằng các lệnh sau:

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

Nếu chỉ có một trình mô phỏng đang chạy hoặc chỉ một thiết bị được kết nối, thì lệnh adb sẽ được gửi đến thiết bị đó theo mặc định. Nếu nhiều trình mô phỏng đang chạy và/hoặc nhiều thiết bị được đính kèm, bạn cần sử dụng tuỳ chọn -d, -e hoặc -s để chỉ định thiết bị mục tiêu mà lệnh cần được hướng đến.

Bạn có thể xem danh sách chi tiết tất cả các lệnh adb được hỗ trợ bằng lệnh sau đây:

adb --help

Phát lệnh shell

Bạn có thể dùng lệnh shell để ra các lệnh trên thiết bị thông qua adb hoặc để bắt đầu một shell tương tác. Để phát ra một lệnh duy nhất, hãy sử dụng lệnh shell như sau:

adb [-d |-e | -s serial_number] shell shell_command

Để bắt đầu một màn hình shell tương tác trên thiết bị, hãy sử dụng lệnh shell như sau:

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

Để thoát khỏi màn hình shell tương tác, nhấn Control+D hoặc nhập exit.

Android cung cấp hầu hết các công cụ dòng lệnh Unix thông thường. Để biết danh sách các công cụ có sẵn, hãy sử dụng lệnh sau:

adb shell ls /system/bin

Hầu hết các lệnh thông qua đối số --help đều có thể dùng trợ giúp. Nhiều lệnh shell được toybox cung cấp. Việc trợ giúp chung áp dụng cho tất cả các lệnh của toybox hiện có qua toybox --help.

Với Công cụ nền tảng Android 23 trở lên, adb xử lý các đối số giống như lệnh ssh(1). Thay đổi này đã khắc phục rất nhiều vấn đề về chèn lệnh và giúp bạn có thể thực thi các lệnh chứa siêu ký tự shell một cách an toàn, chẳng hạn như adb install Let\'sGo.apk. Tuy nhiên, thay đổi này có nghĩa là việc diễn giải bất kỳ lệnh nào chứa siêu ký tự shell cũng đã thay đổi.

Ví dụ: lệnh adb shell setprop key 'two words' hiện là một lỗi do dấu ngoặc kép bị shell cục bộ nhập và thiết bị thấy adb shell setprop key two words. Để lệnh hoạt động, hãy trích dẫn hai lần, một lần cho shell cục bộ và một lần cho shell từ xa, giống như cách bạn thực hiện với ssh(1). Ví dụ: adb shell setprop key "'two words'" hoạt động vì shell cục bộ lấy cấp độ trích dẫn bên ngoài và thiết bị vẫn thấy cấp độ trích dẫn bên trong: setprop key 'two words'. Bạn cũng có thể thoát, nhưng việc trích dẫn hai lần thường sẽ dễ dàng hơn.

Xem thêm Logcat Command-Line Tool (công cụ dòng lệnh Logcat). Công cụ này rất hữu ích trong việc theo dõi nhật ký hệ thống.

Trình quản lý hoạt động gọi

Trong một shell adb, bạn có thể ra các lệnh bằng công cụ của trình quản lý hoạt động (am) để thực hiện các hành động khác nhau trên hệ thống, chẳng hạn như bắt đầu một hoạt động, buộc dừng một quy trình, phát một ý định, sửa đổi các tính năng của màn hình thiết bị, v.v.

Khi ở trong một shell, cú pháp am là:

am command

Bạn cũng có thể trực tiếp ra lệnh của trình quản lý hoạt động từ adb mà không cần nhập shell từ xa. Ví dụ:

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

Bảng 1. Các lệnh hiện có trên trình quản lý hoạt động

Lệnh Mô tả
start [options] intent Bắt đầu Activity do intent chỉ định.

Xem Quy cách đối số ý định.

Có các tuỳ chọn sau:

  • -D: Bật tính năng gỡ lỗi.
  • -W: Chờ quá trình khởi động hoàn tất.
  • --start-profiler file: Bắt đầu trình phân tích tài nguyên và gửi kết quả cho file.
  • -P file: Giống như --start-profiler, nhưng việc lập hồ sơ sẽ dừng khi ứng dụng không hoạt động.
  • -R count: Lặp lại việc khởi động hoạt động đó count lần. Trước mỗi lần lặp lại, hoạt động hàng đầu sẽ kết thúc.
  • -S: Buộc dừng ứng dụng đích trước khi bắt đầu hoạt động.
  • --opengl-trace: Bật tính năng theo dõi hàm OpenGL.
  • --user user_id | current: Chỉ định người dùng nào cần chạy; nếu không được xác định, thì chạy như người dùng hiện tại.
startservice [options] intent Bắt đầu Service do intent chỉ định.

Xem Quy cách đối số ý định.

Có các tuỳ chọn sau:

  • --user user_id | current: Chỉ định người dùng nào cần chạy; nếu không được xác định, thì chạy như người dùng hiện tại.
force-stop package Buộc dừng mọi hoạt động liên kết với package.
kill [options] package Loại bỏ tất cả quy trình liên kết với package. Lệnh này chỉ loại bỏ các quy trình có thể an toàn để được loại bỏ và sẽ không ảnh hưởng đến trải nghiệm người dùng.

Có các tuỳ chọn sau:

  • --user user_id | all | current: Chỉ định quy trình nào của người dùng sẽ loại bỏ. Nếu bạn không chỉ định thì loại bỏ tất cả quy trình của người dùng.
kill-all Loại bỏ tất cả quy trình nền.
broadcast [options] intent Đưa ra ý định phát sóng.

Xem Quy cách đối số ý định.

Có các tuỳ chọn sau:

  • [--user user_id | all | current]: Chỉ định người dùng nào sẽ được gửi đến; nếu không chỉ định, gửi cho tất cả người dùng.
instrument [options] component Bắt đầu theo dõi bằng một thực thể Instrumentation. Thông thường, component đích có dạng test_package/runner_class.

Có các tuỳ chọn sau:

  • -r: In kết quả thô (nếu không giải mã report_key_streamresult). Sử dụng cùng với [-e perf true] để tạo đầu ra thô để đo lường hiệu suất.
  • -e name value: Đặt đối số name thành value. Đối với trình kiểm thử, dạng phổ biến là -e testrunner_flag value[,value...].
  • -p file: Ghi dữ liệu cấu hình vào file.
  • -w: Chờ thiết bị đo lường hoàn tất trước khi quay lại. Bắt buộc đối với trình kiểm thử.
  • --no-window-animation: Tắt ảnh động cửa sổ trong khi đang chạy.
  • --user user_id | current: Chỉ định công cụ người dùng nào sẽ chạy. Nếu không có chỉ định, hãy chạy trong người dùng hiện tại.
profile start process file Bắt đầu trình phân tích tài nguyên trên process, hãy ghi kết quả vào file.
profile stop process Dừng tính năng hồ sơ trên process.
dumpheap [options] process file Kết xuất vùng nhớ khối xếp process, ghi vào file.

Có các tuỳ chọn sau:

  • --user [user_id | current]: Khi cung cấp tên quy trình, chỉ định người dùng quy trình để kết xuất. Nếu không chỉ định thì hệ thống sẽ sử dụng người dùng hiện tại.
  • -b [| png | jpg | webp]: Kết xuất bitmap từ bộ nhớ đồ hoạ (API cấp 35 trở lên). Nếu muốn, hãy chỉ định định dạng để kết xuất (PNG theo mặc định).
  • -n: Kết xuất dữ liệu gốc của vùng nhớ khối xếp thay vì vùng nhớ khối xếp được quản lý.
set-debug-app [options] package Hãy đặt ứng dụng package để gỡ lỗi.

Có các tuỳ chọn sau:

  • -w: Chờ trình gỡ lỗi xuất hiện khi ứng dụng khởi động.
  • --persistent: Giữ lại giá trị này.
clear-debug-app Xoá gói đã đặt trước đó để gỡ lỗi bằng set-debug-app.
monitor [options] Bắt đầu theo dõi các sự cố hoặc lỗi ANR.

Có các tuỳ chọn sau:

  • --gdb: Khởi động gdbserv trên cổng đã cho khi gặp sự cố/ANR.
screen-compat {on | off} package Kiểm soát chế độ tương thích với màn hình của package.
display-size [reset | widthxheight] Ghi đè kích thước hiển thị thiết bị. Lệnh này sẽ giúp bạn kiểm thử ứng dụng của mình trên nhiều kích thước màn hình bằng cách bắt chước một độ phân giải màn hình nhỏ trên một thiết bị có màn hình lớn và ngược lại.

Ví dụ:
am display-size 1280x800

display-density dpi Ghi đè mật độ hiển thị của thiết bị. Lệnh này sẽ hữu ích khi kiểm thử ứng dụng trên các mật độ màn hình khác nhau bằng cách bắt chước môi trường màn hình mật độ cao bằng cách sử dụng màn hình có mật độ mật độ thấp và ngược lại.

Ví dụ:
am display-density 480

to-uri intent In bản đặc tả ý định cho trước dưới dạng URI.

Xem Quy cách đối số ý định.

to-intent-uri intent In bản đặc tả ý định cho trước dưới dạng một URI intent:.

Xem Quy cách đối số ý định.

Quy cách cho đối số ý định

Đối với các lệnh của trình quản lý hoạt động mà sử dụng đối số intent, bạn có thể chỉ định ý định đó bằng các tuỳ chọn sau:

Gọi trình quản lý gói (pm)

Trong một shell adb, bạn có thể ra các lệnh bằng công cụ của trình quản lý gói (pm) để thực hiện các hành động và truy vấn về gói ứng dụng được cài đặt trên thiết bị.

Khi ở trong một shell, cú pháp pm là:

pm command

Bạn cũng có thể trực tiếp ra lệnh của trình quản lý gói từ adb mà không cần nhập shell từ xa. Ví dụ:

adb shell pm uninstall com.example.MyApp

Bảng 2. Các lệnh hiện có của trình quản lý gói.

Lệnh Mô tả
list packages [options] filter In tất cả các gói, tuỳ chọn chỉ in những gói có tên gói chứa văn bản trong filter.

Tuỳ chọn:

  • -f: Xem tệp liên kết.
  • -d: Lọc để chỉ cho thấy các gói đã tắt.
  • -e: Lọc để chỉ cho thấy các gói đã bật.
  • -s: Lọc để chỉ cho thấy các gói hệ thống.
  • -3: Lọc để chỉ cho thấy các gói của bên thứ ba.
  • -i: Xem trình cài đặt cho các gói.
  • -u: Bao gồm các gói chưa gỡ cài đặt.
  • --user user_id: Không gian người dùng để truy vấn.
list permission-groups In tất cả các nhóm quyền đã biết.
list permissions [options] group In tất cả các quyền đã biết, tuỳ chọn chỉ những quyền trong group.

Tuỳ chọn:

  • -g: Sắp xếp theo nhóm.
  • -f: In tất cả thông tin.
  • -s: Tóm tắt ngắn.
  • -d: Chỉ liệt kê các quyền nguy hiểm.
  • -u: Chỉ liệt kê các quyền mà người dùng sẽ thấy.
list instrumentation [options] Liệt kê tất cả các gói kiểm thử.

Tuỳ chọn:

  • -f: Liệt kê tệp APK cho gói kiểm thử.
  • target_package: Chỉ liệt kê các gói kiểm thử cho ứng dụng này.
list features In tất cả các tính năng của hệ thống.
list libraries In tất cả các thư viện mà thiết bị hiện tại hỗ trợ.
list users In tất cả người dùng trên hệ thống.
path package In đường dẫn đến tệp APK của package nhất định.
install [options] path Cài đặt một gói (do path chỉ định) vào hệ thống.

Tuỳ chọn:

  • -r: Cài đặt lại một ứng dụng hiện có, giữ lại dữ liệu của ứng dụng đó.
  • -t: Cho phép cài đặt các tệp APK kiểm thử. Gradle tạo ra một tệp APK kiểm thử khi bạn chỉ chạy hoặc gỡ lỗi ứng dụng hoặc sử dụng lệnh Build > Build APK (Tạo > Tạo APK) trên Android Studio. Nếu tệp APK được tạo bằng SDK xem trước dành cho nhà phát triển, bạn phải thêm cả tuỳ chọn -t bằng lệnh install nếu đang cài đặt tệp APK kiểm thử.
  • -i installer_package_name: Chỉ định tên gói của trình cài đặt.
  • --install-location location: Đặt vị trí cài đặt bằng một trong những giá trị sau:
    • 0: Sử dụng vị trí cài đặt mặc định
    • 1: Cài đặt trên bộ nhớ trong của thiết bị
    • 2: Cài đặt trên phương tiện bên ngoài
  • -f: Cài đặt gói trên bộ nhớ trong của hệ thống.
  • -d: Cho phép hạ cấp mã phiên bản.
  • -g: Cấp tất cả các quyền có trong tệp kê khai ứng dụng.
  • --fastdeploy: Cập nhật nhanh gói đã cài đặt bằng cách chỉ cập nhật các phần trong tệp APK đã thay đổi.
  • --incremental: Cài đặt đủ tệp APK để chạy ứng dụng trong khi truyền trực tuyến dữ liệu còn lại trong nền. Để sử dụng tính năng này, bạn phải ký tệp APK, tạo một tệp APK Signature Scheme v4 rồi đặt tệp này trong cùng thư mục với tệp APK đó. Tính năng này chỉ được hỗ trợ trên một số thiết bị nhất định. Tuỳ chọn này buộc adb sử dụng tính năng hoặc không thành công nếu không được hỗ trợ kèm theo thông tin chi tiết về lý do tính năng không hoạt động. Thêm tuỳ chọn --wait để chờ cho đến khi tệp APK được cài đặt hoàn toàn trước khi cấp quyền truy cập vào tệp APK đó.

    --no-incremental ngăn adb sử dụng tính năng này.

uninstall [options] package Xoá một gói khỏi hệ thống.

Tuỳ chọn:

  • -k: Lưu lại các thư mục bộ nhớ đệm và dữ liệu sau khi xoá gói.
  • --user user_id: Chỉ định người dùng cần xoá gói.
  • --versionCode version_code: Chỉ gỡ cài đặt nếu ứng dụng có mã phiên bản cụ thể.
clear package Xoá tất cả dữ liệu liên kết với một gói.
enable package_or_component Bật gói hoặc thành phần đã cho (được viết là "gói/lớp").
disable package_or_component Tắt gói hoặc thành phần đã cho (được viết là "gói/lớp").
disable-user [options] package_or_component

Tuỳ chọn:

  • --user user_id: Người dùng để tắt.
grant package_name permission Cấp quyền cho một ứng dụng. Trên các thiết bị chạy Android 6.0 (API cấp 23) trở lên, quyền này có thể là bất kỳ quyền nào được khai báo trong tệp kê khai ứng dụng. Trên các thiết bị chạy Android 5.1 (API cấp 22) trở xuống, phải là một quyền tuỳ chọn được ứng dụng xác định.
revoke package_name permission Thu hồi quyền của một ứng dụng. Trên các thiết bị chạy Android 6.0 (API cấp 23) trở lên, quyền này có thể là bất kỳ quyền nào được khai báo trong tệp kê khai ứng dụng. Trên các thiết bị chạy Android 5.1 (API cấp 22) trở xuống, phải là một quyền tuỳ chọn được ứng dụng xác định.
set-install-location location Thay đổi vị trí cài đặt mặc định. Giá trị vị trí:
  • 0: Tự động: Để hệ thống quyết định vị trí tốt nhất.
  • 1: Nội bộ: cài đặt trên bộ nhớ trong của thiết bị.
  • 2: Bên ngoài: Cài đặt trên phương tiện bên ngoài.

Lưu ý: Thao tác này chỉ nhằm gỡ lỗi. Việc sử dụng ứng dụng này có thể khiến các ứng dụng bị hỏng và hành vi không mong muốn khác.

get-install-location Trả về vị trí cài đặt hiện tại. Giá trị trả về:
  • 0 [auto]: Tự động: Để hệ thống quyết định vị trí tốt nhất.
  • 1 [internal]: Cài đặt trên bộ nhớ trong của thiết bị
  • 2 [external]: Cài đặt trên phương tiện bên ngoài
set-permission-enforced permission [true | false] Chỉ định xem có cần thực thi quyền đã cho hay không.
trim-caches desired_free_space Cắt bớt các tệp bộ nhớ đệm để đạt được dung lượng trống đã cho.
create-user user_name Tạo một người dùng mới bằng user_name đã cho, in ra giá trị nhận dạng người dùng mới của người dùng đó.
remove-user user_id Xoá người dùng có user_id đã cho, đồng thời xoá tất cả dữ liệu liên kết với người dùng đó
get-max-users In số lượng người dùng tối đa mà thiết bị hỗ trợ.
get-app-links [options] [package]

In trạng thái xác minh miền cho package đã cho hoặc cho tất cả các gói nếu không có gói nào được chỉ định. Mã trạng thái được xác định như sau:

  • none: chưa ghi lại phản hồi nào cho miền này
  • verified: đã xác minh miền thành công
  • approved: hiệu lực được phê duyệt, thường là qua shell
  • denied: hiệu lực bị từ chối, thường là qua shell
  • migrated: giữ nguyên thông tin xác minh từ một phản hồi cũ
  • restored: giữ nguyên thông tin xác minh từ một hành động khôi phục dữ liệu người dùng
  • legacy_failure: bị trình xác minh cũ từ chối, lý do không xác định
  • system_configured: được cấu hình thiết bị phê duyệt tự động
  • >= 1024: Mã lỗi tuỳ chỉnh dành riêng cho trình xác minh thiết bị

Có các tuỳ chọn sau:

  • --user user_id: bao gồm lựa chọn của người dùng. Bao gồm tất cả các miền, chứ không chỉ các miền autoVerify.
reset-app-links [options] [package]

Đặt lại trạng thái xác minh miền cho gói đã cho, hoặc cho tất cả các gói nếu không có gói nào được chỉ định.

  • package: gói cần đặt lại, hoặc "all" để đặt lại tất cả các gói

Có các tuỳ chọn sau:

  • --user user_id: bao gồm lựa chọn của người dùng. Bao gồm tất cả các miền, chứ không chỉ là miền autoVerify.
verify-app-links [--re-verify] [package]

Phát đi thông báo yêu cầu xác minh cho package đã cho hoặc cho tất cả các gói nếu không có gói nào được chỉ định. Chỉ gửi nếu trước đó gói chưa ghi lại phản hồi nào.

  • --re-verify: gửi ngay cả khi gói đã ghi lại phản hồi
set-app-links [--package package] state domains

Đặt trạng thái của miền cho một gói theo cách thủ công. Để tác vụ này hoạt động, gói phải khai báo miền là autoVerify. Lệnh này sẽ không báo cáo lỗi cho những miền không thể áp dụng.

  • --package package: gói cần đặt, hoặc "all" để đặt tất cả các gói
  • state: mã để đặt miền, các giá trị hợp lệ là:
    • STATE_NO_RESPONSE (0): đặt lại như thể chưa phản hồi nào được ghi lại.
    • STATE_SUCCESS (1): coi miền đã được tác nhân xác minh miền xác minh thành công. Xin lưu ý rằng tác nhân xác minh miền có thể ghi đè thông tin này.
    • STATE_APPROVED (2): coi miền là luôn được phê duyệt, không cho phép tác nhân xác minh miền thay đổi miền.
    • STATE_DENIED (3): coi miền là luôn bị từ chối, không cho phép tác nhân xác minh miền thay đổi miền.
  • domains: danh sách được phân tách bằng dấu cách gồm các miền cần thay đổi, hoặc "all" để thay đổi mọi miền.
set-app-links-user-selection --user user_id [--package package] enabled domains

Đặt trạng thái lựa chọn của người dùng máy tính lưu trữ cho một gói theo cách thủ công. Gói phải khai báo miền để mã này hoạt động. Lệnh này sẽ không báo cáo lỗi cho những miền không thể áp dụng.

  • --user user_id: người dùng thay đổi lựa chọn cho
  • --package package: gói cần đặt
  • enabled: liệu có phê duyệt miền hay không
  • domains: danh sách được phân tách bằng dấu cách gồm các miền cần thay đổi, hoặc "all" để thay đổi mọi miền.
set-app-links-user-selection --user user_id [--package package] enabled domains

Đặt trạng thái lựa chọn của người dùng máy tính lưu trữ cho một gói theo cách thủ công. Gói phải khai báo miền để mã này hoạt động. Lệnh này sẽ không báo cáo lỗi cho những miền không thể áp dụng.

  • --user user_id: người dùng thay đổi lựa chọn cho
  • --package package: gói cần đặt
  • enabled: liệu có phê duyệt miền hay không
  • domains: danh sách được phân tách bằng dấu cách gồm các miền cần thay đổi, hoặc "all" để thay đổi mọi miền.
set-app-links-allowed --user user_id [--package package] allowed

Bật/tắt chế độ cài đặt xử lý đường liên kết được xác minh tự động cho một gói.

  • --user user_id: người dùng để thay đổi lựa chọn cho
  • --package package: gói cần đặt, hoặc "all" để đặt tất cả các gói; các gói sẽ được đặt lại nếu không có gói nào được chỉ định.
  • allowed: true để cho phép gói mở đường liên kết được xác minh tự động, false để vô hiệu hoá
get-app-link-owners --user user_id [--package package] domains

In chủ sở hữu của một miền cụ thể cho người dùng nhất định theo thứ tự ưu tiên từ thấp đến cao.

  • --user user_id: người dùng để truy vấn
  • --package package: cũng có thể tuỳ chọn in cho mọi miền web mà một gói khai báo, hoặc "all" để in tất cả các gói
  • domains: danh sách được phân tách bằng dấu cách gồm các miền cần truy vấn

Trình quản lý chính sách thiết bị của lệnh gọi (dpm)

Để giúp bạn phát triển và kiểm thử các ứng dụng quản lý thiết bị, ra các lệnh cho công cụ trình quản lý chính sách thiết bị (dpm). Sử dụng công cụ này để kiểm soát ứng dụng quản trị đang hoạt động hoặc thay đổi dữ liệu về trạng thái của một chính sách trên thiết bị.

Khi ở trong một shell, cú pháp dpm là:

dpm command

Bạn cũng có thể trực tiếp ra một lệnh của trình quản lý chính sách thiết bị ngay từ adb mà không cần nhập shell từ xa:

adb shell dpm command

Bảng 3. Các lệnh hiện có của trình quản lý chính sách thiết bị

Lệnh Mô tả
set-active-admin [options] component Đặt component làm quản trị viên đang hoạt động.

Có các tuỳ chọn sau:

  • --user user_id: Chỉ định người dùng đích. Bạn cũng có thể chuyển --user current để chọn người dùng hiện tại.
set-profile-owner [options] component Đặt component làm quản trị viên đang hoạt động và gói của nó làm chủ sở hữu hồ sơ cho một người dùng hiện tại.

Có các tuỳ chọn sau:

  • --user user_id: Chỉ định người dùng đích. Bạn cũng có thể chuyển --user current để chọn người dùng hiện tại.
  • --name name: Chỉ định tên tổ chức mà con người có thể đọc được.
set-device-owner [options] component Đặt component làm quản trị viên đang hoạt động và gói của nó làm chủ sở hữu thiết bị.

Có các tuỳ chọn sau:

  • --user user_id: Chỉ định người dùng đích. Bạn cũng có thể chuyển --user current để chọn người dùng hiện tại.
  • --name name: Chỉ định tên tổ chức mà con người có thể đọc được.
remove-active-admin [options] component Tắt một quản trị viên đang hoạt động. Ứng dụng phải khai báo android:testOnly trong tệp kê khai. Lệnh này cũng sẽ loại bỏ chủ sở hữu của thiết bị và hồ sơ này.

Có các tuỳ chọn sau:

  • --user user_id: Chỉ định người dùng đích. Bạn cũng có thể chuyển --user current để chọn người dùng hiện tại.
clear-freeze-period-record Xoá bản ghi của các khoảng thời gian đóng băng đã đặt trước đó trên thiết bị cho các bản cập nhật OTA của hệ thống. Việc này rất hữu ích để tránh các hạn chế về việc lập lịch biểu thiết bị khi phát triển các ứng dụng quản lý khoảng thời gian đóng băng. Xem Quản lý bản cập nhật hệ thống.

Được hỗ trợ trên các thiết bị chạy Android 9.0 (API cấp 28) trở lên.

force-network-logs Buộc hệ thống làm cho mọi nhật ký mạng hiện có sẵn sàng truy xuất bằng DPC. Nếu có kết nối hoặc nhật ký DNS, DPC sẽ nhận được lệnh gọi lại onNetworkLogsAvailable(). Xem phần Ghi nhật ký hoạt động mạng.

Lệnh này bị giới hạn tốc độ. Được hỗ trợ trên các thiết bị chạy Android 9.0 (API cấp 28) trở lên.

force-security-logs Buộc hệ thống cung cấp bất kỳ nhật ký bảo mật hiện có nào cho DPC. Nếu có sẵn nhật ký, DPC sẽ nhận được lệnh gọi lại onSecurityLogsAvailable(). Xem Ghi nhật ký hoạt động thiết bị của doanh nghiệp.

Lệnh này bị giới hạn tốc độ. Được hỗ trợ trên các thiết bị chạy Android 9.0 (API cấp 28) trở lên.

Chụp ảnh màn hình

Lệnh screencap là một tiện ích shell để chụp ảnh màn hình thiết bị.

Khi ở trong một shell, cú pháp screencap là:

screencap filename

Để sử dụng screencap từ dòng lệnh, hãy nhập nội dung sau:

adb shell screencap /sdcard/screen.png

Dưới đây là một phiên chụp màn hình mẫu, sử dụng shell adb để chụp ảnh màn hình và lệnh pull để tải tệp xuống qua thiết bị:

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

Quay video

Lệnh screenrecord là một tiện ích shell để ghi lại màn hình của các thiết bị chạy Android 4.4 (API cấp 19) trở lên. Tiện ích này ghi lại hoạt động trên màn hình vào một tệp MPEG-4. Bạn có thể sử dụng tệp này để tạo video quảng cáo hoặc đào tạo hoặc để gỡ lỗi và kiểm thử.

Trong một shell, hãy sử dụng cú pháp sau:

screenrecord [options] filename

Để sử dụng screenrecord từ dòng lệnh, hãy nhập nội dung sau:

adb shell screenrecord /sdcard/demo.mp4

Dừng ghi màn hình bằng cách nhấn tổ hợp phím Control+C. Nếu không, quá trình quay sẽ tự động dừng ở 3 phút hoặc giới hạn thời gian do --time-limit đặt.

Để bắt đầu quay màn hình thiết bị, hãy chạy lệnh screenrecord để quay video. Sau đó, hãy chạy lệnh pull để tải video từ thiết bị xuống máy tính lưu trữ. Dưới đây là ví dụ về một phiên ghi hình:

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

Tiện ích screenrecord có thể ghi lại ở bất kỳ độ phân giải và tốc độ bit nào được hỗ trợ theo yêu cầu của bạn, trong khi vẫn giữ nguyên tỷ lệ khung hình của màn hình thiết bị. Theo mặc định, các bản ghi tiện ích ở độ phân giải và hướng màn hình gốc sẽ có thời lượng tối đa là ba phút.

Các giới hạn của tiện ích screenrecord:

  • Âm thanh sẽ không được ghi lại bằng tệp video.
  • Các thiết bị chạy Wear OS không có tính năng quay video.
  • Một số thiết bị có thể không ghi lại được ở độ phân giải màn hình gốc. Nếu bạn gặp sự cố với việc ghi màn hình, thử sử dụng độ phân giải màn hình thấp hơn.
  • Xoay màn hình trong khi quay không được hỗ trợ. Nếu màn hình xoay trong khi quay, một số màn hình sẽ bị cắt khi quay video.

Bảng 4. Tuỳ chọn screenrecord

Mô tuỳ Mô tả
--help Hiển thị cú pháp và tuỳ chọn lệnh
--size widthxheight Đặt kích thước video: 1280x720. Giá trị mặc định là độ phân giải hiển thị gốc của thiết bị (nếu được hỗ trợ), 1280x720 nếu không được hỗ trợ. Để có kết quả tốt nhất, hãy sử dụng kích thước được bộ mã hoá Video nâng cao (AVC) hỗ trợ trên thiết bị của bạn.
--bit-rate rate Đặt tốc độ bit của video, tính bằng megabit mỗi giây. Giá trị mặc định là 20 Mb/giây. Bạn có thể tăng tốc độ bit để cải thiện chất lượng video. Tuy nhiên, làm như vậy sẽ dẫn đến kích thước các tệp phim lớn hơn. Ví dụ sau đây đặt tốc độ bit bản ghi thành 6Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time Đặt thời gian ghi hình tối đa tính bằng giây. Giá trị mặc định và tối đa là 180 (3 phút).
--rotate Xoay đầu ra 90 độ. Tính năng này đang trong giai đoạn thử nghiệm.
--verbose Hiển thị thông tin nhật ký trên màn hình dòng lệnh. Nếu bạn không đặt tuỳ chọn này, tiện ích sẽ không hiển thị bất kỳ thông tin nào trong khi chạy.

Đọc hồ sơ ART cho ứng dụng

Kể từ Android 7.0 (API cấp 24), Android runtime (ART) sẽ thu thập hồ sơ thực thi cho các ứng dụng đã cài đặt được dùng để tối ưu hoá hiệu suất của ứng dụng. Kiểm tra các hồ sơ đã thu thập để tìm hiểu phương thức nào được thực thi thường xuyên và lớp nào được dùng trong quá trình khởi động ứng dụng.

Lưu ý: Bạn chỉ có thể truy xuất tên tệp hồ sơ thực thi nếu có quyền truy cập thư mục gốc vào hệ thống tệp, chẳng hạn như trên trình mô phỏng.

Để tạo một mẫu văn bản cho thông tin hồ sơ, hãy sử dụng lệnh sau:

adb shell cmd package dump-profiles package

Để truy xuất tệp được tạo, hãy sử dụng:

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

Đặt lại thiết bị thử nghiệm

Nếu bạn kiểm thử ứng dụng trên nhiều thiết bị kiểm thử, có lẽ bạn nên đặt lại thiết bị của mình giữa các lần kiểm thử, chẳng hạn như để loại bỏ dữ liệu người dùng và đặt lại môi trường thử nghiệm. Bạn có thể đặt lại thiết bị kiểm thử chạy trên Android 10 (API cấp 29) trở lên về trạng thái ban đầu bằng lệnh shell testharness adb, như minh hoạ bên dưới.

adb shell cmd testharness enable

Khi khôi phục thiết bị bằng testharness, thiết bị sẽ tự động sao lưu khoá RSA cho phép gỡ lỗi qua máy trạm hiện tại ở một vị trí ổn định. Nghĩa là, sau khi thiết bị được đặt lại, máy trạm có thể tiếp tục gỡ lỗi và ra các lệnh adb cho thiết bị mà không cần đăng ký khoá mới theo cách thủ công.

Ngoài ra, để giúp bạn tiếp tục thử nghiệm ứng dụng một cách dễ dàng và an toàn hơn, hãy dùng testharness để khôi phục thiết bị cũng sẽ thay đổi các chế độ cài đặt sau trên thiết bị:

  • Thiết bị thiết lập một số cài đặt hệ thống nhất định để trình hướng dẫn thiết lập thiết bị ban đầu không xuất hiện. Nghĩa là, thiết bị chuyển sang trạng thái mà từ đó bạn có thể nhanh chóng cài đặt, gỡ lỗi và kiểm thử ứng dụng.
  • Cài đặt:
    • Tắt màn hình khoá
    • Tắt cảnh báo khẩn cấp
    • Tắt tính năng tự động đồng bộ hoá cho tài khoản
    • Tắt tính năng tự động cập nhật hệ thống
  • Khác:
    • Tắt các ứng dụng bảo mật được cài đặt sẵn

Nếu ứng dụng của bạn cần phát hiện và điều chỉnh cho phù hợp với chế độ cài đặt mặc định của lệnh testharness, hãy sử dụng ActivityManager.isRunningInUserTestHarness().

sqlite

sqlite3 bắt đầu chương trình dòng lệnh sqlite để kiểm tra cơ sở dữ liệu SQLite. Nó bao gồm các lệnh như .dump để in (print) nội dung của bảng và .schema để in câu lệnh SQL CREATE cho bảng hiện có. Bạn cũng có thể thực thi các lệnh SQLite qua dòng lệnh, như dưới đây.

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

Lưu ý: Bạn chỉ có thể truy cập cơ sở dữ liệu SQLite nếu có quyền truy cập thư mục gốc vào hệ thống tệp, chẳng hạn như trên trình mô phỏng.

Để biết thêm thông tin, hãy xem tài liệu về dòng lệnh sqlite3.

Phần phụ trợ USB adb

Máy chủ adb có thể tương tác với ngăn xếp USB thông qua 2 phần phụ trợ. Ứng dụng này có thể sử dụng phần phụ trợ gốc của hệ điều hành (Windows, Linux hoặc macOS) hoặc có thể sử dụng phần phụ trợ libusb. Một số tính năng, chẳng hạn như attach, detach và phát hiện tốc độ USB, chỉ có sẵn khi sử dụng phần phụ trợ libusb.

Bạn có thể chọn một phần phụ trợ bằng cách sử dụng biến môi trường ADB_LIBUSB. Nếu bạn không đặt, adb sẽ sử dụng phần phụ trợ mặc định. Hành vi mặc định khác nhau giữa các hệ điều hành. Kể từ ADB phiên bản 34, phần phụ trợ liubusb được sử dụng theo mặc định trên tất cả hệ điều hành, ngoại trừ Windows, nơi phần phụ trợ gốc được sử dụng theo mặc định. Nếu bạn đặt ADB_LIBUSB, thì thuộc tính này sẽ xác định xem có sử dụng phần phụ trợ gốc hay libusb hay không. Hãy xem trang hướng dẫn về adb để biết thêm thông tin về các biến môi trường adb.

Phần phụ trợ mDNS adb

ADB có thể sử dụng giao thức DNS đa địa chỉ để tự động kết nối máy chủ và thiết bị. Máy chủ ADB cung cấp hai phần phụ trợ, Bonjour (mdnsứnger của Apple) và Openscreen.

Phần phụ trợ Bonjour cần có một trình nền đang chạy trên máy chủ lưu trữ. Trên macOS, trình nền tích hợp của Apple luôn chạy, nhưng trên Windows và Linux, người dùng phải đảm bảo trình nền mdnsd đang chạy. Nếu lệnh adb mdns check trả về lỗi, thì có thể ADB đang sử dụng phần phụ trợ Bonjour nhưng không có trình nền Bonjour nào đang chạy.

Phần phụ trợ Openscreen không cần trình nền chạy trên máy. Hỗ trợ cho phần phụ trợ Openscreen trên macOS bắt đầu từ ADB phiên bản 35. Windows và Linux được hỗ trợ kể từ ADB phiên bản 34.

Theo mặc định, ADB sử dụng phần phụ trợ Bonjour. Bạn có thể thay đổi hành vi này bằng cách sử dụng biến môi trường ADB_MDNS_OPENSCREEN (đặt thành 1 hoặc 0). Hãy xem trang hướng dẫn sử dụng ADB để biết thêm chi tiết.