OpenGrok簡單使用說明
OpenGrok一個快速、便於使用的原始碼搜尋與對照引擎。它幫助你搜尋,對照,定位你的原始碼樹。它能夠明白各種程式檔案格式和版本控制歷史記錄。藉助 Eclipse 以及本地原始碼可以比較方便地分析 Android 原始碼,但是對於 Native 程式碼的呼叫就無法通過 Eclipse 的快速定位來檢視相應的 Native 原始碼了,而且 Android 原始碼中對 Native庫的載入一般不是通過在 Static 塊裡呼叫 System.loadLibrary 來載入庫檔案並完成 Native 函式註冊的,所以定位這類程式碼比較困難。一個可以採取的方法是使用 UltraEdit 等工具來在檔案中搜尋特定的字串,如函式名,對於 JNI 函式來說,一般存在於/frameworks/base/core/jni目錄下。在檔案數目較多的情況下,使用這種方法搜尋起來還是比較忙的,所以這裡介紹下AndroidXRef。
AndroidXRef(http://androidxref.com/)專案提供 Android 原始碼的交叉索引,可以快速的搜尋符合特定條件的 Android 原始碼,後臺是基於 OpenGrok 引擎,OpenGrok 主要用來在原始碼中搜尋、交叉索引以及進行導航。AndroidXRef 提供了完整的 Android 原始碼的索引,包括核心原始碼。在 AndroidXRef 主頁的右側顯示了可用的原始碼版本,如圖 1 所示,點選相應的原始碼版本連結就可以進入對應的原始碼分支,如圖 2 所示。
圖1
圖2
圖 2 右側提供在特定目錄下搜尋,例如在分析 Framework 時,可以選擇 frameworks 目錄,這樣可以減少搜尋範圍,能夠更加精確地定位到需要的原始碼。左側則是提供了一些搜尋的條件,其意義如下(在指定的 Project(s)下):
Full Search: 進行全文搜尋,會匹配所有的單詞、字串、識別符號以及數字等,例如在frameworks 下通過 Full Search 搜尋”activity”,則會顯示所有包含 activity 字元(忽略大小寫)的結果,即使是註釋也會顯示出來,如圖 3 所示。點選綠色背景的連結會開啟包含activity 字串檔案所在的資料夾;點選左側檔名如 native_activity.cpp 連結會開啟包含activity 字串檔案;點選右側每一行的搜尋結果連結同樣會開啟相應的檔案內容;
圖3 Full Search 搜尋
•Definition:搜尋符號定義相關的程式碼,例如搜尋 startActivityIfNeeded 函式的定義,顯示結果如圖 4 所示從搜尋結果可以看到,右側綠色字型表明瞭是位於 Activity 類中的 方法;
圖 4 Definition 搜尋
Symbol:搜尋符號,例如可以搜尋類中的成員變數等,圖 5 顯示了通過 Symbol 搜尋WINDOW_HIERARCHY_TAG 的結果;
圖 5 Symbol 搜尋
•File Path:搜尋原始碼檔名中包含給定字串的檔案,例如想要搜尋檔名包含 Activity
的原始碼檔案,則可以在 File Path 中填入 Activity 進行搜尋,結果如所示;
圖 6 File Path 搜尋
當然可以通過組合的方式使用上述提到的搜尋方法,例如想在 Activity.java 檔案中搜尋finish 函式的定義,則可以在 Definition 中填入”finish”,在 File Path 中填入”Activity.java”,搜尋
結果如圖 7 所示。
圖 7 組合搜尋
因為 AndroidXRef 使用的是 OpenGrok 引擎,因此還支援一些其他的搜尋方式:
•+ 表示包含此字串,- 表示包含此字串。例如在 Full Search 中搜尋包含 activity字串但是不包含 service 字串的原始檔,可以填入+”activity” -“service”(去掉雙引號同樣可以,但是對於不可分割的詞且兩者間包含空格則雙引號不可去,此規則適用於所有的搜尋規則,例如 Full Search “final String”,雙引號去除表示或的關係,這個與 Google 的搜尋規則是一樣的);
•布林操作,可以使用 AND(&&),”+”,OR(||),NOT(!)以及”-”(AND 等必須全部大寫),例如搜尋既包含 final 又包含 String 的原始碼檔案,可以 Full Search 中填入”final” AND “String”;
•使用萬用字元,”?”代表一個字元,”*”代表多個字元(“?”和”*”不可用於字串的開頭);
•模糊查詢,可以使用”~”搜尋包含與提供的字串拼寫類似的原始碼檔案等內容;
•轉義字元,OpenGrok 中使用到的特殊字元包括+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ ,因此如果需要搜尋的內容中包含這些特殊字元,可以使用\進行轉義,例如搜尋(1+1):2,可以這樣1\+11\+1\:2
相關文章
- jarsigner 簡單使用說明JAR
- eachdemo/rbac 的簡單說明
- 過等保流程簡單說明
- GoldenGate BR(bounded Recovery)簡單說明Go
- 正規表示式單行、多行模式簡介(使用說明)模式
- 【MEMORY】Oracle 共享池堆簡單說明Oracle
- 使用說明
- TCP 協議簡單說明【PHP 碼農的現身說法】TCP協議PHP
- 使用OpenGrok閱讀原始碼原始碼
- 超簡單的整合表示式樹查詢元件,Sy.ExpressionBuilder 使用說明元件ExpressUI
- cursor: pin S簡單說明以及測試、解決
- cmake使用說明
- certbot 使用說明
- FreeSql 使用說明SQL
- postman 使用說明Postman
- QLExpress使用說明Express
- WebApiClientCore使用說明WebAPIclient
- ApplicationContextAware使用說明APPContext
- Jupiter 使用說明
- CentOS 7升級核心簡明說明CentOS
- 【LVS】簡介與說明
- lwl-resume 個人簡歷編輯使用說明
- Flutter外掛之webview_flutter簡要使用說明FlutterWebView
- oracle orapwd使用說明Oracle
- markdown使用小說明
- oradebug的使用說明
- axios使用說明書iOS
- JPA EntityManager使用說明
- wc 命令使用說明
- git簡單明瞭Git
- 【混合雲小知識】混合雲四種形式簡單說明
- 落實等級保護工作的意義簡單說明
- 【PG體系結構】PG體系結構簡單說明
- jquery datatables各引數詳細說明及簡單應用jQuery
- 簡單說說Restful APIRESTAPI
- Linux OpenGrok搭建Linux
- 簡單的效能測試說明為什麼Go比Java快?GoJava
- cityAreaSelect.js使用說明JS