Android自動化測試探索(一)adb詳細介紹

adb詳細介紹

 

#1. 基本簡介

adb,即Android Debug Bridge,它是Android開發/測試人員不可替代的強大工具html

 

#2. Mac上安裝adb

安裝brewnode

ruby -e 「$(curl –insecure -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)」.

安裝adblinux

brew install Caskroom/cask/android-platform-tools

測試是否安裝成功, 打開手機開發者模式, 打開USB調式和安裝功能android

adb devices

第一次執行會提示沒有啓動, 會自動啓動git

Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully

再執行一次github

Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached

此次沒有提示錯誤, 但沒有列出手機。是由於沒有開啓手機開發者模式和USB調試安裝功能shell

咱們打開後再試一次, 此次就能看到有列出咱們的設備了, device前面一段就是咱們的設備的serialNumber緩存

Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
62ab58430211    device

 

#3. 設備鏈接管理

1) USB鏈接

經過 USB 鏈接來正常使用 adb 須要保證幾點:安全

  1. 硬件狀態正常。ruby

    包括 Android 設備處於正常開機狀態,USB 鏈接線和各類接口無缺。

  2. Android 設備的開發者選項和 USB 調試模式已開啓。

    能夠到「設置」-「開發者選項」-「Android 調試」查看。

    若是在設置裏找不到開發者選項,那須要經過一個彩蛋來讓它顯示出來:在「設置」-「關於手機」連續點擊「版本號」7 次。

  3. 設備驅動狀態正常。

    這一點貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到須要安裝驅動的狀況,確認這一點能夠右鍵「計算機」-「屬性」,到「設備管理器」裏查看相關設備上是否有黃色感嘆號或問號,若是沒有就說明驅動狀態已經好了。不然能夠下載一個手機助手類程序來安裝驅動先。

  4. 經過 USB 線鏈接好電腦和設備後確認狀態。

    若是能看到

    說明鏈接成功.

2) 無線鏈接(需藉助USB線)

除了能夠經過 USB 鏈接設備與電腦來使用 adb,也能夠經過無線鏈接——雖然鏈接過程當中也有須要使用 USB 的步驟,可是鏈接成功以後你的設備就能夠在必定範圍內擺脫 USB 鏈接線的限制啦!

操做步驟:

  1. 將 Android 設備與要運行 adb 的電腦鏈接到同一個局域網,好比連到同一個 WiFi。

  2. 將設備與電腦經過 USB 線鏈接。

    應確保鏈接成功(可運行 adb devices 看是否能列出該設備)。

  3. 讓設備在 5555 端口監聽 TCP/IP 鏈接:

    adb tcpip 5555
  4. 斷開 USB 鏈接。

  5. 找到設備的 IP 地址。

    通常能在「設置」-「關於手機」-「狀態信息」-「IP地址」找到,也可使用下文提到的獲取設備IP的方法用 adb 命令來查看。

  6. 經過 IP 地址鏈接設備。

    adb connect <device-ip-address>:<port>

    這裏的 <device-ip-address> 就是上一步中找到的設備 IP 地址, <port>就是上面設置的5555端口。

  7. 拔掉USB線, 確認鏈接狀態。

    adb devices
  8. 若是能看到

    Jackeys-MacBook-Pro:xiaoailite jackey$ adb devices
    List of devices attached
    192.168.1.10:5555    device 

    說明鏈接成功。

若是鏈接不了,請確認 Android 設備與電腦是鏈接到了同一個 WiFi,而後再次執行 adb connect <device-ip-address>:<port> 那一步;

若是仍是不行的話,經過 adb kill-server 從新啓動 adb 而後從頭再來一次試試。

斷開無線鏈接命令:

adb disconnect <device-ip-address>

 

#4. 經常使用指令

1) 啓動

adb start-server

2) 中止

adb kill-server

3) 查看adb版本

adb version

4) 查看已鏈接的設備

adb devices

 

輸出:

Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
62ab58430211    device

輸出格式爲[serialNumber][state], 其中state有以下幾種:

  • offline - 表示設備未鏈接成功或無響應
  • device - 設備已鏈接. 須要注意這個狀態並不標識Android系統以及徹底啓動和可操做, 在設備啓動過程當中設備實例就可鏈接到adb, 但啓動完畢後系統才處於可操做狀態
  • no device - 沒有設備/模擬器鏈接

5) 爲命令指定目標設備

adb [-d|-e|-s <serialNumber>] <command>

在多個設備/模擬器鏈接的狀況下較經常使用的是 -s <serialNumber> 參數,serialNumber 能夠經過 adb devices 命令獲取

6) 指定adb server的網絡端口

adb -P <port> start-server

默認端口是5037

7) 獲取設備的IP

adb shell ifconfig | grep Mask

8)查看應用列表

adb shell pm list packages

在 adb shell pm list packages 的基礎上能夠加一些參數進行過濾查看不一樣的列表,支持的過濾參數以下:

9) 安裝APK

adb install [-lrtsdg] <path_to_apk>

[100%] /data/local/tmp/1.apk
    pkg: /data/local/tmp/1.apk
Success

10)卸載應用

adb uninstall [-k] <packagename>

<packagename> 表示應用的包名,-k 參數可選,表示卸載應用但保留數據和緩存目錄。

示例:

adb uninstall com.qihoo360.mobilesafe

11)清除應用數據與緩存

adb shell pm clear <packagename>

<packagename> 表示應用名包,這條命令的效果至關於在設置裏的應用信息界面點擊了「清除緩存」和「清除數據」。

示例:

adb shell pm clear com.qihoo360.mobilesafe

 12)查看前臺Activity

adb shell dumpsys activity activities | grep mFocusedActivity

13) 查看正在運行的Services

adb shell dumpsys activity services [<packagename>]

<packagename> 參數不是必須的,指定 <packagename> 表示查看與某個包名相關的 Services,不指定表示查看全部 Services。

<packagename> 不必定要給出完整的包名,好比運行 adb shell dumpsys activity services org.mazhuang,那麼包名 org.mazhuang.demo1org.mazhuang.demo2 和 org.mazhuang123 等相關的 Services 都會列出來。

14) 與應用交互 

15) 調起Activity

adb shell am start [options] <INTENT>

例如調起微信主界面:

adb shell am start -n com.tencent.mm/.ui.LauncherUI

調起 org.mazhuang.boottimemeasure/.MainActivity 並傳給它 string 數據鍵值對 toast - hello, world

adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"

16) 調起Service

adb shell am startservice [options] <INTENT>

例如調起微信的某Service

adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService

17) 發送廣播

adb shell am broadcast [options] <INTENT>

能夠向全部組件廣播,也能夠只向指定組件廣播。

例如,向全部組件廣播 BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

又例如,只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 廣播 BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver

這類用法在測試的時候很實用,好比某個廣播的場景很難製造,能夠考慮經過這種方式來發送廣播。

既能發送系統預約義的廣播,也能發送自定義廣播。以下是部分系統預約義廣播及正常觸發時機:

 

 18) 強制中止應用

adb shell am force-stop <packagename>

示例:

adb shell am force-stop com.qihoo360.mobilesafe

19) 文件管理

複製設備裏的文件到電腦

adb pull <設備裏的文件路徑> [電腦上的目錄]

其中 電腦上的目錄 參數能夠省略,默認複製到當前目錄。

示例:

adb pull /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

20)模擬按鍵/輸入

在 adb shell 裏有個很實用的命令叫 input,經過它能夠作一些有趣的事情。

input 命令的完整 help 信息以下:

Usage: input [<source>] <command> [<arg>...]
The sources are:
mouse
keyboard
joystick
touchnavigation
touchpad
trackball
stylus
dpad
gesture
touchscreen
gamepad

The commands and default sources are:
text <string> (Default: touchscreen)
keyevent [–longpress] <key code number or name> … (Default: keyboard)
tap <x> <y> (Default: touchscreen)
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll <dx> <dy> (Default: trackball)

好比使用 adb shell input keyevent <keycode> 命令,不一樣的 keycode 能實現不一樣的功能,完整的 keycode 列表詳見 KeyEvent,摘引部分我以爲有意思的以下:

下面是input命令的一些用法舉例

按電源鍵
adb shell input keyevent 26
菜單鍵
adb shell input keyevent 82
HOME鍵
adb shell input keyevent 3
返回鍵
adb shell input keyevent 4
增長音量
adb shell input keyevent 24
下降音量
adb shell input keyevent 25
靜音開/關
adb shell input keyevent 164
播放/暫停
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
滑動解鎖

若是鎖屏沒有密碼,是經過滑動手勢解鎖,那麼能夠經過 input swipe 來解鎖。

命令(參數以機型 Nexus 5,向上滑動手勢解鎖舉例)

adb shell input swipe 300 1000 300 500

參數 300 1000 300 500 分別表示起始點x座標 起始點y座標 結束點x座標 結束點y座標

輸入文本

在焦點處於某文本框時,能夠經過 input 命令來輸入文本。

adb shell input text hello

 21)查看日誌

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(最高,啥也不輸出)

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

示例:

adb logcat *:W

會將 Warning、Error、Fatal 和 Silent 日誌輸出。

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

 

按 tag 和級別過濾日誌

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

好比,命令:

adb logcat ActivityManager:I MyApp:D *:S

表示輸出 tag ActivityManager 的 Info 以上級別日誌,輸出 tag MyApp 的 Debug 以上級別日誌,及其它 tag 的 Silent 級別日誌(即屏蔽其它 tag 日誌)。

 

清空日誌

adb logcat -c

 

內核日誌

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] 表明內核開始啓動後的時間,單位爲秒。

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

 

22)查看設備型號

adb shell getprop ro.product.model

輸出示例:

MI PLAY

23)電池情況

adb shell dumpsys battery

輸出示例:

Current Battery Service state:
  AC powered: false
  USB powered: true
  Wireless powered: false
  Max charging current: 500000
  Max charging voltage: 5000000
  Charge counter: 92
  status: 2
  health: 2
  present: true
  level: 99
  scale: 100
  voltage: 4304
  temperature: 300
  technology: Li-poly

其中 scale 表明最大電量,level 表明當前電量。上面的輸出表示還剩下 99% 的電量。

24)屏幕分辨率

adb shell wm size

輸出示例:

Physical size: 1080x2280

該設備屏幕分辨率爲 1080px * 2280px。

若是使用命令修改過,那輸出多是:

Physical size: 1080x1920
Override size: 480x1024

代表設備的屏幕分辨率本來是 1080px * 1920px,當前被修改成 480px * 1024px。

25)屏幕密度

adb shell wm density

輸出示例:

Physical density: 480
Override density: 440

表面該屏幕是480dpi, 當前被修改成440dpi

26)顯示屏參數

adb shell dumpsys window displays

輸出示例:

WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
  Display: mDisplayId=0
    init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1810x1731
    deferred=false layoutNeeded=false

其中 mDisplayId 爲 顯示屏編號,init 是初始分辨率和屏幕密度,app 的高度比 init 裏的要小,表示屏幕底部有虛擬按鍵,高度爲 1920 - 1794 = 126px 合 42dp。

27)查看android_id

adb shell settings get secure android_id

輸出示例:

400e7cbc54f5cf60

28)查看IMEI

在 Android 4.4 及如下版本可經過以下命令獲取 IMEI:

adb shell dumpsys iphonesubinfo

輸出示例:

Phone Subscriber Info:
  Phone Type = GSM
  Device ID = 860955027785041

其中的 Device ID 就是 IMEI。

而在 Android 5.0 及以上版本里這個命令輸出爲空,得經過其它方式獲取了(須要 root 權限):

adb shell
su
service call iphonesubinfo 1

輸出示例:

Result: Parcel(
  0x00000000: 00000000 0000000f 00360038 00390030 '........8.6.0.9.'
  0x00000010: 00350035 00320030 00370037 00350038 '5.5.0.2.7.7.8.5.'
  0x00000020: 00340030 00000031                   '0.4.1...        ')

把裏面的有效內容提取出來就是 IMEI 了,好比這裏的是 860955027785041

參考:adb shell dumpsys iphonesubinfo not working since Android 5.0 Lollipop

29)Android系統版本

adb shell getprop ro.build.version.release

輸出示例:

8.1.0

30)IP地址

adb shell ifconfig | grep Mask

輸出示例:

inet addr:10.130.245.230  Mask:255.255.255.252
inet addr:127.0.0.1  Mask:255.0.0.0

那麼 10.130.245.230 就是設備 IP 地址。

在有的設備上這個命令沒有輸出,若是設備連着 WiFi,可使用以下命令來查看局域網 IP:

adb shell ifconfig wlan0

輸出示例:

wlan0: ip 10.129.160.99 mask 255.255.240.0 flags [up broadcast running multicast]

wlan0     Link encap:UNSPEC
          inet addr:10.129.168.57  Bcast:10.129.175.255  Mask:255.255.240.0
          inet6 addr: fe80::66cc:2eff:fe68:b6b6/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:496520 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68215 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3000
          RX bytes:116266821 TX bytes:8311736

若是以上命令仍然不能獲得指望的信息,那能夠試試如下命令(部分系統版本里可用):

adb shell netcfg

輸出示例:

wlan0    UP                               10.129.160.99/20  0x00001043 f8:a9:d0:17:42:4d
lo       UP                                   127.0.0.1/8   0x00000049 00:00:00:00:00:00
p2p0     UP                                     0.0.0.0/0   0x00001003 fa:a9:d0:17:42:4d
sit0     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
rmnet0   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet1   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet3   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet2   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet4   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet6   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet5   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rmnet7   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00
rev_rmnet3 DOWN                                   0.0.0.0/0   0x00001002 4e:b7:e4:2e:17:58
rev_rmnet2 DOWN                                   0.0.0.0/0   0x00001002 4e:f0:c8:bf:7a:cf
rev_rmnet4 DOWN                                   0.0.0.0/0   0x00001002 a6:c0:3b:6b:c4:1f
rev_rmnet6 DOWN                                   0.0.0.0/0   0x00001002 66:bb:5d:64:2e:e9
rev_rmnet5 DOWN                                   0.0.0.0/0   0x00001002 0e:1b:eb:b9:23:a0
rev_rmnet7 DOWN                                   0.0.0.0/0   0x00001002 7a:d9:f6:81:40:5a
rev_rmnet8 DOWN                                   0.0.0.0/0   0x00001002 4e:e2:a9:bb:d0:1b
rev_rmnet0 DOWN                                   0.0.0.0/0   0x00001002 fe:65:d0:ca:82:a9
rev_rmnet1 DOWN                                   0.0.0.0/0   0x00001002 da:d8:e8:4f:2e:fe

能夠看到網絡鏈接名稱、啓用狀態、IP 地址和 Mac 地址等信息。

31)Mac地址

adb shell cat /sys/class/net/wlan0/address

輸出示例:

f8:a9:d0:17:42:4d

這查看的是局域網 Mac 地址,移動網絡或其它鏈接的信息能夠經過前面的小節「IP 地址」裏提到的 adb shell netcfg 命令來查看。

32)CPU信息

adb shell cat /proc/cpuinfo

輸出示例:

Processor       : ARMv7 Processor rev 0 (v7l)
processor       : 0
BogoMIPS        : 38.40

processor : 1
BogoMIPS : 38.40

processor : 2
BogoMIPS : 38.40

processor : 3
BogoMIPS : 38.40

Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x51
CPU architecture: 7
CPU variant : 0x2
CPU part : 0x06f
CPU revision : 0

Hardware : Qualcomm MSM 8974 HAMMERHEAD (Flattened Device Tree)
Revision : 000b
Serial : 0000000000000000

這是 Nexus 5 的 CPU 信息,咱們從輸出裏能夠看到使用的硬件是 Qualcomm MSM 8974,processor 的編號是 0 到 3,因此它是四核的,採用的架構是 ARMv7 Processor rev 0 (v71)

33)內存信息

adb shell cat /proc/meminfo

輸出示例:

MemTotal:        3797876 kB
MemFree:          207828 kB
MemAvailable:    1713920 kB

其中,MemTotal 就是設備的總內存,MemFree 是當前空閒內存。

34)重啓設備

adb reboot

35)修改分辨率

adb shell wm size 480x1024

表示將分辨率修改成 480px * 1024px。

36)恢復分辨率

adb shell wm size reset

37)修改屏幕密度

adb shell wm density 160

標識將屏幕修改成160dpi

38)恢復屏幕密度

adb shell wm density reset

39)修改顯示區域

adb shell wm overscan 0,0,0,200

四個數字分別表示距離左、上、右、下邊緣的留白像素,以上命令表示將屏幕底部 200px 留白。

 40)恢復顯示區域

adb shell wm overscan reset

41)關閉USB調式模式

adb shell settings put global adb_enabled 0

用命令恢復不了了,畢竟關閉了 USB 調試 adb 就鏈接不上 Android 設備了。

去設備上手動恢復吧:「設置」-「開發者選項」-「Android 調試」。

42)狀態欄和導航欄的顯示隱藏

adb shell settings put global policy_control <key-values>

<key-values> 可由以下幾種鍵及其對應的值組成,格式爲 <key1>=<value1>:<key2>=<value2>

例如:

adb shell settings put global policy_control immersive.full=*

表示設置在全部界面下都同時隱藏狀態欄和導航欄。

adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3

表示設置在包名爲 com.package1 和 com.package2 的應用裏隱藏狀態欄,在除了包名爲 com.package3 的全部應用裏隱藏導航欄。

43)屏幕截圖

adb shell screencap -p /sdcard/sc.png

而後將 png 文件導出到電腦:

adb pull /sdcard/sc.png

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

實測若是指定文件名以 .png 結尾時能夠省略 -p 參數;不然須要使用 -p 參數。若是不指定文件名,截圖文件的內容將直接輸出到 stdout。

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

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

44)屏幕錄製

錄製屏幕以 mp4 格式保存到 /sdcard:

adb shell screenrecord /sdcard/filename.mp4

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

若是須要導出到電腦:

adb pull /sdcard/filename.mp4

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

45)從新掛載 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

找到其中咱們關注的帶 /system 的那一行:

/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0

#3.從新掛載

命令:

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 下的文件隨心所欲了。

46)查看連接過的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
}

ssid 即爲咱們在 WLAN 設置裏看到的名稱,psk 爲密碼,key_mgmt 爲安全加密方式。

47)設置系統日期和時間

注:須要 root 權限。

adb shell
su
date -s 20160823.131500

表示將系統日期和時間更改成 2016 年 08 月 23 日 13 點 15 分 00 秒。

48)重啓手機

adb reboot

49)監測設備是否已root

adb shell
su

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

50)使用Monkey進行壓力測試

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

簡單用法:

adb shell monkey -p <packagename> -v 500

表示向 <packagename> 指定的應用程序發送 500 個僞隨機事件。

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

51)開啓/關閉WiFi

注:須要 root 權限。

有時須要控制設備的 WiFi 狀態,能夠用如下指令完成。

開啓 WiFi:

adb root
adb shell svc wifi enable

關閉WiFi

adb root
adb shell svc wifi disable

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

 

下面是刷機相關的命令

52)重啓到Recovery模式

adb reboot recovery

53)從Recovery模式重啓到Android

adb reboot

54)重啓到Fastboot模式

adb reboot bootloader

55)經過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>

 

最後

Android 系統是基於 Linux 內核的,因此 Linux 裏的不少命令在 Android 裏也有相同或相似的實現,在 adb shell 裏能夠調用。

相關文章
相關標籤/搜索