學無止境,有一技旁身,至少不至於孤陋寡聞。
隨着我們工作閱歷的提升,除了基本的業務開發,也需要提升我們自身在開發效能方面的一些儲備與筆記。
Android開發日常之gradle
Android開發日常之adb
Android開發日常之git
Android開發日常之shell alias
adb的全稱爲Android Debug Bridge,通過adb可以方便我們調試Android程序。作爲開發人員,掌握所需要的adb操作命令是非常必須的,就把平時工作中用得相對比較多的adb命令做個梳理。
ADB常用命令
-
啓動/停止adb server命令
adb start-server //啓動命令 adb kill-server //停止命令
-
adb連接設備命令
adb [-d|-e|-s ]
如果只有一個設備/模擬器連接時,可以省略掉 [-d|-e|-s ] 這一部分,直接使用 adb即可 。
如果有多個設備/模擬器連接,則需要爲命令指定目標設備。參數 含義 -d
指定當前唯一通過 USB 連接的 Android 設備爲命令目標 -e
指定當前唯一運行的模擬器爲命令目標 -s <serialNumber>
指定相應 serialNumber 號的設備/模擬器爲命令目標 在多個設備/模擬器連接的情況下較常用的是
-s
參數,serialNumber 可以通過adb devices
命令獲取。如:$ adb devices List of devices attached cfxxxxxx device emulator-5554 device 10.xxx.xxx.x:5555 device
輸出裏的 cfxxxxxx、emulator-5554 和 10.xxx.xxx.x:5555 即爲 serialNumber。
比如這時想指定 cfxxxxxx 這個設備來運行 adb 命令
獲取屏幕分辨率:adb -s cfxxxxxx shell wm size
安裝應用:
adb -s cfxxxxxx install hello.apk
遇到多設備/模擬器的情況均使用這幾個參數爲命令指定目標設備。
查詢已連接設備/模擬器
adb devices
-
安裝 APK
命令格式:adb install [-rtsdg] <apk_path>
參數:
adb install 後面可以跟一些可選參數來控制安裝 APK 的行爲,可用參數及含義如下:參數 含義 -r 允許覆蓋安裝 -t 允許安裝 AndroidManifest.xml 裏 application 指定 android:testOnly="true"
的應用-s 將應用安裝到 sdcard -d 允許降級覆蓋安裝 -g 授予所有運行時權限
-
卸載應用
adb uninstall [-k] <packagename>
<packagename>
表示應用的包名,-k 參數可選,表示卸載應用但保留數據和緩存目錄。adb uninstall com.xxx.xxx
-
查看前臺 Activity
查看棧頂activityadb shell dumpsys activity activities | grep ResumedActivity
adb shell dumpsys activity
ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents) ... ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts) ... ACTIVITY MANAGER CONTENT PROVIDERS (dumpsys activity providers) ... ACTIVITY MANAGER SERVICES (dumpsys activity services) ... ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) ... ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes) ...
-
查看設備信息
- 查看手機型號
adb shell getprop ro.product.model
- 查看電池狀況
adb shell dumpsys battery
- 查看屏幕分辨率
adb shell wm size
- 查看屏幕密度
adb shell wm density
- 查看顯示屏參數
adb shell dumpsys window displays
- 查看Android系統版本
adb shell getprop ro.build.version.release
- 查看CPU信息
adb shell cat /proc/cpuinfo
查看手機CPU架構
adb shell getprop ro.product.cpu.abi
- 查看內存信息
adb shell cat /proc/meminfo
- 打開系統設置:
adb shell am start -n com.android.settings/com.android.settings.Settings
- 打開開發者選項:
adb shell am start -a com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS
- 進入WiFi設置
adb shell am start -a android.settings.WIRELESS_SETTINGS
- 重啓系統
adb reboot
-
日誌相關
adb logcat > ~/logdebug.log
adb logcat | grep logtag
adb logcat | grep -i logtag #忽略大小寫。
adb logcat | grep --color=auto -i logtag #設置匹配字符串顏色。
- 查看手機型號
ADB其他命令
-
清除應用數據與緩存
adb shell pm clear <packagename>
<packagename>
表示應用名包,這條命令的效果相當於在設置裏的應用信息界面點擊了「清除緩存」和「清除數據」。adb shell pm clear com.xxx.xxx
-
與應用交互操作
主要是使用am <command>
命令,常用的<command>
如下:command 用途 start [options] <INTENT>
啓動 <INTENT>
指定的 Activitystartservice [options] <INTENT>
啓動 <INTENT>
指定的 Servicebroadcast [options] <INTENT>
發送 <INTENT>
指定的廣播force-stop <packagename>
停止 <packagename>
相關的進程<INTENT>
參數很靈活,和寫 Android 程序時代碼裏的 Intent 相對應。用於決定 intent 對象的選項如下:
參數 含義 -a <ACTION>
指定 action,比如 android.intent.action.VIEW
-c <CATEGORY>
指定 category,比如 android.intent.category.APP_CONTACTS
-n <COMPONENT>
指定完整 component 名,用於明確指定啓動哪個 Activity,如 com.example.app/.ExampleActivity
<INTENT>
裏還能帶數據,就像寫代碼時的 Bundle 一樣:參數 含義 --esn <EXTRA_KEY>
null 值(只有 key 名) -e
--es <EXTRA_KEY> <EXTRA_STRING_VALUE>` --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>
boolean 值 --ei <EXTRA_KEY> <EXTRA_INT_VALUE>
integer 值 --el <EXTRA_KEY> <EXTRA_LONG_VALUE>
long 值 --ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE>
float 值 --eu <EXTRA_KEY> <EXTRA_URI_VALUE>
URI --ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>
component name --eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]
integer 數組 --ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]
long 數組 -
調起Activity
adb shell am start [options] <INTENT>
例如:
adb shell am start -n com.tencent.mm/.ui.LauncherUI
表示調起微信主界面。
adb shell am start -n com.cc.test/.MainActivity --es "params" "hello, world"
表示調起 com.cc.test/.MainActivity 並傳給它 string 數據鍵值對 params - hello, world。
-
調起Service
adb shell am startservice [options] <INTENT>
例如:
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
-
發送廣播
adb shell am broadcast [options] <INTENT>
可以向所有組件廣播,也可以只向指定組件廣播。
例如,向所有組件廣播 BOOT_COMPLETED:adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
又例如,只向 com.cc.test/.BootCompletedReceiver 廣播 BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.cc.test/.BootCompletedReceiver
-
強制停止應用
adb shell am force-stop <packagename>
命令示例:
adb shell am force-stop com.xxx.xxx
-
撤銷應用程序的權限
- 嚮應用授予權限。只能授予應用程序聲明的可選權限
adb shell pm grant <packagename> <PACKAGE_PERMISSION>
例如:
adb -d shell pm grant packageName android.permission.BATTERY_STATS
- 取消應用授權
adb shell pm revoke <packagename> <PACKAGE_PERMISSION>
-
-
模擬按鍵/輸入
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)
比如模擬點擊://在屏幕上點擊座標點x=50 y=250的位置。
adb shell input tap 50 250