Android中常用的adb shell命令

注意事項

這裏寫的命令,網頁可能會重新編輯格式,比如我寫了兩個減號,發佈後變成了一個減號;
如果這裏的命令不能正確執行,請手動輸入命令,切記切換英文狀態。
android 常用shell命令記錄下來備忘
\n 在shell命令中的作用是換行(而\r\n會將一個二進制文件格式從unicode變爲混合格式)
& 可以用來連接多個命令
-help 可以快速知道一個命令怎麼用的
比如adb -help 可以知道adb的用法

參考文章
https://github.com/mzlogin/awesome-adb

設置adb環境變量

其實就是將adb.exe的路徑放到Path中,目的是cmd直接可以使用adb命令
比如我的adb.exe路徑G:\tools\adt-bundle\sdk\platform-tools\adb.exe
我的電腦》高級》設置》環境變量》Path》增加G:\tools\adt-bundle\sdk\platform-tools

(注意不要adb.exe)
##檢測環境變量

打開cmd窗口,輸入adb看效果
如果出現一堆adb信息說明配置成功         
如果出現'adb' is not recognized as an internal or external command

進入shell
adb shell
如果有多個設備怎麼辦?
adb devices查看你的設備;
adb -s xiaomi shell:-s命令表示選擇設備,這裏是選擇xiaomi設備進shell
ls查看文件

 ls -l /system/app/Demo.apk
rwxr-xr-x root     root        48550 2016-02-22 21:55 CertificateInstallerProviders.apk

Linux的文件基本上分爲三個屬性:可讀®,可寫(w),可執行(x)。
對rwxr-xr-x 的解讀:
rwx(Owner)r-x(Group)r-x(Other)
這個例子表示的權限是:使用者自己可讀,可寫,可執行;同一組的用戶可讀,不可寫,可執行;其它用戶可讀,不可寫,可執行。
命令中r=4,w=2,x=1,比如

chmod 644  system/app/Demo.apk命令執行以後,查看這個文件發現權限被修改了
 ls -l /system/app/Demo.apk
 -rw-r--r-- root     root        48550 2016-02-22 21:55 Demo.apk(將這個apk放在了system下面,而且還讓它具有root權限了)

ls -a 列出當前目錄下的所有文件

##cd切換路徑
cd /mnt/sdcard 切換到內存卡
mount掛載
mount -o remount,rw /system 將/system目錄掛載,設置爲可以讀寫
實例:

127|shell@android:/mnt/sdcard $ mount -o remount,rw /system
mount -o remount,rw /system
mount: Operation not permitted

如果出現mount: Operation not permitted說明沒有root權限

su獲取ROOT權限
前提是你的手機已經root了
su命令表示切換ROOT用戶下運行(就是說你有了root權限啦)
下面先獲取root,獲取root成功的時候$變成了#

255|shell@android:/mnt/sdcard $ su
su
root@android:/storage/sdcard0 # mount -o remount,rw /system 
mount -o remount,rw /system

此時在執行掛載就可以成功

注意:$表示普通權限用戶;#表示ROOT權限用戶。

cp複製文件

cp -f /sdcard/SDKLongRrs.apk /system/app/SDKLongRrs.apk##

如果 cp: not found,說明該手機中cp命令不存在,換cat複製試試

127|root@android:/storage/sdcard0 # cat  /sdcard/SDKLongRrs.apk> /system/app/SDKLongRrs.apk

右箭頭>指明拷貝的方向哈

獲取md5值

 md5 /system/app/SDKLongRrs.apk

獲取一個目錄下所有文件的md5

 md5 /system/app/*

chmod修改文件權限
讓apk變成可以安裝的

 chmod 644 /system/app/SDKLongRrs.apk

pm安裝apk卸載應用

pm install -r /system/app/SDKLongRrs.apk
pm uninstall com.baidu.map.location

安裝應用

adb install  C:\Users\Administrator\Desktop\Root.apk

這個將電腦桌面的Root.apk安裝到手機上
有可能不成功,直接看信息,對照英文找原因,比如小米的需要點擊允許安裝,在比如空間不足,在比如應用已經存在手機上。
卸載應用

adb uninstall com.baidu.map.location
(你需要知道應用的包名哈、打開界面、執行如下操作就可以看到包名)

adb shell dumpsys window | grep mCurrentFocus

不用root手機也能夠卸載系統應用
這裏 --user 0就是以root身份去執行命令

 adb shell pm uninstall -k --user 0 com.qihoo.browser

啓動應用
(1)啓動Activity
am start -n com.googleplayapp.storerootsuaction/.MainActivity( 你得知道對應的界面的Activity路徑以及包名哈)

adb shell am start -n com.test.provider/.MainActivity

(2)啓動service

	<service
        android:name=".MyService"
        android:description="@string/Desciption"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.nandhan.myservice" />
        </intent-filter>
    </service>     
adb shell am startservice com.nandhan.myservice/.MyService

查看正在運行的 Services

adb shell dumpsys activity services [<packagename>]
包名是必須的、不需要寫完整的包名、支持模糊匹配
例如adb shell dumpsys activity services com.linux.example

查看正在運行的 activity

adb shell dumpsys activity [<packagename>]
包名是必須的、不需要寫完整的包名、支持模糊匹配
例如adb shell dumpsys activity com.linux.example

clear 清除應用數據

pm clear com.googleplayapp.storerootsuaction

##cmd下直接使用adb shell命令
如果不進入shell的,如何執行以上命令
cmd下面直接使用adb shell 後面跟上對應的命令就好
比如清除應用數據

adb shell pm clear com.googleplayapp.storerootsuaction

##電腦輸入文字到手機
比如手機要上百度,手機打開瀏覽器,點擊地址欄,輸入法切換到英文,cmd命令

adb shell input text "www.baidu.com"

你會看到手機瀏覽器的網址變成百度了
文件傳輸
電腦複製文件到手機
方法1:cmd下面使用push命令

adb push "C:\Users\Administrator\Downloads\Root.apk" /mnt/sdcard/goodRoot/

將電腦下載裏面的Root.apk複製到手機sdcard的goodRoot文件夾下面
方法2:直接使用eclipse裏面的File Explorer(對android程序員而言的哈)
複製手機文件到電腦

adb pull  /sdcard/packages.xml  C:\Users\linux\Desktop\packages.xml

快速獲取文件路徑
打開cmd,將文件拖進來,你就可以看到文件的路徑哈
##eclipse中File Explorer的使用
手機調試模式連接電腦,使用File Explorer可以查看手機文件;
root以後的手機可以查看data下面的文件
如果已經root,但是data打不開,使用以下命令
cmd下面

adb shell
shell@android:/ $ su root
chmod -R 755 /data    

(R必須大寫,linux命令區分大小寫的,cmd命令不區分大小寫,shell命令是一種linux命令)
點擊這裏查看chmod 755的含義
##rm 刪除命令

 rm -r  /mnt/sdcard/AppFolder/a.mp3  移除a.mp3文件

刪除文件夾的時候需要加上-r參數

 rm -r  /mnt/sdcard/AppFolder

關閉程序

 adb shell am force-stop 包名

一次卸載多個應用

adb uninstall com.android.a
adb uninstall com.android.b
adb uninstall com.android.c
adb uninstall com.android.d
adb uninstall com.android.e

將這多條命令寫成一個.bat文件,直接點擊bat就可以卸載多個應用了。
reboot重啓手機

adb reboot  重啓
adb reboot recovery 重啓進入recovery模式

cat查看文件
cat error.txt 這個命令可以查看error.txt文件的內容
批量執行多條adb shell命令
adb命令帶參數,cmd下面帶上參數,先獲取su,然後做其他事
演示在cmd下面可以直接使用su權限來刪除/system/bin/testa文件和/system/xbin/testb

adb shell "su -c 'rm -r -f /system/bin/testa'"
adb shell "su -c 'rm -r -f /system/xbin/testb'"

如果是直接一條條執行shell命令將是下面的4條命令

adb shell
su
rm -r -f /system/bin/testa
rm -r -f /system/xbin/testb

如何批量執行多條命令呢
寫一個.bat文件,文件內容如下:

adb shell "su -c 'rm -r -f /system/bin/testa'"
adb shell "su -c 'rm -r -f /system/xbin/testb'"
pause

保存爲bat文件,直接點擊執行.(windows系統下)。
(pause表示不關閉cmd窗口,這樣就可以看到執行的結果了)
查看進程加載的庫
可以根據進程id,查看進程加載了哪些庫,cat /proc/pid/maps
kill 幹掉進程
adb shell am force-stop
作用:強制關閉一個應用程序
舉例:adb shell am force-stop com.lt.test
adb shell am force-stop比使用 kill -9 要方便
參考http://blog.sina.com.cn/s/blog_6294abe70101275q.html
ps可以查看到進程的pid
kill -s 9 pid幹掉指定pid的進程
批量幹掉進程

busybox pkill -9 父進程
ps
USER         PID     PPID  VSIZE  RSS     WCHAN    PC         NAME
u0_a145   10608 134   292960 26816 ffffffff 4019ca70 S com.ex.thre
u0_a146   10755 134   302420 32152 ffffffff 4019ca70 S com.ex.two

使用kill -s 9 134,就可以幹掉 PID =134. PID =10608. PID =10755三個進程

查看內存信息
看手機內存信息cat /proc/meminfo
查看應用的內存信息 dumpsys meminfo 應用包名
查看應用是否安裝
查看應用的安裝路徑 pm path 應用包名
獲取手機上已經安裝的所有的程序 pm list packages
過濾grep 和findstr
在windows上直接使用findstr來過濾你想要的信息

adb shell ps|findstr baidu

這個命令找出手機上正在運行並且這個名字包含baidu的進程

//下面的寫法也對
adb shell ps baidu
adb shell ps|findstr -i baidu

對應的android或者linux中的shell命令是grep

ps|gerp  baidu

提示 :有的手機上沒有grep命令,這時候可以採用findstr;或者往手機裏放一個busybox文件,然後使用busybox grep命令,效果一樣
查看運行的程序
查看手機正在運行的程序 ps
查看自己的程序是否在運行 ps | grep 應用包名
如果沒有grep命令,可以放置一個busybox工具到手機
查看360對應的程序是否在運行 ps | busybox grep m.qihoo*
刪除多個文件
cd dir
rm * 刪除dir中所有文件
adb獲取手機參數
adb獲取手機所有參數參考這個
adb shell getprop
adb獲取iccid

service call iphonesubinfo 4(需要權限android.permission.READ_PHONE_STATE)

adb獲取imei

adb -d shell dumpsys iphonesubinfo

adb獲取androidid
androidid藏在這裏[net.hostname]: [android-b33f3ac550112627]
命令:getprop net.hostname
adb獲取serialno

命令:getprop ro.boot.serialno或者getprop ro.serialno

adb獲取imei

service call iphonesubinfo 1

更多信息參考這個
http://stackoverflow.com/questions/27002663/adb-shell-dumpsys-iphonesubinfo-not-working-since-android-5-0-lollipop
使用"讀取proc的方式"獲取正在運行的進程
// 1,遍歷"/proc"文件夾下面的文件夾,其中有些"文件夾名稱"就是進程id(PID)
ls /proc
// 2,cat命令獲取對應進程的名字(cat /proc/PID/cmdline)
cat /proc/1/cmdline 得到結果/init
查看進程具體的信息
(實例:12073是要查看的進程的PID)

cat /proc/12073/maps   查看進程的文件結構
cat /proc/12073/status   查看進程的狀態

##通過packages.xml文件查看app安裝信息
在/data/system/packages.xml文件中,找到你應用相關內容
我在小米上使用cat /data/system/packages.xml命令得到以下數據

<package name="com.trafficctr.miui" codePath="/system/app/TrafficControl" nativeLibraryPath="/system/app/TrafficControl/lib" flags="540229" ft="152fdda2cc0" it="152fdda2cc0" ut="152fdda2cc0" version="29" userId="10069">
       .....
    </package>

顯然name就是包名,codePath就是安裝的路徑
使用shell啓動和終止模擬器

adb shell stop//停止
adb shell start//啓動

##多設備選擇
adb devices//顯示處於調式模式的devices
adb -s emulator-5554 shell//表示選擇5554模擬器的進入shell
42.busybox的安裝
buxybox
查看進程優先級
假設要查看程序com.test.app.a的進程優先級
adb shell(進入shell)
ps|grep com.test.app.a(列出這個進程)

u0_a37    28155 164   909516 36900 ffffffff b75baa27 S com.test.app.a

cat /proc/28155/oom_adj(獲取這個進程的adj值)
adj值則在ProcessList中定義,adj的取值範圍[-17,16],取值越大說明優先級越低。adj取值說明參考這裏
dumpsys 查看內存,cpu,電量信息
1)查看所有內存信息
命令:dumpsys meminfo
2)查看某個包的內存信息
命令:dumpsys pkg_name
3)查看CPU使用情況、查看你的應用佔了多少CPU
命令:adb shell dumpsys cpuinfo

C:\Users\Administrator
λ adb shell dumpsys cpuinfo
Load: 6.48 / 5.54 / 5.02
CPU usage from 688557ms to 354472ms ago with 99% awake:
  16% 11015/com.tencent.mm: 12% user + 3.6% kernel / faults: 106584 minor 3083 major
  6% 1645/system_server: 3.2% user + 2.8% kernel / faults: 50408 minor 244 major
  2.5% 350/surfaceflinger: 1.1% user + 1.4% kernel / faults: 729 minor 16 major

4)如何查看android cpu是32位還是64位

adb shell getprop ro.product.cpu.abi

5)查看電量信息
命令:dumpsys battery
參考這裏:Android 通過adb shell命令查看內存,CPU,啓動時間,電量等信息

findstr 和grep過濾搜索
1)cmd下搜索包名爲com.linux.test的進程

adb shell ps|findstr /i "com.linux.test"

2)shell下面搜索
先使用adb shell進去,然後使用grep命令過濾

ps|grep "com.linux.test"

##查看最上層成activity名字

adb shell dumpsys activity | findstr "mFocusedActivity"

##棧頂Fragment:

adb shell dumpsys activity your.package.name

##查看最上層窗口信息

 adb shell dumpsys window windows | findstr  mCurrent

查看端口

顯示已連接的端口:netstat -ntup
顯示正監聽的端口:netstat -ntupl
查詢端口進程應關係cat /proc/net/tcp6

這裏寫圖片描述
這裏寫圖片描述

如果查詢14752端口被那個進程佔用?
(1)16進制39A0=10進制14752;
(2)39A0對應的進程ID(也叫uid)是10096
sl local_address remote_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000000000000000000000000000:39A0 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 10096 0 8887 1 00000000 100 0 0 2 -1
(3)使用ps命令
在android中,uid大於10000的是應用程序創建的用戶。
ps的第一列是uid,大於10000的uid會以u0_a開頭,10096 顯示爲u0_a96,最後一列就是進程名。
adb發送廣播

adb shell am broadcast -n com.lt.test/.MyBroadcast
adb shell am broadcast -a "MyBroadcastAction"

##通過 ADB Shell 獲取 Android ID
https://cherysunzhang.com/2017/04/getting-android-id-from-adb-shell/

adb shell settings get secure android_id

adb shell content query --uri content://settings/secure/android_id --projection value

清除數據和緩存

adb shell pm clear <PACKAGE>

屏幕截圖

adb shell /system/bin/screencap -p /sdcard/screenshot.png&adb pull /sdcard/screenshot.png D:\linux\sdk\test\screenshot.png&D:\linux\sdk\test\screenshot.png

屏幕錄製

**錄屏**
adb shell screenrecord /sdcard/test.mp4
#導出到電腦中(記得先在電腦建立一個文件)
adb spull  /sdcard/test.mp4 D:\linux\sdk\test\test.mp4

模擬點擊

#模擬滑動
向左滑動
adb shell input swipe 800 300 200 300
向右滑動
adb shell input swipe 200 300 800 300
向上滑動
adb shell input swipe 300 800 300 200
向下滑動
adb shell input swipe 300 200 300 800
#模擬點擊
adb shell input tap 250 250
#模擬點擊home鍵
adb shell input keyevent 3

更多參考
https://lavenderstream.github.io/2016/11/10/android-sendevent%E6%A8%A1%E6%8B%9F%E6%BB%91%E5%8A%A8%E7%82%B9%E5%87%BB%E4%BA%8B%E4%BB%B6/

查看anr日誌

adb shell cat data/anr/traces.txt >C:\Users\Administrator\Desktop\traces.txt

日誌一般開頭是這樣的

----- pid 9830 at 2019-03-27 21:08:08 -----
    Cmd line: com.tencent.mm

如果過濾你的應用日誌?Cmd line: com.tencent.mm(記得換成你的包名)

查看當前Activity是否銷燬

adb shell dumpsys activity>activity.txt

將當前的四大組件(Activity,Service,BroadCase,ContentProvider)的存在情況打印到當前目錄的activity.txt文件中。然後直接輸入activity.txt就可以打開這個文件了。當然用pwd命令可以打印當前目錄的路徑。

或者直接用下面的命令一步到位,導出到activity.txt文件,同時打開activity.txt文件(Windows系統)

adb shell dumpsys activity>activity.txt&activity.txt

查看過濾log
顯示所有優先級大於等於“warning”的日誌

adb logcat *:W

批量獲取包名、應用版本號

linux

adb shell  dumpsys package packages | grep -E 'Package \[|versionName'

windows

adb shell dumpsys package packages | findstr -E 'Package \[|versionName'

查看某一個應用的版本號 比如gms
adb shell pm dump com.google.android.gms | findstr “versionName” 

網絡控制

打開WiFi

adb shell svc wifi enable

關閉WiFi

adb shell svc wifi disable

打開移動網絡

adb shell svc data enable

關閉移動網絡

adb shell svc data disable

APP安裝位置

查詢三星相機安裝位置(com.sec.android.app.camera可以換爲你想找的app的包名)

adb shell pm list packages -f |findstr com.sec.android.app.camera
640?wx_fmt=gif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章