看完了這篇文章鹃觉,就進(jìn)入 Android 的內(nèi)部了
adb shell 命令
shell 命令的指的是:進(jìn)入到設(shè)備內(nèi),然后執(zhí)行的命令鳞尔;
用大白話講嬉橙,就是“給手機(jī)下達(dá)指令”。
怎么進(jìn)入寥假?
adb shell
>>
這樣就進(jìn)入了市框,然后就可以給他下達(dá)指令了。
好了昧旨,回顧一下拾给,上一節(jié),我們使用了
adb shell dumpsys
命令獲得了 手機(jī)上安裝的應(yīng)用
的一些信息
這里面用到了 shell
兔沃,只不過,他是在“電腦端” “傳遞命令”進(jìn)入“手機(jī)”级及,然后獲取到的信息乒疏;
現(xiàn)在我們直接“進(jìn)入設(shè)備”,然后“下達(dá)指令”饮焦。
當(dāng)然怕吴,這里的前提是你的設(shè)備最好是 “root” 之后的,否則一些命令就會(huì)出現(xiàn) “permission denied” 的問題
進(jìn)入正題
1县踢、dumpsys
命令
這個(gè)命令等同于上節(jié)提到的對(duì)應(yīng)的命令转绷,功能是等效的,所以這里不再贅述硼啤。
2议经、run-as
在手機(jī)中查看指定 包名的 應(yīng)用的數(shù)據(jù),適用于 非 root 的手機(jī)。
但是這里注意一下煞肾,不能用于查看“上架到應(yīng)用市場(chǎng)的app”咧织。
為什么呢?
因?yàn)檫@些 app 是正式版本的籍救,不是 debug 版本的习绢,如果你執(zhí)意操作的話:
比如像通過這個(gè)命令查看「瑞幸」的app數(shù)據(jù),
執(zhí)行
run-as com.lucky.luckyclient
他會(huì)報(bào)錯(cuò)錯(cuò)誤
如下圖所示:
爆出了:
run-as:package not debuggable:com.lucky.luckyclient
的問題蝙昙。
所以需要注意的是:
利用 run-as 能查看的是屬于你自己開發(fā)的 app 闪萄,并且安裝到 android 手機(jī)上面的應(yīng)用是 debug 版本的應(yīng)用才可以。
3奇颠、ps
哈哈哈桃煎,不是 photoshop
他是:查看設(shè)備的進(jìn)程信息,或者查看指定進(jìn)程的線程信息大刊。
使用方法:
直接使用 ps
查看所有進(jìn)程
如圖
這樣为迈,就拿到了所有進(jìn)程的信息
查看進(jìn)程信息,可以通過 |grep 去過濾信息缺菌。
ps |grep 過濾內(nèi)容
從上面的圖片我們看到葫辐,terminal
列出了系統(tǒng)、應(yīng)用的一些進(jìn)程信息伴郁,我們可以找一個(gè)單獨(dú)看耿战,那么就可以使用 |grep
去過濾這些內(nèi)容了。
ps |grep smpboot_th
得到下面的結(jié)果:
這樣做的好處是,看的更加清晰了焊傅。
查看指定進(jìn)程
下的線程信息
使用方法
ps -t 進(jìn)程id
從第一種方法中剂陡,看到了 smpboot_th
的其中一個(gè)進(jìn)程 id 是 3
。
如圖
的進(jìn)程id狐胎,下面我們直接拿
使用
ps -t 3
獲取 pid 為 3 的 線程信息鸭栖。
看下結(jié)果:
4、pm clear
清除指定包名應(yīng)用的數(shù)據(jù)
用法
pm clear 包名
pm.clear io.moreless.tide
清空「潮汐」的數(shù)據(jù)
如果當(dāng)前正在開啟這這個(gè)應(yīng)用握巢,那么一執(zhí)行這個(gè)命令晕鹊,就會(huì)關(guān)閉,并且清空所有數(shù)據(jù)
再次打開「潮汐」時(shí)暴浦,就像安裝新的應(yīng)用一樣溅话。
5、pm install
安裝 apk 文件
等同于 在電腦下使用的 adb install apk文件
使用方法:
pm install apk在手機(jī)的路徑
前提是歌焦,你手機(jī)上有這個(gè)包飞几,所以這個(gè)命令并不實(shí)用。
這里就不再演示了独撇。
6屑墨、pm uninstall
卸載指定包名的應(yīng)用
用法:
pm uninstall 包名
pm uninstall com.lucky.luckyclient
等同于電腦端使用的
adb uninstall com.lucky.luckyclient
這樣就卸載掉了手機(jī)上安裝的「瑞幸」的包了躁锁。
這里不再演示了。
7绪钥、am start
啟動(dòng)一個(gè)應(yīng)用
下面這個(gè)方法十分實(shí)用灿里,可以直接定位到頁面
用法:打開app
am start -n 包名/activity名稱 打開指定頁面
甚至,你還可以 “以debug模式打開”程腹,只需要在命令中添加 -D 即可
非常實(shí)用啦匣吊。
好,我們來看一下 潮汐的包名和其中的一個(gè)頁面的路徑
使用
dumpsys package io.moreless.tide
查看 「潮汐」的“清單文件”:
“紅線部分” 是輸入的命令寸潦,“淺藍(lán)色部分” 是稍后我們要跳轉(zhuǎn)的界面色鸳。
好,我們先跳轉(zhuǎn)到
io.moreless.tide/.play.PlayActivity
這個(gè)界面见转,看他的單詞意思應(yīng)該是“播放界面”命雀,如下圖:
執(zhí)行的命令是:
am start -n io.moreless.tide/io.moreless.tide.play.PlayActivity
先將手機(jī)上開啟的 「潮汐」的 app 關(guān)閉,然后通過上面的命令打開
8斩箫、am startservice
開啟一個(gè)服務(wù)
用法
am startservice -n 包名/服務(wù)名
在我們演示之前吏砂,先看看「潮汐」有哪些服務(wù)吧!
使用命令
dumpsys activity services |grep moreless
我們得到這樣的結(jié)果乘客。
紅色框框 是我們執(zhí)行的命令
淺藍(lán)色框框 是我們得到的一些 service 的結(jié)果
看看前綴發(fā)現(xiàn)「潮汐」里面不是「友盟」的服務(wù)狐血,就是「淘寶」的服務(wù)。
那么我們來演示一下易核,使用 am startservice -n 開啟一個(gè)服務(wù)看看是什么情況吧
am startservice -n io.moreless.tide/com.umeng.message.UmengIntentService
出現(xiàn)了錯(cuò)誤
那我們把 「潮汐」打開看看呢
這里結(jié)合了上面打開 activity 的命令
這樣就不報(bào)錯(cuò)了匈织,但是因?yàn)檫@個(gè) service 的功能不會(huì)顯示到界面上,所以這里手機(jī)屏幕的內(nèi)容沒有變化牡直。
9缀匕、am broadcast
發(fā)送一個(gè)廣播,這個(gè)命令就很實(shí)用了碰逸,比如我們對(duì)系統(tǒng)廣播做了處理乡小,對(duì)廣播做出的相應(yīng)的反應(yīng),就可以使用這個(gè)命令去模擬真實(shí)的廣播接收
使用方法
am broadcast -a 廣播 action
比如:
發(fā)送一個(gè)“電量低廣播”
am broadcast -a Intent.ACTION_BATTERY_LOW
再比如:
發(fā)一個(gè) “網(wǎng)絡(luò)狀態(tài)變化的廣播”
am broadcast -a android.net.conn.CONNECTIVITY_CHANGE
看下命令執(zhí)行情況
發(fā)現(xiàn) “ 電量的廣播 ” 可以發(fā)送花竞,但是 “ 網(wǎng)絡(luò)變化的廣播 ”的需要權(quán)限
再試一下 “ 鎖屏廣播 ”
看到了劲件,還是需要權(quán)限。
現(xiàn)在看來约急,真機(jī)的話必須root , 有必要使用虛擬機(jī)了!
- 通過 Android Studio 開啟一個(gè)虛擬機(jī)
- 打開 terminal
-
adb root
將虛擬機(jī) root -
adb shell
進(jìn)入虛擬機(jī)
使用 root 之后的虛擬機(jī)再執(zhí)行以下上面兩個(gè)命令
看看如何苗分?
我們可以看到厌蔽,廣播發(fā)送成功,但是手機(jī)并沒有做出反應(yīng)摔癣,不過這不重要奴饮,因?yàn)槲覀円獪y(cè)試的是自己應(yīng)用內(nèi)對(duì)特定的廣播的處理纬向。
不過,我發(fā)現(xiàn)發(fā)送 “ 鎖屏通知戴卜,虛擬機(jī)會(huì)有反應(yīng) ”
請(qǐng)看
ps:剛開始我把手機(jī)界面切到了應(yīng)用菜單頁面逾条,收到通知后,手機(jī)界面回到了桌面投剥。
10师脂、netstat
查看手機(jī)端口號(hào)信息
如圖
通過此命令可以查看手機(jī)完整的網(wǎng)絡(luò)狀態(tài)
11、dalvikvm
運(yùn)行一個(gè)dex 文件
我們都知道江锨,android 應(yīng)用吃警,是把 class 文件打包成為 dex 文件,然后交給 dalvik 虛擬機(jī)運(yùn)行的
所以啄育,可以直接通過命令來跑 dex 文件
使用方法
dalvikvm -cp dex文件 運(yùn)行主類
我把 「潮汐」的 apk 文件進(jìn)行了解壓酌心,得到這樣的文件夾
我們看到,里面有 classes.dex 文件挑豌,還有 classex2.dex 文件
那么我們來跑一下 classes.dex 文件看看會(huì)怎么樣
首先安券,把這個(gè)文件放到手機(jī)里面去:
- 退出 shell 模式
adb push dex文件 /sdcard/
具體操作如圖
這樣就把「潮汐」的 dex 文件放到了手機(jī)里面了。
然后氓英,再進(jìn)入 shell 模式侯勉,運(yùn)行這個(gè) dex 文件
adb shell
dalvikvm -cp /sdcard/classes.dex 運(yùn)行主類
不過,到這里债蓝,我們就不能往下進(jìn)行了壳鹤,原因是找不到 「潮汐」的主類,即使是知道了它的啟動(dòng) activity饰迹,但是因?yàn)榛煜仍蚍际模黝悷o法定位。
所以啊鸭,這里就留一個(gè)小小的遺憾吧
12锹淌、top
查看當(dāng)前應(yīng)用 cpu 的消耗情況
單獨(dú)執(zhí)行
top
會(huì)輸出默認(rèn)查詢結(jié)果
當(dāng)然,我們可以使用一些字符限制一下
使用方法
top -n -d -s -t
-n 表示刷新次數(shù)
-d 刷新間隔時(shí)間(默認(rèn)為5s)
-s 按照哪列排序
-t 顯示線程信息不顯示進(jìn)程信息
這些 命令挑選你需要的即可赠制,不用全部輸入
我們執(zhí)行以下這個(gè)命令看一下
top -d 4 -n 2
間隔 4s 刷新一次赂摆,共刷兩次
看看情況 :
只間隔 4s 刷兩次,然后就停止了
13钟些、getprop
獲得設(shè)備信息
使用方法
getprop
查看設(shè)備的所有屬性
如圖烟号,我們看到了 debug 、gsm政恍、dalvik 汪拥、hwservicemanager 等信息
我們?cè)儆?br>
getprop 屬性名
這個(gè)方法查看具體的屬性信息,比如我們看一下hwservicemanager.ready
getprop hwservicemanager.ready
查看一下
總結(jié)一下
shell 內(nèi)部命令對(duì) “更深一步進(jìn)入 Android” 有很大的幫助篙耗,如果有的同學(xué)感興趣迫筑,不妨多花點(diǎn)時(shí)間熟悉一下這些命令宪赶,shell 命令 和前兩章提到的命令經(jīng)常會(huì)一起用,所以大家還是多多聯(lián)系吧脯燃!加油B蕖!辕棚!