ADB——命令大全

基本語法

基本語法html

adb [-d|-e|-s <serialNumber>] <command>
# serialNumber表示設備序列號,也能夠是ip地址
# 若是隻有一個設備/模擬器鏈接時,能夠省略掉 [-d|-e|-s <serialNumber>] 這一部分,直接使用 adb <command>。

 

爲命令指定目標設備node

  上述三個參數(-d  -s  -e)用於指定設備,若是有多個設備/模擬器鏈接,須要爲命令指定目標設備,不然鬼知道你要操做哪臺設備。linux

  • -d:指定當前惟一經過 USB 鏈接的 Android 設備爲命令目標
  • -e:指定當前惟一運行的模擬器爲命令目標
  • -s <serialNumber>:指定相應 serialNumber 號的設備/模擬器爲命令目標

在多個設備/模擬器鏈接的狀況下較經常使用的是-s <serialNumber>參數,serialNumber爲設備到序列號,設備鏈接上電腦後能夠經過 adb devices 命令獲取android

例如,個人設備爲樂視1s,運行後可獲得:git

$ adb devices
List of devices attached
KFNJG68SQKAE7LQG        device
xxxxx    device # 手工僞造的設備號
yyyyy    device # 手工僞造的設備號

# KFNJG68SQKAE7LQG 爲樂視1s的設備號(serialNumber)

 

此時經過adb查看樂視1s的屏幕分辨率github

adb -s KFNJG68SQKAE7LQG shell wm size

 

啓動/中止adbshell

adb start-server # 啓動(通常無需手動執行此命令,在運行 adb 命令時若發現 adb server 沒有啓動會自動調起。)
adb kill-server    # 中止
adb version        # 查看adb版本號

 

以 root 權限運行 adbd緩存

  adb 的運行原理是 PC 端的 adb server 與手機端的守護進程 adbd 創建鏈接,而後 PC 端的 adb client 經過 adb server 轉發命令,adbd 接收命令後解析運行。安全

  因此若是 adbd 以普通權限執行,有些須要 root 權限才能執行的命令沒法直接用 adb xxx 執行。這時能夠 adb xxx 而後 su 後執行命令,也可讓 adbd 以 root 權限執行,這樣就能隨意執行高權限命令了。網絡

命令:

adb root   # 正常輸出:restarting adbd as root
adb unroot # 取消root權限

 

  如今再運行 adb shell ,命令行提示符變成 # 即爲root權限

  有些手機 root 後也沒法經過 adb root 命令讓 adbd 以 root 權限執行,好比三星的部分機型,會提示 adbd cannot run as root in production builds,此時能夠先安裝 adbd Insecure,而後 adb root 試試。

 

adbd Insecure下載地址:戳這裏下載後打開應用將Enable insecure adbd 和 enable at boot 勾選上,設置好以後重進鍵入:adb root便可

 

指定 adb server 的網絡端口

adb -P <port> start-server # 默認端口爲 5037。

  

設備鏈接

  設備鏈接的功能分爲 查看設備鏈接鏈接設備 ,其中 鏈接設備 又分爲 有USB鏈接 和 無USB鏈接

  • 有USB鏈接 —— 直接經過USB線鏈接
  • 無USB鏈接:
    • 設備先前經過USB線連過電腦 —— 經過IP地址鏈接
    • 設備從沒連過電腦 —— 須要root權限,而且在安卓上安裝一個模擬器如Terminal Emulator for Android Downloads

詳細操做步驟:ADB——鏈接手機的三種方式

 

模擬按鍵輸入

  經常使用操做主要有電源鍵、菜單鍵、home鍵、返回鍵、觸擊屏幕、滑動屏幕等等。

adb shell input keyevent 26 # 電源鍵
adb shell input keyevent 82 # 菜單鍵
adb shell input keyevent 3 # HOME 鍵
adb shell input keyevent 4 # 返回鍵
adb shell input keyevent 24 # 音量+
adb shell input keyevent 25 # 音量-
adb shell input keyevent 164 # 靜音 
電源鍵、菜單鍵、HOME鍵、返回鍵、音量加減、靜音
adb shell input keyevent 85 # 播放/暫停
adb shell input keyevent 86 # 中止播放
adb shell input keyevent 87 # 播放下一首
adb shell input keyevent 88 # 播放上一首
adb shell input keyevent 126 # 恢復播放
adb shell input keyevent 127 # 暫停播放
媒體播放、暫停、上下首
adb shell input keyevent 224 # 點亮屏幕
adb shell input keyevent 223 # 熄滅屏幕
亮屏、熄屏
# 觸擊屏幕
adb shell input tap <X> <Y> # x,y爲座標位置

# 滑動屏幕  四個參數:起始點x座標 起始點y座標 結束點x座標 結束點y座標。
adb shell input swipe 300 1000 300 500 # 向上滑動
adb shell input swipe 300 100 300 1000 # 向下滑動
adb shell input swipe 1000 500 200 500 # 向左滑動
adb shell input swipe 200 500 1000 500 # 向右滑動
觸擊、滑動

  全部命令的篇幅較大,詳細戳這裏:ADB——模擬手機按鍵輸入

 

查看手機設備信息

  手機設備信息能夠包括以下信息:

  • 手機型號
  • 電池情況
  • 分辨率
  • 屏幕密度
  • 顯示屏參數
  • Android_id
  • IMEI
  • Android系統版本
  • IP地址
  • Mac地址
  • CPU信息
  • 內存信息

具體每一個信息的查看方式見:ADB——查看手機設備信息

 

管理手機文件

  這裏只講解手機和電腦之間的互相複製文件的功能

複製手機的文件到電腦

adb pull <設備裏的文件路徑> [電腦上的目錄] # 電腦上的目錄參數可忽略,默認爲當前目錄
# 例:
adb pull /sdcard/sr.mp4 ~/tmp/ # 將手機中的/sdcard/sr.mp4文件複製到電腦的~/tmp/ 所在的文件夾中

# 設備上的文件路徑可能須要root權限才能訪問,若是你的設備已經root過,能夠先使用adb shell和su命令在adb shell裏獲取root 限後,先將文件複製到sdcard,而後
cp /path/on/device /sdcard/filenameadb pull /sdcard/filename /path/on/pc

 

複製電腦上的文件到手機

adb push <電腦上的文件路徑> <設備裏的目錄>
#
adb push ~/sr.mp4 /sdcard/
 # 設備上的文件路徑普通權限可能沒法直接寫入,若是設備已經root過,能夠先adb push /path/on/pc /sdcard/filename,而後adb shell和su在 adb shell裏獲取root權限後,cp /sdcard/filename /path/on/device。

 

應用管理

  • 查看應用列表
  • 安裝應用
  • 卸載應用
  • 清楚應用數據與緩存
  • 查看前臺Activity
  • 查看應用信息
  • 查看安裝路徑等等 

 具體操做見:ADB——管理應用

 

 應用交互

  • 啓動應用 / 調起Activity:
  • 調起Services:
  • 中止Service
  • 發送廣播
  • 強行中止應用

 具體操做見:ADB——應用交互

 

查看日誌

  Android 系統的日誌分爲兩部分,底層的 Linux 內核日誌輸出到 /proc/kmsg,Android 的日誌輸出到 /dev/log。

 

查看Android的日誌

[adb] logcat [<option>] ... [<filter-spec>] ...

 

經常使用用法列舉以下:

1、按級別過濾日誌

  Android 的日誌分爲以下幾個優先級(priority):

  • V —— Verbose(最低,輸出得最多)
  • D —— Debug
  • I —— Info
  • W —— Warning
  • E —— Error
  • F —— Fatal
  • S —— Silent(最高,啥也不輸出)

  按某級別過濾日誌則會將該級別及以上的日誌輸出。

  好比,下面命令會將 Warning、Error、Fatal 和 Silent 日誌輸出。

adb logcat *:W # 注: 在 macOS 下須要給 *:W 這樣以 * 做爲 tag 的參數加雙引號,如 adb logcat "*:W",否則會報錯 no matches found: *:W

 

2、按 tag 和級別過濾日誌

# <filter-spec> 能夠由多個 <tag>[:priority] 組成。

# 好比,下面命令表示輸出 tag ActivityManager 的 Info 以上級別日誌,輸出 tag MyApp 的 Debug 以上級別日誌,及其它 tag 的 Silent 級別日誌(即屏蔽其它 tag 日誌)
adb logcat ActivityManager:I MyApp:D *:S
。

 

3、日誌格式

  能夠用adb logcat -v <format>選項指定日誌輸出格式。

日誌支持按如下幾種<format>

  • brief——默認格式。格式爲

    <priority>/<tag>(<pid>): <message>
    # 示例
    D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
     
  • process——格式爲:

    <priority>(<pid>) <message>
    # 示例:
    D( 1785) Disconnected process message: 10, size: 0  (HeadsetStateMachine)

     

  • tag——格式爲:

    <priority>/<tag>: <message>
    # 示例:
    D/HeadsetStateMachine: Disconnected process message: 10, size: 0

     

  • raw——格式爲:

    <message>
    # 示例:
    Disconnected process message: 10, size: 0

     

  • time——格式爲:

    <datetime> <priority>/<tag>(<pid>): <message>
    # 示例:
    08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0

     

  • threadtime——格式爲:

    <datetime> <pid> <tid> <priority> <tag>: <message>
    # 示例:
    08-28 22:39:39.974  1785  1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0

     

  • long——格式爲:

    [ <datetime> <pid>:<tid> <priority>/<tag> ]
    <message>
    # 示例:
    [ 08-28 22:39:39.974  1785: 1832 D/HeadsetStateMachine ]
    Disconnected process message: 10, size: 0

     

  指定格式可與上面的過濾同時使用。好比:

adb logcat -v long ActivityManager:I *:S

 

4、清空日誌

adb logcat -c

 

查看內核日誌

  經過內核日誌咱們能夠作一些事情,好比衡量內核啓動時間,在系統啓動完畢後的內核日誌裏找到 Freeing init memory 那一行前面的時間就是。

adb shell dmesg
'''
<6>[14201.684016] PM: noirq resume of devices complete after 0.982 msecs
<6>[14201.685525] PM: early resume of devices complete after 0.838 msecs
<6>[14201.753642] PM: resume of devices complete after 68.106 msecs
<4>[14201.755954] Restarting tasks ... done.
<6>[14201.771229] PM: suspend exit 2016-08-28 13:31:32.679217193 UTC
<6>[14201.872373] PM: suspend entry 2016-08-28 13:31:32.780363596 UTC
<6>[14201.872498] PM: Syncing filesystems ... done.
'''
# 中括號裏的 [14201.684016] 表明內核開始啓動後的時間,單位爲秒。

 

 

 修改手機默認設置

  修改設置的原理主要是經過 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 裏存放的設置值。

  利用ADB的命令能夠修改手機的一些默認設置,修改設置以後,運行恢復命令有可能顯示仍然不太正常,能夠運行 adb reboot 重啓設備,或手動重啓。

  • 修改分辨率
  • 修改屏幕密度
  • 修改顯示區域
  • 關閉USB調試
  • 容許 / 禁止訪問非 SDK API:
  • 狀態欄和導航欄的顯示隱藏

  具體操做見:ADB——修改手機默認

 

其餘實用功能 

屏幕截圖

adb exec-out screencap -p > sc.png # 截圖保存到電腦
# 實測若是指定文件名以  結尾時能夠省略 -p 參數;不然須要使用 -p 參數。若是不指定文件名,截圖文件的內容將直接輸出到 stdout。
# 若是 adb 版本較老,沒法使用 exec-out 命令,建議更新 adb 版本。若沒法更新使用以下步驟: adb shell screencap -p /sdcard/sc.png # 先截圖保存到設備裏 adb pull /sdcard/sc.png # 而後將 png 文件導出到電腦:.png

 

  可使用 adb shell screencap -h 查看 screencap 命令的幫助信息,下面是兩個有意義的參數及含義:

參數 含義
-p 指定保存文件爲 png 格式
-d display-id 指定截圖的顯示屏編號(有多顯示屏的狀況下)

  

  另一種一行命令截圖並保存到電腦的方法:

# Linux 和 Windows
adb shell screencap -p | sed "s/\r$//" > sc.png

# Mac OS X
adb shell screencap -p | gsed "s/\r$//" > sc.png

 

上述方法須要用到 gnu sed 命令,在 Linux 下直接就有,在 Windows 下 Git 安裝目錄的 bin 文件夾下也有。若是確實找不到該命令,能夠下載 sed for Windows 並將 sed.exe 所在文件夾添加到 PATH 環境變量裏。

而在 Mac 下使用系統自帶的 sed 命令會報錯:

sed: RE error: illegal byte sequence
# 須要安裝 gnu-sed,而後使用 gsed 命令:
brew install gnu-sed

 

錄製屏幕

adb shell screenrecord /sdcard/filename.mp4 # 錄製屏幕以 mp4 格式保存到 /sdcard
adb pull /sdcard/filename.mp4 # 導出到電腦:

# 須要中止時按 Ctrl-C,默認錄製時間和最長錄製時間都是 180 秒。

 

  可使用 adb shell screenrecord --help 查看 screenrecord 命令的幫助信息,下面是常見參數及含義:

 

參數 含義
--size WIDTHxHEIGHT 視頻的尺寸,好比 1280x720,默認是屏幕分辨率。
--bit-rate RATE 視頻的比特率,默認是 4Mbps。
--time-limit TIME 錄製時長,單位秒。
--verbose 輸出更多信息。

 

從新掛載 system 分區爲可寫

注:須要 root 權限。

  /system 分區默認掛載爲只讀,但有些操做好比給 Android 系統添加命令、刪除自帶應用等須要對 /system 進行寫操做,因此須要從新掛載它爲可讀寫。

步驟:

# 1.進入 shell 並切換到 root 用戶權限。
adb shell
su

# 2.查看當前分區掛載狀況。
mount

輸出示例:
'''
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
none /var tmpfs rw,seclabel,relatime,mode=770,gid=1000 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
none /sys/fs/cgroup/memory cgroup rw,relatime,memory 0 0
tmpfs /mnt/asec tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
none /dev/memcg cgroup rw,relatime,memory 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
none /sys/fs/cgroup/memory cgroup rw,relatime,memory 0 0
none /sys/fs/cgroup/freezer cgroup rw,relatime,freezer 0 0
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 rw,seclabel,nosuid,nodev,relatime,noauto_da_alloc,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/persist /persist ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/modem /firmware vfat ro,context=u:object_r:firmware_file:s0,relatime,uid=1000,gid=1000,fmask=0337,dmask=0227,codepage=cp437,iocharset=iso8859-1,shortname=lower,errors=remount-ro 0 0
/dev/fuse /mnt/shell/emulated fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/fuse /mnt/shell/emulated/0 fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
'''

# 3.找到其中咱們關注的帶 /system 的那一行:/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0從新掛載。

mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system
# 這裏的 /dev/block/platform/msm_sdcc.1/by-name/system 就是咱們從上一步的輸出裏獲得的文件路徑。

# 若是輸出沒有提示錯誤的話,操做就成功了,能夠對 /system 下的文件隨心所欲了。

 

查看鏈接過的 WiFi 密碼

注:須要 root 權限。

adb shell
su
cat /data/misc/wifi/*.conf
'''
輸出示例:
network={
    ssid="TP-LINK_9DFC"
    scan_ssid=1
    psk="123456789"
    key_mgmt=WPA-PSK
    group=CCMP TKIP
    auth_alg=OPEN
    sim_num=1
    priority=13893
}

network={
    ssid="TP-LINK_F11E"
    psk="987654321"
    key_mgmt=WPA-PSK
    sim_num=1
    priority=17293
}
ssid 即爲咱們在 WLAN 設置裏看到的名稱,psk 爲密碼,key_mgmt 爲安全加密方式。
'''

 

設置系統日期和時間

注:須要 root 權限。

adb shell
su
date -s 20160823.131500
# 表示將系統日期和時間更改成 2016 年 08 月 23 日 13 點 15 分 00 秒。

 

重啓手機

adb reboot

 

檢測設備是否已 root

adb shell
su
# 此時命令行提示符是 $ 則表示沒有 root 權限,是 # 則表示已 root。

 

使用 Monkey 進行壓力測試

  Monkey 能夠生成僞隨機用戶事件來模擬單擊、觸摸、手勢等操做,能夠對正在開發中的程序進行隨機壓力測試。

簡單用法:

adb shell monkey -p <packagename> -v 500 # 表示向 <packagename> 指定的應用程序發送 500 個僞隨機事件。

 

Monkey 的詳細用法參考 官方文檔

 

開啓/關閉 WiFi

注:須要 root 權限。

# 開啓 WiFi:
adb root
adb shell svc wifi enable

# 關閉 WiFi:
adb root
adb shell svc wifi disable

# 若執行成功,輸出爲空;若未取得 root 權限執行此命令,將執行失敗,輸出 Killed。

 

刷機相關命令

重啓到 Recovery 模式

adb reboot recovery

 

從 Recovery 重啓到 Android

adb reboot

 

重啓到 Fastboot 模式

adb reboot bootloader

 

經過 sideload 更新系統

  若是咱們下載了 Android 設備對應的系統更新包到電腦上,那麼也能夠經過 adb 來完成更新。

  以 Recovery 模式下更新爲例:

  1. 重啓到 Recovery 模式。

    adb reboot recovery

     

  2. 在設備的 Recovery 界面上操做進入 Apply update-Apply from ADB。

    注:不一樣的 Recovery 菜單可能與此有差別,有的是一級菜單就有 Apply update from ADB。

  3. 經過 adb 上傳和更新系統。

    adb sideload <path-to-update.zip>

 

安全相關命令

啓用 SELinux

adb root
adb shell setenforce 1

 

禁用 SELinux

adb root
adb shell setenforce 0

 

啓用 dm_verity

adb root
adb enable-verity

 

禁用 dm_verity

adb root
adb disable-verity

 

其餘ADB shell命令 

  Android 系統是基於 Linux 內核的,因此 Linux 裏的不少命令在 Android 裏也有相同或相似的實現,在 adb shell 裏能夠調用。本文檔前面的部份內容已經用到了 adb shell 命令。

查看進程

adb shell ps
'''
輸出示例:

USER     PID   PPID  VSIZE  RSS     WCHAN    PC        NAME
root      1     0     8904   788   ffffffff 00000000 S /init
root      2     0     0      0     ffffffff 00000000 S kthreadd
...
u0_a71    7779  5926  1538748 48896 ffffffff 00000000 S com.sohu.inputmethod.sogou:classic
u0_a58    7963  5926  1561916 59568 ffffffff 00000000 S org.mazhuang.boottimemeasure
...
shell     8750  217   10640  740   00000000 b6f28340 R ps
'''

 

各列含義:

列名 含義
USER 所屬用戶
PID 進程 ID
PPID 父進程 ID
NAME 進程名

查看實時資源佔用狀況

命令:

adb shell top
'''
輸出示例:

User 0%, System 6%, IOW 0%, IRQ 0%
User 3 + Nice 0 + Sys 21 + Idle 280 + IOW 0 + IRQ 0 + SIRQ 3 = 307

  PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
 8763  0   3% R     1  10640K   1064K  fg shell    top
  131  0   3% S     1      0K      0K  fg root     dhd_dpc
 6144  0   0% S   115 1682004K 115916K  fg system   system_server
  132  0   0% S     1      0K      0K  fg root     dhd_rxf
 1731  0   0% S     6  20288K    788K  fg root     /system/bin/mpdecision
  217  0   0% S     6  18008K    356K  fg shell    /sbin/adbd
 ...
 7779  2   0% S    19 1538748K  48896K  bg u0_a71   com.sohu.inputmethod.sogou:classic
 7963  0   0% S    18 1561916K  59568K  fg u0_a58   org.mazhuang.boottimemeasure
'''
 

各列含義:

列名 含義
PID 進程 ID
PR 優先級
CPU% 當前瞬間佔用 CPU 百分比
S 進程狀態(R=運行,S=睡眠,T=跟蹤/中止,Z=殭屍進程)
#THR 線程數
VSS Virtual Set Size 虛擬耗用內存(包含共享庫佔用的內存)
RSS Resident Set Size 實際使用物理內存(包含共享庫佔用的內存)
PCY 調度策略優先級,SP_BACKGROUND/SPFOREGROUND
UID 進程全部者的用戶 ID
NAME 進程名

top 命令還支持一些命令行參數,詳細用法以下:

Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]

  • -m num   最多顯示多少個進程
  • -n num  刷新多少次後退出
  • -d num    刷新時間間隔(單位秒,默認值 5)
  • -s col      按某列排序(可用 col 值:cpu, vss, rss, thr)
  • -t           顯示線程信息
  • -h           顯示幫助文檔
 

查看進程 UID

# 第一種方案:
adb shell dumpsys package <packagename> | grep userId=

# 如:
$ adb shell dumpsys package org.mazhuang.guanggoo | grep userId=
   userId=10394

# 第二種:經過 ps 命令找到對應進程的 pid 以後 adb shell cat /proc/<pid>/status | grep Uid

# 如:
$ adb shell
gemini:/ $ ps | grep org.mazhuang.guanggoo
u0_a394   28635 770   1795812 78736 SyS_epoll_ 0000000000 S org.mazhuang.guanggoo
gemini:/ $ cat /proc/28635/status | grep Uid
Uid:    10394   10394   10394   10394
gemini:/ $

 

其它

  以下是其它經常使用命令的簡單描述,前文已經專門講過的命令再也不額外說明:

命令 功能
cat 顯示文件內容
cd 切換目錄
chmod 改變文件的存取模式/訪問權限
df 查看磁盤空間使用狀況
grep 過濾輸出
kill 殺死指定 PID 的進程
ls 列舉目錄內容
mount 掛載目錄的查看和管理
mv 移動或重命名文件
ps 查看正在運行的進程
rm 刪除文件
top 查看進程的資源佔用狀況

 

 

常見問題

啓動 adb server 失敗

出錯提示:

  error: protocol fault (couldn't read status): No error

可能緣由:

  adb server 進程想使用的 5037 端口被佔用。

解決方案:

  找到佔用 5037 端口的進程,而後終止它。以 Windows 下爲例:

netstat -ano | findstr LISTENING

...
TCP    0.0.0.0:5037           0.0.0.0:0              LISTENING       1548
...

這裏 1548 即爲進程 ID,用命令結束該進程:

taskkill /PID 1548

而後再啓動 adb 就沒問題了。

 

com.android.ddmlib.AdbCommandRejectedException

在 Android Studio 裏新建一個模擬器,可是用 adb 一直鏈接不上,提示:

com.android.ddmlib.AdbCommandRejectedException: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.

在手機上安裝一個終端而後執行 su 提示沒有該命令,這不正常。

因而刪除該模擬器後從新下載安裝一次,此次就正常了。

 

 

 

 

 

 

 

 本文及文中全部引用鏈接均參考連接:https://github.com/mzlogin/awesome-adb

相關文章
相關標籤/搜索