學(xué)無(wú)止境,有一技旁身,至少不至于孤陋寡聞。
隨著我們工作閱歷的提升,除了基本的業(yè)務(wù)開(kāi)發(fā),也需要提升我們自身在開(kāi)發(fā)效能方面的一些儲(chǔ)備與筆記。
Android開(kāi)發(fā)日常之gradle
Android開(kāi)發(fā)日常之a(chǎn)db
Android開(kāi)發(fā)日常之git
Android開(kāi)發(fā)日常之shell alias
adb的全稱為Android Debug Bridge,通過(guò)adb可以方便我們調(diào)試Android程序。作為開(kāi)發(fā)人員,掌握所需要的adb操作命令是非常必須的,就把平時(shí)工作中用得相對(duì)比較多的adb命令做個(gè)梳理。
(日常中把a(bǔ)db操作命令搭配shell alias使用起來(lái)更方便)
ADB常用命令
-
啟動(dòng)/停止adb server命令
adb start-server //啟動(dòng)命令 adb kill-server //停止命令 查詢已連接設(shè)備/模擬器
adb devices-
adb連接設(shè)備命令
adb [-d|-e|-s ]
如果只有一個(gè)設(shè)備/模擬器連接時(shí),可以省略掉 [-d|-e|-s ] 這一部分,直接使用 adb即可 。
如果有多個(gè)設(shè)備/模擬器連接,則需要為命令指定目標(biāo)設(shè)備。參數(shù) 含義 -d指定當(dāng)前唯一通過(guò) USB 連接的 Android 設(shè)備為命令目標(biāo) -e指定當(dāng)前唯一運(yùn)行的模擬器為命令目標(biāo) -s <serialNumber>指定相應(yīng) serialNumber 號(hào)的設(shè)備/模擬器為命令目標(biāo) 在多個(gè)設(shè)備/模擬器連接的情況下較常用的是
-s參數(shù),serialNumber 可以通過(guò)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。
比如這時(shí)想指定 cfxxxxxx 這個(gè)設(shè)備來(lái)運(yùn)行 adb 命令
獲取屏幕分辨率:adb -s cfxxxxxx shell wm size安裝應(yīng)用:
adb -s cfxxxxxx install hello.apk遇到多設(shè)備/模擬器的情況均使用這幾個(gè)參數(shù)為命令指定目標(biāo)設(shè)備。
-
安裝 APK
命令格式:adb install [-rtsdg] <apk_path>參數(shù):
adb install 后面可以跟一些可選參數(shù)來(lái)控制安裝 APK 的行為,可用參數(shù)及含義如下:參數(shù) 含義 -r 允許覆蓋安裝 -t 允許安裝 AndroidManifest.xml 里 application 指定 android:testOnly="true"的應(yīng)用-s 將應(yīng)用安裝到 sdcard -d 允許降級(jí)覆蓋安裝 -g 授予所有運(yùn)行時(shí)權(quán)限
-
卸載應(yīng)用
adb uninstall [-k] <packagename><packagename>表示應(yīng)用的包名,-k 參數(shù)可選,表示卸載應(yīng)用但保留數(shù)據(jù)和緩存目錄。adb uninstall com.xxx.xxx -
查看前臺(tái) Activity
查看棧頂activityadb shell dumpsys activity activities | grep ResumedActivity
adb shell dumpsys activityACTIVITY 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) ... -
查看設(shè)備信息
- 查看手機(jī)型號(hào)
adb shell getprop ro.product.model - 查看電池狀況
adb shell dumpsys battery - 查看屏幕分辨率
adb shell wm size - 查看屏幕密度
adb shell wm density - 查看顯示屏參數(shù)
adb shell dumpsys window displays - 查看Android系統(tǒng)版本
adb shell getprop ro.build.version.release - 查看CPU信息
adb shell cat /proc/cpuinfo
查看手機(jī)CPU架構(gòu)
adb shell getprop ro.product.cpu.abi - 查看內(nèi)存信息
adb shell cat /proc/meminfo - 打開(kāi)系統(tǒng)設(shè)置:
adb shell am start -n com.android.settings/com.android.settings.Settings - 打開(kāi)開(kāi)發(fā)者選項(xiàng):
adb shell am start -a com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS - 進(jìn)入WiFi設(shè)置
adb shell am start -a android.settings.WIRELESS_SETTINGS - 重啟系統(tǒng)
adb reboot -
日志相關(guān)
adb logcat > ~/logdebug.log
adb logcat | grep logtag
adb logcat | grep -i logtag #忽略大小寫。
adb logcat | grep --color=auto -i logtag #設(shè)置匹配字符串顏色。
- 查看手機(jī)型號(hào)
ADB其他命令
-
清除應(yīng)用數(shù)據(jù)與緩存
adb shell pm clear <packagename><packagename>表示應(yīng)用名包,這條命令的效果相當(dāng)于在設(shè)置里的應(yīng)用信息界面點(diǎn)擊了「清除緩存」和「清除數(shù)據(jù)」。adb shell pm clear com.xxx.xxx -
與應(yīng)用交互操作
主要是使用am <command>命令,常用的<command>如下:command 用途 start [options] <INTENT>啟動(dòng) <INTENT>指定的 Activitystartservice [options] <INTENT>啟動(dòng) <INTENT>指定的 Servicebroadcast [options] <INTENT>發(fā)送 <INTENT>指定的廣播force-stop <packagename>停止 <packagename>相關(guān)的進(jìn)程<INTENT>參數(shù)很靈活,和寫 Android 程序時(shí)代碼里的 Intent 相對(duì)應(yīng)。用于決定 intent 對(duì)象的選項(xiàng)如下:
參數(shù) 含義 -a <ACTION>指定 action,比如 android.intent.action.VIEW-c <CATEGORY>指定 category,比如 android.intent.category.APP_CONTACTS-n <COMPONENT>指定完整 component 名,用于明確指定啟動(dòng)哪個(gè) Activity,如 com.example.app/.ExampleActivity<INTENT>里還能帶數(shù)據(jù),就像寫代碼時(shí)的 Bundle 一樣:參數(shù) 含義 --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 數(shù)組 --ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]long 數(shù)組 -
調(diào)起Activity
adb shell am start [options] <INTENT>例如:
adb shell am start -n com.tencent.mm/.ui.LauncherUI表示調(diào)起微信主界面。
adb shell am start -n com.cc.test/.MainActivity --es "params" "hello, world"表示調(diào)起 com.cc.test/.MainActivity 并傳給它 string 數(shù)據(jù)鍵值對(duì) params - hello, world。
-
調(diào)起Service
adb shell am startservice [options] <INTENT>例如:
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService -
發(fā)送廣播
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 -
強(qiáng)制停止應(yīng)用
adb shell am force-stop <packagename>命令示例:
adb shell am force-stop com.xxx.xxx -
撤銷應(yīng)用程序的權(quán)限
- 向應(yīng)用授予權(quán)限。只能授予應(yīng)用程序聲明的可選權(quán)限
adb shell pm grant <packagename> <PACKAGE_PERMISSION>例如:
adb -d shell pm grant packageName android.permission.BATTERY_STATS- 取消應(yīng)用授權(quán)
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)比如模擬點(diǎn)擊://在屏幕上點(diǎn)擊坐標(biāo)點(diǎn)x=50 y=250的位置。
adb shell input tap 50 250