兩分鐘定位到UI相關問題代碼塊

應用場景

    作爲一名Android開發者,肯定有不少如下的經歷:
    1 新接手一個項目,需要熟悉某一個頁面的實現代碼,但不知道從哪裏開始;
    2 用戶點擊某一個控件時候app運行異常,修復bug時候發現對這部分代碼不熟,無法快速切入。
    這些問題有一個共性,那就是跟用戶界面UI關聯比較密切。如何能夠快速知道這個頁面是哪一個activity或者fragment,如何快速找到這些UI操作背後的邏輯代碼所在位置?本文就這種問題跟大家進行探討。如有好的方法或者點子,歡迎在評論區流。

UI代碼塊定位

一 快速定位到控件ID

    工具:Android Studio 3.0以上版本
    步驟一: USB連接手機;
    步驟二: 打開需要定位的頁面;
    步驟三: Android Studio -》Tools-》Layout Inspector;


    步驟四: 選擇進程,進程名就是你的應用名稱 ,可以去AndroidManifest查看;

    步驟五: 選擇Window如果不知道選哪個可以用ADB命令(adb shell "dumpsys activity | grep mFocusedActivity")看下當前Activity是哪一個,一般我們選最下面的(棧頂Activity)。

    步驟六: 查找控件Id,點擊右側控件,便可以在左側看到該控件對應的Resource Id和相關屬性;

    步驟七: 根據ResourceId 全局搜索(Android 默認搜索ctrl+shift+R)

    步驟八: 我們找到了兩個地方用到該ID
1佈局XML中用的 ,2 java代碼中調用;點進去便可以看到修改密碼的邏輯。

二 快速定位當前Fragment

    工具:ADB工具
    步驟一: USB連接手機;
    步驟二: 打開需要定位的頁面;
    步驟三: ADB命令行輸入:adb shell dumpsys activity top or adb shell dumpsys activity 你應用的包名。例如:adb shell dumpsys activity com.ecology.view
    步驟四: 我們把打出來的信息Copy出來到文本編輯器比如(Notepad++)搜索關鍵字 Added Fragments、便得到了該Activity相關的Fragment信息、再根據當前序列號,很容易知道當前是哪個Fragment。

其他方案

搜索字符串快速定位方法

工具:Android Studio
一般每個UI控件都有字符串,比如上面的“修改密碼”Button
    步驟一: 全局搜這個字符串“修改密碼”、查找到它的資源ID;
    步驟二: 然後逐個查看調用這個字符串和它的資源Id的位置、並判斷是否是我們當前的頁面。
    步驟三:反覆通過全局搜+findUsage最終找到界面代碼塊位置。
這種方法也是一種很通用的方法,但是有時間會遇到調用地方過多、不好判斷。

特殊log定位

工具 Android studio
在開發過程中發現了、很多應用集成了Bugly,該三方庫會打出Activity生命週期。在Android Studio logcat中用關鍵字“CrashReport”過濾log,當我們操作連接好的手機時候便可以看到集成了bugly應用的一些log,從下面log可以看到我們每個操作頁面對應的Activity的生命週期。


關於定位問題的設想

    接上面我們一旦定位到是哪一個代碼塊運行,便可以打斷點,利用Debuger一步步去逼近錯誤代碼,也可以通過打log和trace去逼近錯誤代碼。Trace Log 類似這種:Log.d(TAG, "onCreate"+Log.getStackTraceString(new Throwable()))。
    關於未來:是否有一種無需斷點,當我們開啓調試時候直接操作頁面就可以看到哪裏的代碼在運行,從上面看把定位代碼塊+斷點調試結合起來便可以實現,哪位大神能提供一些實現思路?歡迎各位在評論區提供思路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章