adb命令丨adb push命令大全_adb操控手機和指令
【ADB命令】adb push命令總結(jié)
adb push命令大全操控手機和指令
運行在 Android 設備上的adb后臺進程
執(zhí)行 adb shell ps | grep adbd ,可以找到該后臺進程,windows 請使用 findstr 替代 grep
[xuxu:~]$ adb shell ps | grep adbd
root 23227 1 6672 832 ffffffff 00019bb4 S /sbin/adbd
adb連接手機進行調(diào)試有兩種方式,一種使用USB線,一種使用無線WiFi。
第一種??使用USB線連接
1. 在手機上啟用USB調(diào)試
2. CMD窗口輸入adb devices,此時可以看到自己的設備。
【注】:無法看到自己設備時,查看手機USB調(diào)試是否打開;PC端是否安裝手機驅(qū)動。
1. 硬件狀態(tài)正常。
包括 Android 設備處于正常開機狀態(tài),USB 連接線和各種接口完好。
2. Android 設備的開發(fā)者選項和 USB 調(diào)試模式已開啟。
可以到「設置」-「開發(fā)者選項」-「Android 調(diào)試」查看。
如果在設置里找不到開發(fā)者選項,那需要通過一個彩蛋來讓它顯示出來:在「設置」-「關于手機」連續(xù)點擊「版本號」7 次。
3. 設備驅(qū)動狀態(tài)正常。
這一點在 Linux 和 Mac OS X 下基本不用操心,在 Windows 下有可能遇到需要安裝驅(qū)動的情況,確認這一點可以右鍵「計算機」-「屬性」,到「設備管理器」里查看相關設備上是否有黃色感嘆號或問號,如果沒有就說明驅(qū)動狀態(tài)已經(jīng)好了。否則可以下載一個手機助手類程序來安裝驅(qū)動先。
第二種??使用無線WiFi連接
首先先了解一點底層的知識:
Android系統(tǒng)底層運行著一個服務(adbd),用于響應和管理大家在電腦端的adb命令連接,這個服務在啟動時會根據(jù)手機的配置監(jiān)聽USB連接或網(wǎng)絡其中之一。配置的屬性為:service.adb.tcp.port,也就是監(jiān)聽的網(wǎng)絡端口
* 以上屬性的值 > 0:adbd將監(jiān)聽網(wǎng)絡對應的端口(一般為5555)
* 以上屬性的值 <=-1:adbd將監(jiān)聽USB
【注】:
1、 將 Android 設備與要運行 adb 的電腦連接到同一個局域網(wǎng),比如連到同一個 WiFi。
2、將設備與電腦通過 USB 線連接,可通過命令 adb devices 查看是否連接成功
3、 讓設備在 5555 端口監(jiān)聽 TCP/IP 連接:
adb tcpip 5555
4、斷開 USB 連接。
5、找到設備的 IP 地址。
一般能在「設置」-「關于手機」-「狀態(tài)信息」-「IP地址」找到,也可以使用命令查看;
adb shell ifconfig | grep Mask
或者
adb shell ifconfig wlan0
【注】:如果一開始沒有USB連接線,Android設備中沒有開啟adbd服務怎么辦?
1、在 Android 設備上安裝一個終端模擬器。
已經(jīng)安裝過的設備可以跳過此步。終端模擬器下載地址是: Terminal Emulator for Android Downloads
2、 將 Android 設備與要運行 adb 的電腦連接到同一個局域網(wǎng),比如連到同一個 WiFi。
3、 打開 Android 設備上的終端模擬器,在里面依次運行命令:
su
setprop service.adb.tcp.port 5555
4、在電腦上通過adb和Android設備的IP地址連接Android設備。
adb connect IP地址:端口號
【注】:有的設備,需要在第四步執(zhí)行之前,需要重啟adbd服務,可以執(zhí)行下面命令:
restart adbd
#如果該命令無效,嘗試以下命令:
adbd stop
adbd start---------------------------------------------------------------------------------------------------
常用命令總結(jié):
(1)adb設置全局代{過}{濾}理
// 設置代{過}{濾}理
adb shell settings put global http_proxy IP地址:端口號
// 移除代{過}{濾}理
adb shell settings delete global http_proxy
adb shell settings delete global global_http_proxy_host
adb shell settings delete global global_http_proxy_port
(2)查看是否可以找到設備
adb devices
【注】:查看設備連接狀態(tài)? ?adb devices -l
(3)將apk安裝到手機中,或者將apk卸載(前提:手機連接上電腦)
adb install??xxx.apk;
adb uninstall xxx.apk;
【注】:adb uninstall +apk的包名,報錯:
Failure [DELETE_FAILED_INTERNAL_ERROR]
首先,安裝后進入到shell中,pm path 包名,找到該包的位置,
然后,去掉“.apk”這個文件后綴,還需要去掉“-1”,因為“-1”它不是包名的一部分,而多次重復安裝時Android系統(tǒng)自動加上的,然后執(zhí)行命令:adb uninstall??包名,就可以成功了。
安裝/卸載設備中的應用:(前提:adb shell先進入到設備中)
pm??install /sdcard/xxx.apk
pm uninstall [packagename]
清空指定包名應用的數(shù)據(jù):
pm clear [packagename]
(4)指定adb server的網(wǎng)絡端口
adb -P <port> start-server
【注】:ADB的默認端口為 5037;
(5)將某內(nèi)容寫入到文件中
adb shell echo "1233" >> /data/local/tmp/xxx.config
(6)查看Android設備的CPU架構(gòu)信息
adb shell??cat /proc/cpuinfo
(3)對程序進行調(diào)試
adb shell am start -D -n [包名]/[包名].[活動activity名稱]
【注】:-D 的意思是用Debug方式啟動應用;
(3)啟動一個應用/服務/發(fā)送一個廣播
adb shell am start -n [包名]/[包名].[活動activity名稱]
adb shell am startservice -n [包(package)名]/[包名].[服務(service)名]
adb shell am broadcast -a [廣播動作]
例:adb shell am broadcast -a com.android.captureCamera.CaptureCameraService??//啟動nubia手機的抓拍功能
(4)查看是否能連接手機,進入到shell窗口
adb shell(注: 為了進入手機或模擬器的shell內(nèi)核)
獲取用root權(quán)限:su
如果root用戶切換到普通用戶:su shell
查看當前目錄下的所有文件,包含隱藏文件:ls -al
創(chuàng)建目錄/刪除目錄:mkdir xxx / rmdir xxx
新建文件/刪除文件:
(4)adb logcat
<1>打印指定Tag的日志信息:
adb logcat -s tag
【注】:“-s”選項 : 設置默認的過濾器,
例如:想要輸出 “System.out” 標簽的信息, 就可以使用如下命令
adb logcat -s System.out
<2>打印當前某個應用的日志信息
adb logcat |findstr pname/pid/keyword
【補充】:在運行adb shell后,也可以:logcat |grep 某個應用的名;
<3>打印日志重定向到某個文件中
adb shell logcat >D:/123/logcat.log
adb shell logcat??//持續(xù)輸出日志,直到Ctrl+C
adb shell logcat -d? ? //一次性輸出日志緩存,不會阻塞
adb shell logcat -c? ? //清空日志緩存
(5)adb push E:/burpnew.cer /sdcard/Download
(6)如果有多個設備,連接到某個設備/模擬器:
adb -s xxx(設備的名稱) shell
adb -s emulator-5554 shell
(7)adb pull/adb push
注:當我們執(zhí)行默認adb命令時(adb pull或adb push等),都是以shell身份在執(zhí)行,而非root身份,此時對于命令中的目錄權(quán)限就要特別注意,當訪問的目錄需要root權(quán)限,或只有程序自身才有訪問權(quán)限的目錄時(典型的如/data/data下的目錄),雖然目錄和文件都在,但命令仍然是無法訪問的,提示remote object does not exist或permission denied。
1、將電腦上的文件上傳到手機中
adb push E:/123/xx.txt??/data/local/tmp;
如果在執(zhí)行命令時報錯,需要查看一下/data/local/tmp文件夾的讀寫權(quán)限定義;
可以看到該目錄的擁有者和所屬組有的屬于shell,有的屬于root,shell和root具有讀寫執(zhí)行的權(quán)限,但第三個權(quán)限位為--x,即意味著除root和shell用戶外,其它用戶一律沒有讀寫的權(quán)限。但我們在運行該app時,默認的用戶卻是該進程本身,并非root或shell,所以此時是沒有辦法寫入任何文件到/data/local/tmp的。要想這樣做必須先通過代碼動態(tài)改變當前用戶模式到root模式,才能繼續(xù)往下操作。
解決辦法:改變/data/local/tmp/的權(quán)限,例如設置:chmod 777 /data/local/tmp/*
2、將手機中的文件下拉到電腦中
使用場景:測試app本地敏感數(shù)據(jù)時,一般把/data/data/中的文件,從手機中下拉到電腦上進行查看;
adb pull /data/data/包名/xxx??E:/123/
【注】:目錄/data/data/包名/是程序自身目錄,不能直接下拉到電腦中,可以進入到shell后,修改/data/data/包名/xx/的權(quán)限,例如:chmod 777 xxx,然后將相應的目錄復制到/data/local/tmp目錄中,cp -r /data/data/包名/xxx/.??/data/local/tmp;然后,退出shell,以root用戶進行adb,adb root,然后再執(zhí)行下拉命令。
(8)檢查adb的版本
注:安卓在4.x上的版本都要求adb版本必須在1.0.31版本及以上
adb version
查看adb的端口是什么?(注:一般adb端口是5037)
adb nodaemon server
判斷端口
netstat -ano|findstr "5037"
關閉/重啟adb
adb kill-server
adb start-server
(8)獲取設備列表及設備的狀態(tài)
adb devices
(8)截屏操作
adb shell screencap -p 截圖文件路徑
例:adb shell screencap??-p /sdcard/tmp.png
(8)輸入文本內(nèi)容
adb shell input text 【需要輸入文本框內(nèi)容】
(8)設備的端口轉(zhuǎn)發(fā)
【用法】:adb forward[(遠程端)協(xié)議:端口號][(設備端)協(xié)議:端口號]
例如:
adb forward tcp:23946??tcp:23946
adb forward tcp:8700 jdwp:1786
【注】: JDWP(Java Debug Wire Protocol)是一個為 Java 調(diào)試而設計的一個通訊交互協(xié)議,它定義了調(diào)試器和被調(diào)試程序之間傳遞的信息的格式。在JPDA(Java Platform Debugger Architecture)中,它定義了調(diào)試器(debugger)和被調(diào)試的 Java 虛擬機(target vm)之間的通信協(xié)議。
(8)查看設備中可以被調(diào)試的應用的進程號
adb jdwp
(8)非root設備中查看指定debug模式的包名應用沙盒數(shù)據(jù)
run-as [package name]
(8)查看設備的ip地址(查看設備的網(wǎng)絡連接情況)
adb shell netcfg
(8)查看設備的端口號信息
adb shell netstat
(8)查看當前應用的CPU消耗信息
top
(8)操作apk命令
<1> 查看aapt中的信息以及編輯apk程序包
【用法】:aapt dump xmltree [apk包][需要查看的資源文件xml]
例如: aapt dump xmltree demo.apk AndroidManifest.xml
【注】:也可以重定向把輸出信息保存到文件中
aapt dump xmltree demo.apk AndroidManifest.xml>D:/123/456.txt
<2> 用dexdump查看dex文件的詳細信息
【用法】:dexdump [dex文件路徑]
(8)進程命令
<1> 查看當前進程的內(nèi)存加載情況
ps -ef|grep 應用名? ?? ?? ?//查看某個應用的運行情況
cat /proc/[pid]/maps | grep 應用名? ?//查看當前進程的內(nèi)存映射信息,比如加載了哪些so文件、dex文件等
<2>查看進程的狀態(tài)信息
cat /proc/[pid]/status
(9)adb shell dumpsys命令
adb shell dumpsys,默認打印出當前系統(tǒng)所有service信息,在后面可加上具體的服務名
查看當前運行應用、進程的包名與Activity名,可運行:
adb shell dumpsys window | findstr mCurrentFocus
zhihu.com/people/wangsicong520