編輯:關於Android編程
The dumpsys tool runs on the device and provides information about the status of system services.
dumpsys這個工具可以查看當前設備系統服務信息。
如果你直接運行adb shell dumpsys的話,會得到所有系統服務的輸出,輸出結果比你想要的多得多。為了控制輸出內容,需要指定想要查看的服務。如:
$ adb shell dumpsys input
用下面的命令可以列出所支持查看的系統服務
$ adb shell dumpsys -l Currently running services: DockObserver SurfaceFlinger accessibility account activity alarm …
常用命令舉例:
?
?
不同服務可以跟不同的命令選項,以activity為例:
?
adb shell dumpsys activity
加上-h可以獲取幫助信息
獲取當前界面的activity詳情,可以用:
adb shell dumpsys activity top(控件都看得到)
對了,還有一種情況,就是當前界面是一個activity動態加載的fragment的話,這時候就算知道了activity也對應不上界面的內容,不過這時候還是可以用這個命令,去看輸出結果的Fragment關鍵字,排在最上面的就是當前界面對應的Fragment。
要獲取當前界面的Activity(結果顯示的是最頂層的activity,但activity可能不是當前界面上的最頂層,自行體會):
adb shell dumpsys activity top | findstr ACTIVITY這個其實就是把上面命令的結果過濾一下只顯示第一行
(findstr不可用的話用grep)
最近activity:
?
adb shell dumpsys power
可以獲取到是否處於鎖屏狀態:mWakefulness=Asleep或者mScreenOn=false
亮度值:mScreenBrightness=255
屏幕休眠時間:Screen off timeout: 60000 ms
屏幕分辨率:mDisplayWidth=1440,mDisplayHeight=2560
wake lock:Wake Locks:size =
?
GsmConnection是一個tag,在new wake_lock的時候自行定義,通過pid可以確定其所在的服務進程。
可以看網絡注冊狀態,數據鏈接狀態,是否漫游,信號強度,等等,參數我就不一一解毒了,跟android系統版本也有關系
adb shell dumpsys notification
查看是由哪個應用發出的通知。比如你用著手機的時候出來一個神煩的廣告,但是你卻不知道它是哪個應用彈出的,那去卸載哪個應用呢?
?
我們截圖輸出結果的一部分
NotificationRecord(0x01b93b62: pkg=com.tencent.mobileqq user=UserHandle{0} id=121 tag=null score=0 key=0|com.tencent.mobileqq|121|null|10125: Notification(pri=0 contentView=null vibrate=null sound=null tick defaults=0x0 flags=0x11 color=0x00000000 vis=PRIVATE)) uid=10125 userId=0 icon=Icon(typ=RESOURCE pkg=com.tencent.mobileqq id=0x7f0204bf) / com.tencent.mobileqq:drawable/name pri=0 score=0 key=0|com.tencent.mobileqq|121|null|10125 seen=true groupKey=0|com.tencent.mobileqq|121|null|10125 contentIntent=PendingIntent{bc254f3: PendingIntentRecord{e9265b0 com.tencent.mobileqq startActivity}} deleteIntent=PendingIntent{5711c29: PendingIntentRecord{873abae com.tencent.mobileqq broadcastIntent}} tickerText=Flour_Mo(MoKee Project):[挖鼻孔]
比較關鍵的是contentIntent和deleteIntent,這兩個類型都是PendingIntent。注意這裡能看到的是應用的包名,並不能看到點擊後會跳轉到哪個activity(大家代碼都會混淆的好嘛,想看也看不到吧)。
adb shell dumpsys SurfaceFlinger
?
用來查看當前界面上有幾個frame,分別的源是什麼。
adb shell dumpsys wifi
這個厲害了,可以看看他/她有沒有連過閨蜜/老王加的wifi!
?
最後一個亂碼,因為是中文wifi,不過後面也可以看到中文名
?
可以看到很多信息的,自己去發掘吧(密碼沒有,要看密碼去看系統文件吧)。
一般來說,處於視頻電話的時候,屏幕應該保持常亮的,這樣才能方便用戶查看視頻內容。
問題出現的時候根據以往的經驗,知道這很有可能是某個wake_lock沒有申請到,比較MO和MT的wake_lock看到:
adb shell sumpsys power
?
Mt端少了SCREEN_BRIGHT_WAKE_LOCK,而它在PowerManager.java中的定義正是:
?
直接搜關鍵字SCREEN_BRIGHT_WAKE_LOCK沒有在InCallUI,Telecomm,Telephony搜到相關的wake_lock類型,但是我們看到這個wake_lock和FLAG_KEEP_SCREEN_ON有聯系,多數應用都是用的這個flag,那麼我們再搜這個關鍵字的收,就在InCallUI中找到了出問題的地方,找到問題了就好改啦~
雙卡手機在設置了撥號前每次詢問的時候,會彈出一個dialog(當然也有廠家定制的在撥號盤上之間诶選擇),我們的入口是Dialer,而通話界面屬於InCallUI,那這個選擇SIM卡的dialog屬於誰?
用下面的命令可以查看
?
如果你覺得這個方法不是那麼有必要,那你應該還沒有遇見過沒title沒內容的dialog/斜眼笑
還有這個方法適合於大多數場景,但也有例外。比如這個頂層界面(不一定是dialog)上的東西不是從Activity中顯示出來的,(納尼哦?!居然有這種事?!)這時候可以嘗試用adb shell dumpsys SurfaceFlinger,這個命令可以查看界面是由哪些內容繪制的(想知道原理的可以去看SurfaceFlinger機制)
?
上圖的信息顯示,當前界面有狀態欄,導航欄,還有一個聯想的com.lenovo.ideafriend/com.lenovo.ideafriend.alias.DialtactsActivity,那狀態欄和導航欄都很好認,界面上剩下的就是那個DialtactsActivity了。
感謝閱讀。
在android應用開發過程中,固定的一些控件和屬性可能滿足不了開發的需求,所以在一些特殊情況下,我們需要自定義控件與屬性。 一、實現步驟 1. 繼承
掃描本地文件加載到item不限於應用到音樂播放器,其他Android工程,也可以使用SdcardSearchToList其他Android工程也可以使用,我現在做了很小的
作為Android開發者,工作中少不了要反編譯別人的apk,當然主要目的還是為了學習到更多,取彼之長,補己之短。今天就來總結一下Android反編譯和二次打包的一些知識。
Android 多媒體應用的主要業務 Music Player Video Player Camera Sound Recorder VideoCamera