adb參數詳解

文章目錄

        • 1. -d
        • 2. -e
        • 3. -s
        • 4. -t
        • 5. -H
        • 6. -P
        • 7. -L
        • 8. --one-device
        • 9. --exit-on-write-error
        • 10. connect / disconnect
        • 11. pair
        • 12. forward
        • 13. forward --list
        • 14. reverse
        • 15. mdns check
        • 16. mdns services
        • 17. push
        • 18. pull
        • 19. sync
        • 20.shell
        • 21. install
        • 22. uninstall
        • 23. bugreport
        • 24. jdwp
        • 25. logcat
        • 26. disable-verity / enable-verity
        • 27. keygen FILE
        • 28. wait-for[-TRANSPORT]-STATE...
        • 29. get-state
        • 30. get-serialno
        • 31. get-devpath
        • 32. remount -R
        • 33. reboot
        • 34. sideload
        • 35. root
        • 36. unroot
        • 37. usb
        • 38. tcp/ip PORT
        • 39. Restart-server/kill-server
        • 40. reconnect
    • adb環境變量詳解
      • 1. ADB_TRACE
      • 2. ANDROID_SERIAL
        • 3. ANDROID_ADB_SERVER_PORT
        • 4. ADB_VENDOR_KEYS
        • 5. ANDROID_HOME
        • 6. 包含 ADB 可執行文件的路徑
        • 7. ADB_LOCAL_TRANSPORT_MAX_PORT
        • 8. export ADB_MDNS_AUTO_CONNECT=1

1. -d
adb -d install app.apk

d代表device,具體含義為指定 ADB 命令應該作用于唯一連接的 USB 設備。

這個參數通常用于以下場景:

  1. 多設備環境:當你有多個 Android 設備(或模擬器)連接到計算機時,使用 -d 可以確保命令只作用于通過 USB 連接的物理設備。
  2. 排除模擬器:當你同時運行模擬器和連接了物理設備時,使用 -d 可以確保命令只針對物理設備執行。
  3. 提高效率:在只有一個 USB 設備連接的情況下,使用 -d 可以避免 ADB 搜索其他可能的連接(如網絡設備或模擬器)。
2. -e
adb -e install app.apk

e代表emulator, 用于連接唯一運行的模擬器實例。

這個參數通常用于以下場景:

  1. 多設備環境:當你同時有物理設備和模擬器運行時,使用 -e 可以確保命令只作用于模擬器。
  2. 多模擬器環境:如果你只運行了一個模擬器實例,使用 -e 可以快速指向該模擬器,而不需要指定模擬器的名稱或端口。
  3. 測試和開發:在進行應用開發和測試時,經常需要在模擬器上運行命令,-e 參數可以簡化這個過程。
3. -s
adb -s install app.apk

-s 參數代表 “serial”, 用于連接指定序列號的設備。

這個參數通常用于以下場景:

  1. 多設備環境:當你同時連接了多個 Android 設備或模擬器時,使用 -s 可以精確指定要操作的設備。
  2. 自動化腳本:在編寫自動化測試或部署腳本時,使用 -s 可以確保命令作用于正確的設備。
  3. 特定設備操作:當你需要在多個設備中對特定設備執行操作時,-s 參數非常有用。
4. -t
adb -t <transport_id> shell

-t 參數代表 “transport_id”, 作用于特定傳輸 ID 的設備。

這個參數通常用于以下場景:

  1. 高級調試:當設備有多個傳輸通道時(例如,同時通過 USB 和網絡連接),可以使用 -t 來指定特定的傳輸通道。
  2. 特殊開發環境:在某些復雜的開發或測試環境中,可能需要精確控制 ADB 使用的傳輸通道。
  3. 系統級開發:對 Android 系統本身進行開發或調試時,可能會用到這個參數。

當然這個transport_id是一個內部序列號,不像設備序列號那樣容易獲取或識別。它主要用于一些比較特殊的狀況,大多數日常 Android 開發和調試工作不需要使用它。

5. -H
adb -H 192.168.1.12 devices

-H 參數代表 “host”, 用于指定運行的主機名或 IP 地址。

這個參數通常用于以下場景:

  1. 遠程調試:當 ADB 服務器運行在遠程機器上,而不是本地機器時。
  2. 網絡環境:在復雜的網絡設置中,可能需要明確指定 ADB 服務器的位置。
  3. 自定義開發環境:某些特殊的開發或測試環境可能需要連接到特定主機上的 ADB 服務器。

使用 -H 參數時需要注意

  1. 默認情況下,ADB 客戶端連接到本地(localhost)的 ADB 服務器。
  2. 使用遠程 ADB 服務器時,需要確保網絡連接正常,且遠程主機允許 ADB 連接。
  3. 在某些情況下,可能還需要配合使用 -P 參數來指定端口號。
6. -P
adb -P 5037 devices

-P 參數代表 “port”, 指定要連接的 ADB 服務器的端口號。

這個參數通常用于以下場景:

  1. 自定義端口:當 ADB 服務器運行在非默認端口上時(adb默認端口是5037)。
  2. 多 ADB 服務器:在同一臺機器上運行多個 ADB 服務器實例,每個使用不同的端口。
  3. 網絡調試:通過網絡連接到遠程 ADB 服務器時,可能需要指定特定的端口。
  4. 防火墻配置:在某些網絡環境中,可能只有特定端口允許 ADB 通信。
adb -P 5037 devices

這條命令會連接到本地運行在 5037 端口(ADB 的默認端口)上的 ADB 服務器,并列出連接的設備。

adb -H 192.168.1.100 -P 5555 shell

這條命令會連接到 IP 地址為 192.168.1.100,端口號為 5555 的 ADB 服務器,并在連接的設備上啟動一個 shell 會話。

注意事項

  1. ADB 的默認端口是 5037。如果不指定 -P 參數,ADB 會嘗試連接到這個默認端口。
  2. -P 參數通常與 -H 參數一起使用,特別是在連接到遠程 ADB 服務器時。
  3. 使用非默認端口時,需要確保該端口未被其他服務占用,并且在必要的防火墻中開放。
7. -L
adb -L tcp:xxx

-L 參數代表 “listen”,用于指定一個地址和端口,讓 ADB 服務器監聽這個地址和端口上的連接。

這個參數主要用于以下場景:

  1. 遠程調試:允許其他機器通過網絡連接到這個ADB服務器;
  2. 自定義網絡配置:在特定的網絡環境中,可能需要ADB服務器監聽特定的地址或者端口;
  3. 安全性考慮:可以限制ADB服務器只監聽特定的網絡接口。
adb -L tcp:5037

這條命令會讓 ADB 服務器監聽所有網絡接口的 5037 端口(ADB 的默認端口)。

adb -L tcp:192.168.1.100:5555

這條命令會讓 ADB 服務器只在 IP 地址 192.168.1.100 的 5555 端口上監聽連接。

注意事項:

  1. 使用 -L 參數時,ADB 服務器會重新啟動并開始監聽指定的地址和端口。
  2. 這個參數主要用于 ADB 服務器的配置,而不是用于執行常規的 ADB 命令。
  3. 使用此參數可能會帶來安全風險,因為它可能允許網絡上的其他設備連接到你的 ADB 服務器。在使用時應確保網絡環境是安全的。
  4. 在某些情況下,你可能需要配合使用防火墻規則來控制對這個端口的訪問。
8. --one-device
adb --one-device install app.apk

只在單個設備上執行,即使有多個設備連接到計算機。經常看到錯誤日志more than one devices的問題,那么就可以使用one-device參數了。

使用場景是:

  1. 自動化腳本:確保腳本在單一設備環境中運行。

  2. 快速測試:當你知道只應該有一個設備連接時,可以使用此參數進行快速檢查。

9. --exit-on-write-error
adb --exit-on-write-error push large_file.dat /sdcard/

遇到寫入錯誤時,立即退出 ADB 命令. 比如以上命令是嘗試將 large_file.dat 推送到設備的 /sdcard/ 目錄。如果在傳輸過程中遇到任何寫入錯誤,命令將立即退出。

使用場景:

  1. 大文件傳輸:確保大文件完整無誤地傳輸到設備。

  2. 自動化腳本:在文件同步或安裝過程中快速捕獲并響應錯誤。

  3. 關鍵數據操作:當數據完整性至關重要時。

這個參數在需要嚴格控制數據完整性的情況下特別有用,比如在系統更新、重要數據備份或其他關鍵文件傳輸操作中。它提供了一種快速失敗的機制,有助于及時發現和處理傳輸錯誤。

10. connect / disconnect
adb connect 127.0.0.1:2333
adb disconnect 127.0.0.1:2333

通過 Wi-Fi 或以太網連接到 Android 設備,而不是使用 USB 連接. 如果不指定端口,默認端口是5555

11. pair
adb pair <ip_address>:<port> [pairing code]

用于與 Android 11(API 級別 30)及更高版本的設備進行無線調試配對。這是一個更安全的無線調試方法。

使用步驟:
a. 在 Android 設備上啟用無線調試(在開發者選項中)。
b. 在設備上獲取配對碼和 IP 地址:端口。
c. 在電腦上使用 adb pair 命令進行配對。

使用實例:

adb pair 192.168.1.100:37000

然后按提示輸入設備顯示的配對碼。或者直接在命令中包含配對碼:

adb pair 192.168.1.100:37000 123456

注意事項:

  1. 僅適用于 Android 11 及更高版本。

  2. 配對過程有時間限制,通常需要在設備顯示配對碼后的短時間內完成。

  3. 配對成功后,還需要使用 adb connect 來建立實際的調試連接。

12. forward

forward 是一個用于設置端口轉發的 ADB 命令。它允許你將主機(可以理解為電腦)上的端口轉發到連接的 Android 設備或模擬器上的端口。

主要用途:

  1. 創建從主機(電腦)到 Android 設備的端口轉發;
  2. 允許主機(電腦)上運行的應用與設備上的服務進行通信。

基本語法:

adb forward <local> <remote>

其中 是主機上的規范,是設備上的規范。

常見的規范類型為:

  • tcp:<port>: TCP 端口
  • localabstract:<unix domain socket name>: Android 的抽象 Unix 域套接字
  • localreserved:<unix domain socket name>: 保留的 Unix 域套接字
  • localfilesystem:<unix domain socket name>: Unix 域套接字
  • dev:<character device name>: 字符設備

使用實例:

adb forward tcp:27042 tcp:27042

將主機上的 27042 端口轉發到設備上的 27042 端口, 這個命令就是frida框架需要的命令

adb forward tcp:6100 localabstract:debug_socket

將主機上的 6100 端口轉發到設備上名為 “debug_socket” 的抽象 Unix 域套接字.

另外

adb forward --remove:用于刪除特定的轉發規則。
adb forward --remove-all:用于刪除所有轉發規則。
adb forward --no-rebind: 如果指定的本地規范已經被使用,則不重新綁定它。
13. forward --list

用于列出所有已設置的端口轉發規則的 ADB 命令。

$ adb forward --list
emulator-5554 tcp:5000 tcp:6000
1234567890ABCDEF tcp:8080 tcp:9090

輸出的每一行都包含三個部分:設備序列號、本地規范和遠程規范。

14. reverse

與forward 功能一致,但是轉發方向是相反的,用于設置從 Android 設備到主機(電腦)的端口轉發。

adb reverse <remote> <local>

其中 <remote> 是設備上的規范,<local> 是主機上的規范。

使用場景:

  • Web 開發:允許設備上的應用訪問主機上運行的開發服務器。
  • 調試:使設備能夠連接到主機上運行的調試工具。
  • 測試:設備上的應用可以訪問主機上的模擬服務。

使用例子:

adb reverse tcp:8081 tcp:8081

意味著將設備上的 8081 端口轉發到主機上的 8081 端口。熟悉 React Native 開發的人應該經常用這個命令。

當然后面的 --remove, --remove-all--no-rebind功能與forward功能一致。

15. mdns check

用于檢查設備 mDNS(多播 DNS)服務狀態的 ADB 命令,主要用于無線調試相關的功能。

主要用途:

  1. 檢查設備上的 mDNS 服務是否正在運行和廣播;
  2. 用于無線調試功能的診斷。

使用場景:

  1. 設置無線調試時的故障排除
  2. 驗證設備是否準備好進行無線配對和連接
  3. 診斷無線 ADB 連接問題

如果 mDNS 服務正常運行并廣播,可能會顯示類似 “OK” 或詳細的狀態信息;如果存在問題,會顯示錯誤信息或狀態說明

使用方式:

adb mdns check
16. mdns services

用于列出設備上當前廣播的 mDNS(多播 DNS)服務,主要用于無線調試和網絡服務發現相關的功能。

主要用途:

  1. 列出設備上當前正在廣播的 mDNS 服務。

  2. 用于診斷和驗證無線調試和其他網絡服務。

使用場景:

  1. 驗證無線調試服務是否正在廣播
  2. 檢查設備上其他使用 mDNS 的應用或服務
  3. 網絡服務發現和診斷
$ adb mdns services
registered service: _adb-tls-connect._tcp. 'ABCD1234' port=37401
registered service: _dartobservatory._tcp. 'Dart VM Observatory' port=54321

這個輸出顯示了兩個服務:一個是 ADB 無線調試服務,另一個是 Dart VM Observatory(常見于 Flutter 開發).

17. push

將文件或目錄從計算機復制到 Android 設備:

push [--sync] [-z ALGORITHM] [-Z]  LOCAL... REMOTE
  1. [--sync]

    • 意義:同步模式

    • 功能:只復制新的或已修改的文件,跳過已存在且未更改的文件

    • 用途:提高效率,特別是在推送大量文件或頻繁更新時

  2. [-z ALGORITHM]

    • 意義:壓縮傳輸

    • 功能:使用指定的算法壓縮數據進行傳輸

    • ALGORITHM 可以是:

      • brotli
      • lz4
      • zstd
    • 用途:減少傳輸時間,特別是在網絡帶寬有限的情況下

  3. [-Z]

    • 意義:禁用壓縮

    • 功能:即使默認啟用了壓縮,也強制不使用壓縮

    • 用途:當傳輸已經壓縮的文件(如 zip、jpeg)時,避免不必要的壓縮處理

  4. LOCAL...

    • 意義:本地源文件或目錄

    • 功能:指定要推送的本地文件或目錄

    • 注意:... 表示可以指定多個本地源

  5. REMOTE

    • 意義:遠程目標路徑
    • 功能:指定 Android 設備上的目標位置
18. pull
pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL

從 Android 設備拉取(復制)文件或目錄到本地計算機。詳細解析這些參數:

  1. [-a]

    • 意義:保留文件時間戳

    • 功能:保持原文件的時間戳不變,而不是使用當前時間

    • 用途:在需要保持文件原始時間屬性的情況下很有用,如備份或同步操作

  2. [-z ALGORITHM]

    • 意義:壓縮傳輸

    • 功能:使用指定的算法壓縮數據進行傳輸

    • ALGORITHM 可以是:

      • brotli
      • lz4
      • zstd
    • 用途:減少傳輸時間,特別是在網絡帶寬有限的情況下

  3. [-Z]

    • 意義:禁用壓縮

    • 功能:即使默認啟用了壓縮,也強制不使用壓縮

    • 用途:當傳輸已經壓縮的文件(如 zip、jpeg)時,避免不必要的壓縮處理

  4. REMOTE...

    • 意義:Android 設備上的源文件或目錄

    • 功能:指定要拉取的設備上的文件或目錄

    • 注意:... 表示可以指定多個遠程源

  5. LOCAL

    • 意義:本地目標路徑
    • 功能:指定文件或目錄在本地計算機上的保存位置
19. sync

用于在本地開發機和 Android 設備之間同步文件系統。這個命令主要用于系統級開發,如定制 ROM 或系統應用開發。使用模式如下:

 sync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor]

參數如下:

  1. [-l]

    • 意義:列表模式(List only)

    • 功能:只列出要同步的文件,但不實際執行同步操作

    • 用途:預覽將要同步的內容,用于檢查和驗證

  2. [-z ALGORITHM]

    • 意義:壓縮傳輸

    • 功能:使用指定的算法壓縮數據進行傳輸

    • ALGORITHM 可以是:

      • brotli
      • lz4
      • zstd
    • 用途:減少傳輸時間,特別是在同步大量數據時

  3. [-Z]

    • 意義:禁用壓縮

    • 功能:即使默認啟用了壓縮,也強制不使用壓縮

    • 用途:當同步已壓縮的文件時,避免不必要的壓縮處理

  4. 同步選項:

    • all: 同步所有分區
    • data: 同步 /data 分區
    • odm: 同步 /odm 分區(設備特定的修改)
    • oem: 同步 /oem 分區(原始設備制造商修改)
    • product: 同步 /product 分區(產品特定的配置)
    • system: 同步 /system 分區
    • system_ext: 同步 /system_ext 分區(系統擴展)
    • vendor: 同步 /vendor 分區(供應商特定的修改)

使用實例:

  1. 列出需要同步的系統文件:

    adb sync -l system
    
  2. 使用壓縮同步所有分區:

    adb sync -z zstd all
    
  3. 同步 vendor 分區但不使用壓縮:

    adb sync -Z vendor
    
  4. 同步 data 分區:

    adb sync data
    

注意事項

  1. 權限要求:
    • 同步系統分區通常需要設備有 root 權限或處于解鎖狀態。
    • 對于生產設備,許多分區可能是只讀的,無法同步。
  2. 使用場景:
    • 主要用于系統開發、ROM 定制和 OEM 開發。
    • 不適用于常規應用開發或用戶級操作。
  3. 數據安全:
    • 同步操作可能會覆蓋設備上的現有數據,使用時需謹慎。
20.shell

用于在連接的 Android 設備上啟動一個交互式 shell 會話或執行特定的 shell 命令。這是一個非常強大的工具,允許開發者直接與 Android 設備的底層系統交互。我們來看一下其詳細參數:

adb shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...] 
  1. [-e ESCAPE]

    • 意義:設置escape字符

    • 功能:指定用于終止 adb shell 會話的轉義字符

    • 默認值:~(波浪號)

    • 用途:當默認的轉義字符與您的輸入沖突時,可以自定義

  2. [-n]

    • 意義:不讀取或執行 rc 文件

    • 功能:啟動 shell 時不讀取和執行 shell 的啟動文件(如 .bashrc)

    • 用途:獲得一個"干凈"的 shell 環境,不受本地配置影響

  3. [-T]

    • 意義:強制使用原始終端模式

    • 功能:禁用 PTY(偽終端)分配

    • 用途:在某些腳本或自動化場景中有用,可以避免某些終端相關的問題

  4. [-t]

    • 意義:強制使用終端模式

    • 功能:強制分配一個 PTY

    • 用途:確保獲得一個完整的交互式 shell

  5. [-x]

    • 意義:禁用遠程 shell 協議

    • 功能:使用簡單的 stdin/stdout 傳輸,而不是更高級的 shell 協議

    • 用途:在某些兼容性問題或調試場景中有用

  6. [COMMAND...]

    • 意義:要在設備上執行的 shell 命令
    • 功能:直接執行指定的命令,而不是啟動交互式 shell
    • 用途:快速執行單個或一系列命令

使用實例:

  1. 使用自定義轉義字符:

    adb shell -e ^
    
  2. 強制使用原始終端模式執行命令:

    adb shell -T "ps | grep com.example.app"
    
  3. 禁用遠程 shell 協議執行命令:

    adb shell -x "echo Hello > /sdcard/test.txt"
    
21. install

adb install 命令用于將 Android 應用程序(APK 文件)安裝到連接的 Android 設備上。詳細參數為:

adb install [-lrtsdg] [--instant] PACKAGE
  1. -l: 鎖定應用程序

    • 意義:將應用程序安裝到 /data/app-private

    • 用途:使應用程序無法被備份或移動到外部存儲

  2. -r: 替換已存在的應用程序

    • 意義:如果應用程序已經存在,則重新安裝并保留其數據

    • 用途:更新已安裝的應用程序

  3. -t: 允許安裝測試 APK

    • 意義:允許安裝標記為測試的應用程序

    • 用途:用于安裝專門用于測試的 APK 版本

  4. -s: 將應用程序安裝到 sdcard

    • 意義:將應用程序安裝到外部存儲(如 SD 卡)而不是內部存儲

    • 用途:當設備內部存儲空間不足時使用

  5. -d: 允許版本降級

    • 意義:允許安裝比當前安裝版本更低版本的應用程序

    • 用途:測試舊版本或特定版本的應用程序

  6. -g: 授予應用程序清單中列出的所有權限

    • 意義:自動授予應用程序請求的所有權限,無需用戶確認

    • 用途:簡化測試過程,避免手動授權步驟

  7. --instant: 將應用程序作為即時應用安裝

    • 意義:安裝即時應用版本

    • 用途:用于測試和部署即時應用

  8. PACKAGE: 要安裝的 APK 文件路徑

    • 意義:指定要安裝的 APK 文件的位置
    • 可以是設備上的路徑,也可以是本地計算機上的路徑

實例:

  1. 基本安裝:

    adb install app.apk
    
  2. 替換已存在的應用:

    adb install -r app.apk
    
  3. 安裝測試 APK 并自動授予權限:

    adb install -t -g test_app.apk
    
  4. 允許降級安裝:

    adb install -d older_version.apk
    

另外,在存在install-multiple命令:

install-multiple [-lrtsdpg] [--instant] PACKAGE...

用于同時安裝多個 APK文件到 Android 設備上,其命令已經介紹,舉個例子:

adb install-multiple base.apk split_config.arm64_v8a.apk split_config.en.apk

但是需要注意的事項為:

  1. 這個命令主要用于處理拆分 APK 或應用包(App Bundles)生成的多個 APK 文件;
  2. 所有指定的 APK 必須屬于同一個應用(具有相同的包名);
  3. 使用 -p 選項時要確保安裝的 APK 組合是有效的,否則可能導致應用無法正常運行;
  4. 安裝多個 APK 可能需要更長的時間,特別是在較舊或性能較低的設備上;
  5. 不是所有 Android 設備或 ADB 版本都支持所有這些選項,使用前可能需要驗證兼容性;
  6. install-multiple 命令在處理現代 Android 應用分發格式(如 App Bundles)時特別有用,它允許開發者更靈活地管理復雜的應用結構和不同的設備配置。

當然,我們還可以同時安裝不同包名的app,命令為:

install-multi-package [-lrtsdpg] [--instant] PACKAGE...

舉例為:

adb install-multi-package app1.apk app2.apk app3.apk
22. uninstall

卸載指定的應用

adb uninstall -k packagename

-k : 保留緩存文件和數據文件夾

23. bugreport

一個非常有用的 Android 調試工具,用于生成設備的詳細診斷報告。這個命令會收集大量的系統信息和日志,對于開發者和技術支持人員來說非常有價值。

主要用法很簡單,直接

adb bugreport

用于收集設備的全面診斷信息,并生成一個包含系統狀態、日志和其他重要數據的報告。

主要生成包括:

  • 系統日志(logcat)
  • 系統屬性
  • 進程列表
  • 內存使用情況
  • CPU 使用情況
  • 網絡統計
  • 電池統計
  • 崩潰報告
  • 安裝的應用列表
  • 硬件信息
  • 等等…
24. jdwp

是與 Java Debug Wire Protocol (JDWP) 相關的一個重要調試工具,用于列出和操作設備上可調試的 Java 進程。命令為:

adb jdwp
25. logcat

直接輸出andorid的logcat

adb logcat

即可查看android logcat日志

26. disable-verity / enable-verity

命令用于禁用 Android 設備上的 dm-verity(設備映射完整性驗證)。這是一個高級命令,主要用于開發和測試目的。

命令行為:

adb disable-verify
  1. dm-verity 簡介:

    • 一種 Linux 內核安全特性

    • 用于驗證塊設備(如系統分區)的完整性

    • 防止未經授權的系統修改

  2. 使用場景:

    • 系統級開發和測試

    • 修改系統文件或分區

    • 安裝某些需要系統級修改的應用或模塊

  3. 執行效果:

    • 禁用后,系統將不再驗證系統分區的完整性

    • 允許對系統分區進行寫入操作

  4. 注意事項:

    • 需要設備已解鎖 bootloader

    • 通常需要 root 權限

    • 會降低設備的安全性

    • 可能導致 OTA 更新失敗

  5. 重要警告:

    • 禁用 dm-verity 可能使設備更容易受到攻擊

    • 不建議在個人使用的設備上禁用

  6. 相關命令:

    • adb enable-verity: 重新啟用 dm-verity

    • adb reboot: 在禁用/啟用 verity 后需要重啟設備

  7. 使用步驟:
    a. 確保設備已解鎖 bootloader 并啟用 USB 調試
    b. 執行 adb disable-verity
    c. 重啟設備:adb reboot

27. keygen FILE

keygen FILE 命令用于生成 ADB(Android Debug Bridge)認證密鑰。這個命令在 ADB 安全性和設備認證方面扮演著重要角色,使用方式如下:

adb keygen FILE
  1. 功能:

    • 生成一個新的 ADB 私鑰-公鑰對

    • 將生成的密鑰保存到指定的文件中

  2. 參數:

    • FILE: 指定生成的密鑰文件的路徑和名稱
  3. 生成的文件:

    • 私鑰文件:指定的 FILE

    • 公鑰文件:FILE.pub

  4. 用途:

    • 用于 ADB 客戶端和 Android 設備之間的安全認證

    • 替換默認的 ADB 密鑰對

  5. 安全性:

    • 增強 ADB 連接的安全性

    • 允許自定義和管理 ADB 認證密鑰

  6. 使用場景:

    • 設置新的開發環境

    • 增強 ADB 連接的安全性

    • 在多個開發者之間共享一個通用的 ADB 密鑰

  7. 密鑰工作原理:

    • 私鑰保存在開發機器上

    • 公鑰需要添加到 Android 設備的授權密鑰列表中

  8. 后續步驟:

    • 生成密鑰后,需要將公鑰添加到 Android 設備

    • 通常通過將公鑰復制到設備的 /data/misc/adb/adb_keys 文件中

  9. 注意事項:

    • 生成新密鑰后,可能需要重新授權 ADB 連接

    • 保護生成的私鑰文件的安全,不要分享給他人

  10. 相關命令:

    • adb pubkey: 顯示 ADB 公鑰

    • adb connect: 使用新密鑰連接到設備

  11. 最佳實踐:

    • 定期更新 ADB 密鑰以提高安全性

    • 在共享開發環境中使用自定義密鑰

    • 妥善保管生成的私鑰文件

  12. 密鑰管理:

    • 可以為不同項目或環境生成不同的密鑰對

    • 在多人開發團隊中,可以使用共享的密鑰對

  13. 故障排除:

    • 如果新密鑰不工作,確保公鑰正確添加到設備

    • 檢查 ADB 服務器是否正在使用新密鑰

  14. 安全建議:

    • 不要在不受信任的網絡上使用 ADB
    • 定期檢查已授權的 ADB 密鑰列表

使用實例:

adb keygen ~/.android/adbkey

這將在 ~/.android/ 目錄下生成 adbkey(私鑰)和 adbkey.pub(公鑰)文件。

28. wait-for[-TRANSPORT]-STATE…

wait-for-[TRANSPORT]-STATE 命令是一個非常有用的工具,用于等待設備進入特定狀態。這個命令在自動化腳本和持續集成/持續部署(CI/CD)流程中特別有價值。讓我們詳細解析這個命令:

  1. 基本語法:

    adb wait-for-[TRANSPORT]-STATE
    
  2. TRANSPORT 選項:

    • device: 等待任何設備

    • usb: 只等待 USB 連接的設備

    • local: 只等待通過 TCP/IP 連接的設備

  3. STATE 選項:

    • device: 設備已連接并可用

    • recovery: 設備處于恢復模式

    • sideload: 設備處于 sideload 模式

    • bootloader: 設備處于 bootloader 模式

    • disconnect: 設備斷開連接

  4. 功能:

    • 阻塞執行,直到指定的設備狀態出現

    • 當設備進入指定狀態時,命令返回

  5. 使用場景:

    • 自動化測試腳本

    • 設備刷機流程

    • CI/CD 管道中的設備操作

  6. 常見用法示例:

    • 等待任何設備連接:

      adb wait-for-device
      
    • 等待 USB 設備進入 recovery 模式:

      adb wait-for-usb-recovery
      
    • 等待本地(TCP/IP)設備連接:

      adb wait-for-local-device
      
  7. 超時行為:

    • 命令默認沒有超時限制,會一直等待直到條件滿足

    • 可以通過腳本或其他方式設置超時邏輯

  8. 腳本集成:

    • 常用于 shell 腳本中,在執行其他 ADB 命令之前確保設備就緒

    • 例如:

      adb wait-for-device && adb shell some_command
      
  9. 調試用途:

    • 幫助開發者跟蹤設備狀態變化

    • 在復雜的設備操作流程中提供同步點

  10. 注意事項:

    • 如果有多個設備連接,命令可能會對第一個匹配條件的設備響應

    • 在使用 local 選項時,確保已正確設置 TCP/IP 連接

  11. 與其他命令結合:

    • 常與 adb reboot 等命令配合使用

    • 例如,重啟到 recovery 并等待:

      adb reboot recovery && adb wait-for-recovery
      
  12. 在 CI/CD 中的應用:

    • 確保設備在執行測試或部署前處于正確狀態

    • 提高自動化流程的穩定性

  13. 故障排除:

    • 如果命令似乎卡住,檢查設備連接和狀態

    • 確保 ADB 服務器正在運行

  14. 最佳實踐:

    • 在腳本中加入適當的超時機制

    • 考慮添加錯誤處理邏輯,以應對設備未能進入預期狀態的情況

  15. 高級用法:

    • 可以結合 adb devices 命令來處理多設備情況
    • 在復雜的刷機或恢復流程中作為檢查點
29. get-state

返回當前連接的 Android 設備的狀態

adb get-state
  1. 可能的輸出狀態:

    • device: 設備已連接且可用

    • offline: 設備已連接但不可用

    • unknown: 設備狀態未知

    • bootloader: 設備處于 bootloader 模式

    • recovery: 設備處于恢復模式

    • sideload: 設備處于 sideload 模式

    • unauthorized: 設備已連接但未授權 ADB 連接

  2. 使用場景:

    • 快速檢查設備狀態

    • 在腳本中用于條件判斷

    • 故障排除過程中確認設備連接狀態

  3. 特點:

    • 簡潔:只返回一個單詞的狀態
    • 快速:執行速度快,適合頻繁檢查
    • 可靠:提供設備的當前狀態的準確信息

可以來個腳本:

if [ "$(adb get-state)" = "device" ]; thenecho "設備已就緒,開始操作"# 執行其他 ADB 命令
elseecho "設備未就緒,請檢查連接"
fi
30. get-serialno

用于獲取連接的 Android 設備的序列號

	adb get-serialno	

返回當前連接的 Android 設備的唯一序列號, 沒有設備連接返回"unknown".

31. get-devpath

獲取連接的 Android 設備的設備路徑。這個命令提供了設備在系統中的物理連接路徑信息.

adb get-devpath

對于 USB 連接的設備,可能返回類似 usb:337641472X ,對于模擬器或無線連接的設備,可能返回 unknown.

32. remount -R

用于重新掛載設備的文件系統,通常是為了獲得對系統分區的寫入權限。

adb remount
adb remount -R
  1. 功能:

    • 重新掛載系統分區為可讀寫模式
    • 允許修改系統文件
  2. -R 選項:

    • 在重新掛載后立即重啟設備
  3. 使用場景:

    • 系統級開發和調試
    • 修改系統文件或應用
    • 進行需要root權限的操作
  4. 先決條件:

    • 設備必須已root
    • bootloader必須解鎖
    • 在某些情況下,可能需要禁用 dm-verity
  5. 安全影響:

    • 降低設備安全性,允許系統文件被修改
    • 可能導致設備無法通過安全驗證
  6. 使用步驟:
    a. 確保設備已root且USB調試已啟用
    b. 執行 adb remount
    c. 如果使用 -R,設備將自動重啟

  7. 常見用途:

    • 修改系統應用或框架
    • 安裝或替換系統級應用
    • 進行底層系統調試
  8. 注意事項:

    • 不當使用可能導致設備變磚
    • 可能影響OTA更新
    • 在生產設備上使用極其危險
  9. 與其他命令結合:

    • 通常與 adb pushadb pull 一起使用來修改系統文件

    • 例如:

      basic

      復制

      adb remount
      adb push modified_file.so /system/lib/
      
  10. 恢復方法:

    • 重啟設備通常會恢復只讀狀態
    • 完全恢復可能需要重新刷入系統鏡像
  11. 在開發中的應用:

    • 測試系統級修改
    • 調試系統服務和框架
  12. 區別于普通root:

    • 普通root允許獲取超級用戶權限
    • remount允許直接修改系統分區
  13. 潛在風險:

    • 可能導致系統不穩定
    • 增加安全漏洞風險
    • 可能違反設備保修條款
  14. 最佳實踐:

    • 僅在開發設備上使用
    • 在使用前備份重要數據
    • 在完成必要操作后立即重啟設備
33. reboot

用于重啟 Android 設備,并可以指定重啟到特定模式。這是一個非常有用的命令,特別是在開發、測試和設備維護過程中。

adb rebot [mode]
  1. 可用的重啟模式:
    • 默認(不帶參數):正常重啟到系統
    • bootloader:重啟到 bootloader 模式
    • recovery:重啟到 recovery 模式
    • sideload:重啟到 sideload 模式
    • sideload-auto-reboot:進入 sideload 模式后自動重啟
34. sideload

用于在 Android 設備上安裝系統更新包(OTA 包)的 ADB 命令。這是一種直接通過電腦向設備安裝系統更新的方法,特別適用于無法通過正常 OTA 更新或想要手動安裝特定版本系統的情況。

adb sideload <path_to_update.zip>
  1. 使用步驟:
    a. 將設備重啟到 Recovery 模式
    b. 在 Recovery 菜單中選擇 “Apply update from ADB”
    c. 在計算機上執行 adb sideload 命令

  2. 先決條件:

    • 設備必須處于 Recovery 模式
    • ADB 調試必須啟用
    • 計算機上必須安裝 ADB 工具
  3. OTA 包要求:

    • 必須是針對特定設備型號的正確 OTA 包
    • 通常是 .zip 格式的文件
  4. 使用場景:

    • 手動更新系統版本
    • 安裝官方 OTA 更新
    • 在自動 OTA 更新失敗時使用
  5. 優點:

    • 無需完整的系統鏡像
    • 可以跳過等待 OTA 推送
    • 適用于無法正常接收 OTA 更新的設備
  6. 注意事項:

    • 確保使用正確的 OTA 包,否則可能導致設備問題
    • 建議在操作前備份重要數據
    • 過程中不要斷開設備連接
  7. 常見錯誤:

    • 簽名驗證失敗:通常是由于使用了不兼容或被修改的 OTA 包
    • 空間不足:確保設備有足夠的存儲空間
  8. 安全考慮:

    • 只使用來自可信源的 OTA 包
    • 避免使用未經驗證的第三方 OTA 包
  9. 與其他命令的結合:

    adb reboot recovery
    # 手動在設備上選擇 "Apply update from ADB"
    adb sideload update.zip
    
  10. 在腳本中的應用:

    adb reboot recovery
    sleep 30  # 等待設備進入 recovery 模式
    adb sideload path/to/update.zip
    
  11. 故障排除:

    • 如果 sideload 失敗,檢查 OTA 包的完整性
    • 確保設備型號和 OTA 包匹配
    • 檢查 ADB 連接是否穩定
  12. 與傳統刷機的區別:

    • Sideload 通常只更新系統,不會清除用戶數據
    • 比完整的系統刷寫更安全和快速
  13. 最佳實踐:

    • 在執行 sideload 前為設備充足電

    • 保持良好的 USB 連接,避免中斷

    • 在執行更新后驗證系統的完整性

35. root

用于獲取 Android 設備 root 權限的 ADB 命令

36. unroot

root的反向操作,用于退出ADB的root模式。這個命令在完成需要 root 權限的操作后恢復正常的非 root 狀態時很有用。

37. usb

用于特定情況下重新啟動usb鏈接

adb usb

主要功能是:

  1. 重新啟動USB連接;
  2. 主要用于從無線(TCP/IP)模式切換回USB模式

使用場景:

  1. 當設備當前通過 Wi-Fi 連接到 ADB 時
  2. 需要從無線調試切換回 USB 調試時
38. tcp/ip PORT
adb tcp/ip PORT

用于設置無線 ADB 連接的重要命令,允許開發者通過 Wi-Fi 網絡連接到 Android 設備,而不是傳統的 USB 連接。

  1. 主要功能如下:

    • 將 ADB 守護進程(adbd)重啟到指定的 TCP 端口
    • 使設備準備好接受無線 ADB 連接
  2. 使用場景:

    • 遠程調試 Android 設備
    • 在不使用 USB 線的情況下連接設備
    • 同時操作多個設備
  3. 執行步驟:
    a. 通過 USB 連接設備
    b. 運行 adb tcpip 5555
    c. 斷開 USB 連接
    d. 使用 adb connect IP_ADDRESS:5555 建立無線連接

  4. 優點:

    • 提供更大的移動自由度
    • 允許在不同位置的設備間快速切換
    • 便于在多個設備上同時工作
  5. 注意事項:

    • 設備必須與電腦在同一個 Wi-Fi 網絡
    • 需要知道設備的 IP 地址
    • 可能存在安全風險,應在受信任的網絡中使用
  6. 在腳本中應用:

    adb tcpip 5555
    adb connect 192.168.1.100:5555
    # 執行無線調試操作
    adb disconnect 192.168.1.100:5555
    
39. Restart-server/kill-server

用于管理adb服務器的重要命令,用于解決ADB連接問題和重置ADB狀態問題。

adb kill-server

停止當前運行的 ADB 服務器進程

adb restart-server

停止當前的 ADB 服務器,然后立即啟動一個新的服務器

在腳本中使用:

adb kill-server
sleep 2
adb start-server
# 或者直接使用
adb restart-server
40. reconnect
adb reconnect

嘗試重新連接當前已斷開或不穩定的 ADB 連接, 對所有連接的設備執行重新連接操作.

adb環境變量詳解

1. ADB_TRACE

用于控制 ADB 的調試輸出級別,設置方法為:

export ADB_TRACE=1

可能的值:

  • 1: 基本信息
  • 2: 詳細信息
  • 3: 更詳細的信息
  • 4: 最詳細的調試信息

用途:

  • 調試 ADB 連接問題
  • 了解 ADB 內部工作過程
  • 排查復雜的設備通信問題

2. ANDROID_SERIAL

指定默認的 Android 設備,設置方法為:

export ANDROID_SERIAL=<device_serial_number>

在有多個設備連接時,無需每次指定設備

3. ANDROID_ADB_SERVER_PORT
export ANDROID_ADB_SERVER_PORT=<port_number>

指定 ADB 服務器使用的端口

4. ADB_VENDOR_KEYS
export ADB_VENDOR_KEYS=<path_to_keys>

指定 ADB 廠商密鑰的路徑

5. ANDROID_HOME
export ANDROID_HOME=<path_to_android_sdk>

指定 Android SDK 的安裝路徑

6. 包含 ADB 可執行文件的路徑
export PATH=$PATH:$ANDROID_HOME/platform-tools

包含 ADB 可執行文件的路徑

7. ADB_LOCAL_TRANSPORT_MAX_PORT
export ADB_LOCAL_TRANSPORT_MAX_PORT=<max_port_number>

設置本地傳輸的最大端口號

8. export ADB_MDNS_AUTO_CONNECT=1
export ADB_MDNS_AUTO_CONNECT=1

控制 ADB 是否自動連接到 mDNS 發現的設備

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41960.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41960.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最小二乘支持向量機(Least Squares Support Vector Machine,LSSVM)及其Python和MATLAB實現

LSSVM&#xff08;Least Squares Support Vector Machine&#xff09;又稱最小二乘支持向量機&#xff0c;是支持向量機&#xff08;SVM&#xff09;的一種變體&#xff0c;它通過將SVM的優化問題轉化為帶約束的二次規劃問題&#xff0c;利用最小二乘法進行優化求解&#xff0c…

redis集群部署 (通過redis工具快速部署,手動部署)

目錄 一、快速部署集群 1、 進入集群目錄&#xff0c;創建集群 2、 查看正常啟動 二、部署集群 1、分配集群節點 2、驗證集群可用性 3、停止redis進程 三、手動部署集群 1、配置redis.conf配置文件 2、啟動redis集群 3、手動創建redis集群 4、驗證 四、集群…

mysql異常數據損壞處理,報錯:Operating system error number 2 in a file operation

一、問題描述 某次一線反應&#xff0c;某主庫表全部丟失&#xff0c;查看為空&#xff0c;登陸主機查看mysqld.log后報錯&#xff1a;Operating system error number 2 in a file operation數據目錄OS重裝后修改過&#xff0c;但只是指向方式不同&#xff0c;目錄還是同一目錄…

【綠色版】Mysql下載、安裝、配置與使用(保姆級教程)

大家都知道&#xff0c;Mysql安裝版的卸載過程非常繁瑣&#xff0c;而且卸載不干凈會出現許多問題&#xff0c;很容易讓大家陷入重裝系統的窘境。基于此&#xff0c;博主今天給大家分享綠色版Mysql的安裝、配置與使用。 目錄 一、Mysql安裝、配置與使用 1、下載解壓 2、創建…

vue對axios進行請求響應封裝

一、原因 像是在一些業務邏輯上&#xff0c;比如需要在請求之前展示loading效果&#xff0c;或者在登錄的時候判斷身份信息&#xff08;token&#xff09;等信息有沒有過期&#xff0c;再者根據服務器響應回來的code碼進行相應的提示信息。等等在請求之前&#xff0c;之后做的一…

ABAP注釋快捷鍵修改(留著備用)

ABAP注釋快捷鍵修改(留著備用) 在使用ABAP編輯器的時候&#xff0c;原有的添加代碼注釋和取消代碼注釋的快捷鍵未生效&#xff0c;這時我們可以考慮對注釋快捷鍵進行修改 在事務碼SE38(ABAP編輯器)屏幕右下角&#xff0c;點擊【Options選項】圖標 在【鍵盤】|【命令】輸入欄中…

DWM 相關實現代碼 [自用]

1. DWM 縮略圖和模糊隱藏實現半透明 #include <windows.h> #include <dwmapi.h> #include <string> #pragma comment(lib, "dwmapi.lib")// 檢查 UWP 窗口是否可見 bool IsUWPWindowVisible(HWND hwnd) {DWORD cloaked 0;DwmGetWindowAttribute(…

【c語言】玩轉文件操作

&#x1f31f;&#x1f31f;作者主頁&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所屬專欄&#xff1a;C語言 目錄 引言 一、文件的打開和關閉 1.流 2.標準流 3.文本文件和二進制文件 4.控制文件打開與關閉的函數 二、文件的順序讀寫 三、文件的隨機讀寫 1…

深入理解OAuth 2.0:原理、流程與實踐

一、什么是OAuth 2.0 1. 什么是OAuth 2.0 OAuth 2.0 是一套關于授權的行業標準協議。 OAuth 2.0 允許用戶授權第三方應用訪問他們在另一個服務提供方上的數據&#xff0c;而無需分享他們的憑據&#xff08;如用戶名、密碼&#xff09;。 2. OAuth 2.0 應用場景 OAuth 2.0的…

非參數檢測6——優缺點

優點&#xff1a; 參量檢測的特點在于以似然比處理器為基礎&#xff0c;并建立在假定干擾或噪聲的統計特性已知的基礎上。但實際上&#xff0c;干擾環境往往十分復雜&#xff0c;包括自然和人為因素&#xff0c;且常常隨時改變。這使我們很難確定噪聲的統計特性。因此人們提出…

服務器U盤安裝Centos 7時提示Warning:/dev/root does not exist

這是沒有找到正確的鏡像路徑導致的&#xff0c;我們可以在命令行輸入ls /dev看一下有哪些盤符 像圖中紅色圈起來的就是我插入U盤的盤符&#xff0c;大家的輸幾盤可能做了多個邏輯盤&#xff0c;這種情況下就可以先將U盤拔掉再ls /dev看一下和剛才相比少了那兩個盤符&#xff0c…

在Spring Boot中實現多線程任務調度

在Spring Boot中實現多線程任務調度 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 1. Spring Boot中的任務調度 Spring Boot通過集成Spring框架的Task Execution和Scheduling支持&#xff0c;提供…

Double 4 VR仿真情景實訓教學系統在法律專業課堂上的應用

隨著科技的飛速發展&#xff0c;VR技術逐漸滲透到各個領域&#xff0c;為教育行業帶來了革命性的變化。 VR技術以其獨特的沉浸式體驗&#xff0c;為法律課堂帶來了前所未有的學習體驗。通過Double 4 VR仿真情景實訓教學系統&#xff0c;學生可以身臨其境地進入虛擬的仿真情景中…

vue前端面試

一 .v-if和v-show的區別 v-if 和 v-show 是 Vue.js 中兩個常用的條件渲染指令&#xff0c;它們都可以根據條件決定是否渲染某個元素。但是它們之間存在一些區別。 語法&#xff1a;v-if 和 v-show 的語法相同&#xff0c;都接收一個布爾值作為參數。 <div v-if"show…

權力之望怎么下載客戶端 權力之望一鍵下載

《權力之望》是一款由NX3 Games開發、Smilegate發行的多人在線動作MMORPG游戲。這款游戲最大的特點是高度的自由度和豐富的角色定制選項。我們在游戲中不僅可以自由更換武器&#xff0c;而且游戲還提供了54種能力和60多種職業選擇&#xff0c;讓我們可以根據自己的游戲風格和喜…

繼 承

為什么要有繼承&#xff0c;繼承的作用&#xff1f; 繼承(inheritance)機制&#xff1a;是面向對象程序設計使代碼可以復用的最重要的手段&#xff0c;它允許程序員在保持原有類特性的基礎上進行擴展&#xff0c;增加新功能&#xff0c;這樣產生新的類&#xff0c;稱派生類。 …

【人工智能】—基于成都市各區(市)縣租房價格預測建模研究

引言 隨著城市化進程的加速&#xff0c;人口流動日益頻繁&#xff0c;租房市場作為城市生活的重要組成部分&#xff0c;其價格波動對居民生活質量和城市經濟發展具有顯著影響。成都市&#xff0c;作為中國西部地區的經濟、文化、交通和科技中心&#xff0c;近年來吸引了大量人…

為什么獨立站需要高質量的GPB外鏈?

獨立站需要高質量的GPB外鏈&#xff0c;主要是因為它們能顯著提升網站的可信度和可見性。高質量的外鏈相當于得到其他權威網站的認可和推薦&#xff0c;這會讓搜索引擎認為你的內容有價值&#xff0c;從而提升你的搜索排名。試想一下&#xff0c;當其他有影響力的網站愿意鏈接到…

非阻塞式 I/O 模型 【NIO】補充內容

NIO是一種同步非阻塞IO, 基于Reactor模型來實現的。其實相當于就是一個線程處理大量的客戶端的請求&#xff0c;通過一個線程輪詢大量的channel&#xff0c;每次就獲取一批有事件的channel&#xff0c;然后對每個請求啟動一個線程處理即可。這里的核心就是非阻塞&#xff0c;就…

請求接口在控制臺報cors跨域問題

我的問題是&#xff1a;BASE_URL沒有和本地IP設置一致 剛開始&#xff1a;&#xff08;這個不是我本地電腦的地址&#xff09; 所以我要把&#xff1a;這個地址改為我本地電腦的ip&#xff08;http://192.168.2.50:8087&#xff09; BASE_URL: http://localhost:8087/api/ 或…