OpenGrok簡單使用說明

very_on發表於2018-04-11
 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

相關文章