ADB命令常見的問題
連接模擬器端口: adb connect 127.0.0.1:7555(7555為mumu的端口)
列出已連接的設(shè)備:adb devices
啟動 adb 服務(wù):adb start-server
停止 adb 服務(wù):adb kill-server
指定設(shè)備:adb -s <設(shè)備序列號> <命令>
普通安裝:adb install <apk路徑>
覆蓋安裝:adb install -r <apk路徑>
完全卸載:adb uninstall <包名>
保留配置文件:adb uninstall -k <包名>
顯示所有應(yīng)用:adb shell pm list packages
只顯示系統(tǒng)應(yīng)用:adb shell pm list packages -s
只顯示第三方應(yīng)用:adb shell pm list packages -3
獲取前臺包名/activity名
mac:adb shell dumpsys activity | grep mFocusedActivity
win:adb shell dumpsys activity | findstr mFocusedActivity
啟動應(yīng)用:adb shell am start -n <包名>/<Activity名>
清除應(yīng)用數(shù)據(jù)與緩存:adb shell pm clear <包名>
強制停止應(yīng)用:adb shell am force-stop <包名>
從電腦上傳文件至設(shè)備:adb push <電腦路徑> <設(shè)備路徑>
從設(shè)備復(fù)制文件至電腦:adb pull <設(shè)備路徑> <電腦路徑>
將模擬器當(dāng)前顯示截圖:adb shell screencap <設(shè)備路徑>
清除舊日志信息:adb logcat -c
開始抓取日志:adb logcat -v time > .\logcat.log
查看系統(tǒng)資源:adb shell top | grep 包名
查看 CPU 信息:adb shell dumpsys cpuinfo
看內(nèi)存信息:adb shell dumpsys meminfo
ADB簡介:
ADB,即 Android Debug Bridge,它是 Android 開發(fā)/測試人員不可替代的強大工具,也是 Android 設(shè)備玩家的好玩具府框。安卓調(diào)試橋 (Android Debug Bridge, adb),是一種可以用來操作手機設(shè)備或模擬器的命令行工具窄潭。它存在于 sdk/platform-tools 目錄下。雖然現(xiàn)在 Android Studio 已經(jīng)將大部分 ADB 命令以圖形化的形式實現(xiàn)了,但是了解一下還是有必要的送矩。
注: 有部分命令的支持情況可能與 Android 系統(tǒng)版本及定制 ROM 的實現(xiàn)有關(guān)。
查看當(dāng)前連接設(shè)備
--查看當(dāng)前連接設(shè)備
adb devices
--如果發(fā)現(xiàn)設(shè)備
adb -s 設(shè)備號 其他指令
查看頂部Activity:
--Windows環(huán)境下:
adb shell dumpsys activity | findstr "mFocusedActivity"
--Linux哪替、Mac環(huán)境下
adb shell dumpsys activity | grep "mFocusedActivity"
查看日志
adb logcat
安裝apk文件
adb install xxx.apk
--次安裝方式栋荸,如果已存在,無法安裝凭舶;
--推薦使用覆蓋安裝
adb install -r xxx.apk
--比分直接RUN出來的是包test-onlu的無法安裝晌块,推薦使用****-t****
adb install -r -t xxx.apk
卸載App:
adb uninstall com.zhy.app
--如果想要保留數(shù)據(jù),則:
adb uninstall -k com.zhy.app
傳遞文件:
--往手機SDCard傳遞文件:
adb push 文件名 手機端SDCard路徑
--例如:
adb push 帥照.jpg /sdcard/
--從手機端下載文件:
adb pull /sdcard/xxx.txt
查看手機端安裝的所有app包名:
adb shell pm list packages
啟動Activity:
adb shell am start 包名/完整Activity路徑
--例如:
adb shell am start com.zhy.aaa/com.zhy.aaa.MainActivity
--如果需要攜帶參數(shù)(攜帶一個Intent,Key 為name):
adb shell am start com.zhy.aaa/com.zhy.aaa.MainActivity -e name zhy
--啟動一個隱式的Intent:
adb shell am start -a "android.intent.action,VIEW" -d "https://www.google.com"
發(fā)送廣播:
adb shell am broadcast -a "broadcastactionfilter"
--如果需要攜帶參數(shù)(攜帶一個Intent,key為name):
adb shell am broadcast -a "broadcastactionfilter" -e name zhy
啟動服務(wù):
adb shell am startservice "com.zhy.aaa/com.zhy.aaa.MyService"
屏幕截圖:
--可以使用screencap命令來進行手機屏幕截圖帅霜,例如:
adb shell screencap /sdcard/screen.png
錄制視頻:
--可以使用screenrecord[options] filename命令來錄制屏幕視頻匆背,例如:
adb shell screenrecord /sdcard/demo.mp4
針對Android小白的常用ADB細致講解操作:
一.鏈接ADB:
啟動ADB的2種方式:
1.直接進入sdk/platform-tools目錄:
然后在命令行中輸入adb devices來驗證設(shè)備是否連接。
缺點:每次進入platform-tools目錄很麻煩身冀。
2.將adb地址寫入環(huán)境變量(即配置adb為環(huán)境變量)
--沒有配置環(huán)境變量之前:
解決上述圖片中的問題靠汁,請看下方針對MacOS和Windows系統(tǒng)的解決方案:
--對于macOS蜂大,可以這樣配置:
export PATH=$PATH:<path to Android SDK>/platform-tools
--然后在命令行中輸入source ~/.bash_profile或者source ~/.zshrc來更新配置文件。
--對于windows蝶怔,可以這樣配置:
1.先進入環(huán)境變量:
2.選擇系統(tǒng)變量下的Path再選擇編輯(你也可以選擇新建,注意添加分號;)
--然后去尋找你的Android SDK文件夾下的platform-tools,進入該文件夾并在地址欄復(fù)制當(dāng)前路徑兄墅。
--最后踢星,新建并添加復(fù)制好的路徑即可。
--驗證:配置環(huán)境變量成功后隙咸,關(guān)閉當(dāng)前cmd沐悦,再次進入cmd中,輸入adb信息五督,可以看到如下圖所示藏否,那么就OK了:
注意:Android SDK,你可在安卓官網(wǎng)去下載,或者如果你擁有AndroidStudio也會下載過它充包,它可存放在資源管理器下的任意位置副签。你知曉它的存放位置即可。
--手機打開“開發(fā)人員選項:(此處以華為暢玩7x手機為例)
進入手機設(shè)備的設(shè)置基矮,選擇關(guān)于手機:
--找到版本號淆储,并連續(xù)點擊它7次及以上,直到出現(xiàn)“已打開開發(fā)者人員選項“字樣時停止家浇。 然后再回到設(shè)置 ->系統(tǒng)本砰,這時可以看見開發(fā)人員選項并按照圖示進行勾選。
--驗證ADB連接設(shè)備成功:
前面的步驟完成后(即環(huán)境配置成功钢悲、開發(fā)者選擇中開啟了USB調(diào)試模式)点额,打開cmd(快捷鍵windows鍵+R鍵盤,在框中輸入cmd)莺琳。在任意路徑進入cmd后还棱,輸入adb device:
--如果沒有連接手機或因為數(shù)據(jù)線問題等其他原因,則會出現(xiàn)下圖:(失敗原因請自己排查)
--成功后芦昔,如下圖所示:(下方一串字母是我的手機序列號)
上方的A5R7N18202000063是我的手機設(shè)備序列號(手機不同诱贿,設(shè)備序列號也就不同),device是設(shè)備狀態(tài)咕缎。
設(shè)備的3種狀態(tài):
offline ———設(shè)備未連接到adb或者沒有響應(yīng)
device———設(shè)備已連接到ADB
no device ———未連接到模擬器/設(shè)備
二. 安裝和卸載
1.安裝:
我們可以使用adb install [option] <path> 命令來將電腦上的一個APP安裝到手機上珠十,例如:
adb install crime.apk
注意:有時候apk文件不在你的啟動cmd的路徑下,記得添加apk文件在你電腦上的path路徑凭豪。
--如果當(dāng)前連接的設(shè)備個數(shù)超過一個(比如開啟多個模擬器)焙蹭。
那么在安裝操作之前,我們需要現(xiàn)在cmd中輸入adb devices查看當(dāng)前連接的設(shè)備的序列號嫂伞,并復(fù)制你想要給哪個設(shè)備安裝apk文件的設(shè)備序列號孔厉。然后指定要操作的設(shè)備的序列號拯钻,執(zhí)行adb -s [serial_number] command 命令。
比如現(xiàn)在有多個設(shè)備連接了電腦并都打開了開發(fā)者模式撰豺,那么我如果直到了我當(dāng)前華為設(shè)備的序列號后粪般,輸入下列命令:
adb -s A5R7N18202000063 install crime.apk
即可安裝成功crime.apk文件了。
2.覆蓋安裝:
如果你當(dāng)前要操作的手機設(shè)備已經(jīng)安裝了你想要安裝的APP污桦,你再去執(zhí)行安裝命令(即重復(fù)安裝)亩歹,就會報錯:Failure [INSTALL_FAILED_ALREADY_EXISTS].解決方案為:覆蓋安裝:加上-r(replace)來替換當(dāng)前已安裝的應(yīng)用。
adb install -r crime.apk
3.卸載:
卸載一個當(dāng)前設(shè)備上的某個APP的命令為:adb uninstall [option]<packagename>凡橱,前提是你得直到你想要卸載的APP的包名小作。
注意:卸載APP知道它的包名;從電腦上安裝APP到手機上只需要知道電腦中APK 的存放路徑和APK文件名稼钩。
APP卸載后顾稀,其緩存文件一般也會被清除。
如果要想保留緩存文件坝撑,添加 -k,即:
adb uninstall -k 包名
三.文件操作
1.Android 手機中的文件路徑:
以前手機容量較小静秆,一般會有可拔插的SD卡擴展內(nèi)存,然后把資源數(shù)據(jù)存放到SD卡目錄下∩茉兀現(xiàn)在诡宗,手機取消了SD卡,外部存儲空間很大了击儡,但是Android仍稱之為SD塔沃。為了做兼容,也會mock一個假的SD卡路徑阳谍。因此蛀柴,很多開發(fā)者將APP數(shù)據(jù)保存在/sdcard目錄下。現(xiàn)在已經(jīng)不推薦將文件存儲在/sdcard目錄下了矫夯。
--音視頻文件還是應(yīng)該放在SD卡目錄下鸽疾。 SD卡的路徑是/mnt/sdcard/或者/sdcard,/sdcard是/mnt/sdcard的軟鏈接训貌。其中制肮,/mnt/sdcard/DCIM一般用于存放照片,DCIM——Digital Camera Images递沪。但是截圖及APP保存圖片的位置豺鼻,一般是在/mnt/sdcard/Pictures。以此類推款慨,視頻文件存放在/mnt/sdcard/Movies等儒飒。
--當(dāng)我們手機上安裝完成了一個APP后,相關(guān)的文件存放在下面2個地方:
1):APP本身被存放在/data/app 目錄下檩奠。
2):文件目錄存放在/data/data/<package name>目錄下桩了,該目錄下存放有數(shù)據(jù)庫附帽、SharedPreference和其他緩存數(shù)據(jù)。
--如果想把手機中的文件拷貝到電腦中井誉,使用adb pull <remote> [local]命令蕉扮。其中,local地址為空送悔,則會拷貝到電腦當(dāng)前目錄下:
例如:
adb pull /sdcard/crime.apk
--如果想要把電腦中的文件拷貝到手機里面慢显,使用**adb push <local> <remote> **命令:
adb push crime.apk /sdcard/data/data
2.清除APP數(shù)據(jù):
在開發(fā)中,經(jīng)常會遇到:清空APP緩存數(shù)據(jù)欠啤,然后進行一系列請求。如屋灌,清空APP緩存數(shù)據(jù)洁段,可使用adb shell pm clear com.example.packagename 命令。注:該命令清除掉APP的緩存共郭,還能把APP的數(shù)據(jù)給清空祠丝。
3.查看所有App的名稱:
使用如下命令:
adb shell pm list packages
注意:該命令可以查看手機上的APP名稱〕冢可以在后面加上 -f 写半,這樣還能顯示該APP的路徑。
即:
adb shell pm list packages -f
四.事件輸入:
1.input:
使用adb shell input命令向屏幕輸入一些信息尉咕,
例如:
adb shell input text "insert%stext%shere"
注意:%s表示空格叠蝇。
--使用adb shell input tap命令來模擬屏幕點擊事件,例如:
adb shell input tap 500 1450
表示在屏幕上(500年缎,1450)的坐標(biāo)點上進行一次點擊悔捶。
--使用adb shell input swipe命令來模擬手勢滑動事件,例如:
adb shell input swipe 100 500 100 1450 100
表示從屏幕坐標(biāo)(100单芜,500)開始蜕该,滑動到(100,1450)結(jié)束,整個過程耗時100ms.
--使用上面的命令還可以模擬”****長按(long press)****操作洲鸠,也就是2個坐標(biāo)點相同堂淡,耗時超過500ms.
adb shell input swipe 100 500 100 500 500
--使用adb shell input keyevent命令來模擬點按實體按鈕的命令,例如:
adb shell input keyevent 25
該命令表示調(diào)低音量扒腕。數(shù)字25是在AOSP源碼中的KeyEvent類里賣弄定義的一個事件常量绢淀。該類定義了將近300個事件常量。
2.am:
am(Activity Manager)命令來啟動一個APP袜匿、啟動Activity更啄、啟動廣播和服務(wù)等等。
啟動一個activity居灯,最簡單的命令可以使用**adb shell am start **com.package.name/com.package.name.ActivityName祭务,例如:
adb shell am start com.example.crime/com.example.crime.MainActivity
--如果啟動帶有參數(shù)内狗,則使用-e標(biāo)簽,比如有一個SecondActivity义锥,如:
class SecondActivity : AppCompatActivity() {
companion object {
private val ARGUS_NAME = "argus_name"
fun launch(activity: Activity, content: String): Intent {
val intent = Intent(activity, SecondActivity::class.java)
intent.putExtra(ARGUS_NAME, content)
return intent
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val name = intent.getStringExtra(ARGUS_NAME)
nameTv.text = "Hello, $name"
}
}
即啟動SecondActivity的話需要傳入一個agrus_name參數(shù)柳沙,那么在命令行中可以執(zhí)行:
adb shell am start com.example.crime/com.example.crime.SecondActivity -e argus_name QiuShui
--啟動帶的參數(shù)一般是Key-value形式,這里的key是argus_name,Value是QiuShui.
除了默認啟動的activity外拌倍,打開其他的activity時赂鲤,需要在清單文件中添加android:exported="true"屬性。
--要啟動一個隱式的Intent柱恤,也就是說需要傳入action等參數(shù)数初,在ADB調(diào)試橋中可以得知Intent的參數(shù)規(guī)范,比如-a表示action,-c表示category,-d表示data_uri,-e表示添加額外Key-Value信息梗顺。例如:
adb shell am start -a "android.intent.action.VIEW" -d "https://www.google.com"
上面這個命令會啟動瀏覽器打開谷歌網(wǎng)址頁面泡孩。
--am 也能發(fā)送廣播和啟動服務(wù)。比如啟動一個廣播寺谤,一般要添加一個-a:
adb shell am broadcast -a "our.specified.action"
還可以在上述命令后面添加-e來添加額外的信息仑鸥。
--使用下面的命令可以直接讓手機重啟:
adb shell am broadcast -a android.intent.action.BOOT_COMPILETED
--啟動一個服務(wù)也是類似,例如:
adb shell am startservice "com.example.crime/com.example.crime.MyService"
五.事件輸出:
1.日志信息:
使用adb logcat可以顯示日志信息变屁,使用command +c (Windows下:ctrl+c)來停止日志輸出眼俊。
比起原生的adb logcat,JakeWharton大神的pidcat顯示效果更好:
但我還是更喜歡AndroidStudio的日志功能粟关,非常完善疮胖。
2.dumpsys:
dumpsys命令可以提供非常多的系統(tǒng)信息√芤郏可以通過adb shell service list來查看dumpsys能提供查詢信息的服務(wù)获列,常用的有:
例如,要查看電池信息蛔垢,命令行輸入adb shell dumpsys battery击孩,可以看到如下圖:
--使用**adb shell dumpsys activity **查看信息,會有很長的代碼鹏漆,分析其結(jié)構(gòu)巩梢,可以把上述命令得到的信息拆分為:
dumpsys activity intents
dumpsys activity broadcasts
dumpsys activity providers
dumpsys activity permissions
dumpsys activity services
dumpsys activity recents
dumpsys activity activities
dumpsys activity processes
我們可以選擇這幾個中的一個命令進行查詢。例如查看界面相關(guān)的艺玲,使用adb shell dumpsys activity activities命令括蝠。
上述幾種信息類型可以用縮寫來表示,即adb shell dumpsys activity a等價于adb shell dumpsys activity activities命令等饭聚。注意:providers的縮寫是prov忌警、permissions的縮寫是perm。
--如果上述輸出內(nèi)容太多秒梳,只想關(guān)注運行的Activity結(jié)構(gòu)層次其他的無所謂法绵,可以使用grep命令來過濾:
adb shell dumpsys activity | grep -i 'run'
我這里會得到這樣的輸出:
* ContentProviderRecord{978680e u0 qiushui.me.test/com.android.tools.fd.runtime.InstantRunContentProvider}
authority=qiushui.me.test.com.android.tools.fd.runtime.InstantRunContentProvider
Running activities (most recent first):
Run #1: ActivityRecord{304ded1 u0 qiushui.me.test/.SecondActivity t14}
Run #0: ActivityRecord{19b9e16 u0 qiushui.me.test/.MainActivity t14}
Running activities (most recent first):
Run #0: ActivityRecord{f9bafb7 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t13}
ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)
User #0: state=RUNNING_UNLOCKED
信息中:屏幕正在顯示的界面是SecondActivity箕速,然后是MainActivity.NexusLauncherActivity是處于最底層,就是Launcher.
--查看APP有那些進程朋譬,使用adb shell dumpsys activity p <packagename> | grep -i ‘ProcessRecord’ | grep -i 'PID’
盐茎,然后程序會輸出信息,你可以數(shù)一下有多少個PID開頭徙赢,有多少個就表示有幾個進程字柠。還可以知道分別的進程名和PID等等。
--查看APP使用了那些服務(wù)狡赐,使用** adb shell dumpsys activity s <package name> | grep -i ‘ServiceRecord’ 命令窑业,顯示結(jié)果中可以看出是誰推送的服務(wù)。
--查看當(dāng)前APP的內(nèi)存使用情況枕屉,使用adb shell dumpsys meminfo <package name>命令数冬,顯示結(jié)果可以知道當(dāng)前APP內(nèi)存使用情況。
3.屏幕截圖:
使用screencap<filename>** 命令來進行手機屏幕截圖搀庶,例如:
adb shell screencap /sdcard/screen.png
4.錄制視頻:
使用screenrecord [options] filename命令來錄制屏幕視頻,例如:
adb shell screenrecord /sdcard/demo.mp4
注:此命令適用于Android 4.4及以上的設(shè)備中铜异。
錄制視頻也有參數(shù)選項哥倔,比如 --size 設(shè)置視頻大小, --time-limit設(shè)置最大錄制時長等揍庄。
六.系統(tǒng)命令:
--查看進程信息:
使用adb shell ps命令查看進程信息咆蒿。可以在該命令后加包名蚂子,來查看某個應(yīng)用程序的進程信息沃测。
--查看CPU使用情況:
使用**adb shell top **命令來查看系統(tǒng)CPU使用情況。(ctrl+c結(jié)束)