ADB——命令大全


基本語法

基本語法

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

 

為命令指定目標設備

  上述三個參數(-d  -s  -e)用於指定設備,如果有多個設備/模擬器連接,需要為命令指定目標設備,否則鬼知道你要操作哪台設備。

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

在多個設備/模擬器連接的情況下較常用的是-s <serialNumber>參數,serialNumber為設備到序列號,設備連接上電腦后可以通過 adb devices 命令獲取

例如,我的設備為樂視1s,運行后可得到:

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

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

 

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

adb -s KFNJG68SQKAE7LQG shell wm size

 

啟動/停止adb

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 限后,
cp /path/on/device /sdcard/filename將文件復制到sdcard,然后adb 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>] ...

 

常用用法列舉如下:

一、按級別過濾日志

  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

 

二、按 tag 和級別過濾日志

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

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

 

三、日志格式

  可以用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

 

四、清空日志

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 # 截圖保存到電腦
# 實測如果指定文件名以 .png 結尾時可以省略 -p 參數;否則需要使用 -p 參數。如果不指定文件名,截圖文件的內容將直接輸出到 stdout。
# 如果 adb 版本較老,無法使用 exec-out 命令,建議更新 adb 版本。若無法更新使用如下步驟: adb shell screencap -p /sdcard/sc.png # 先截圖保存到設備里 adb pull /sdcard/sc.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

 

 

 

 

 

 

 

 

 

 

 

       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM