標籤:android c style class blog java
原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038 調試Android Java源碼
草帽的後花園——Neo
寫在之前的話:這裡主要是以調試Java源碼為主,應該說是在system_process之後的源碼,這對於調試和修改frameworks層的人來說真是一個利器,但至於為什麼在system_process之後,我還在分析,如果有結果我會更新此文章,並正在嘗試調試C++的代碼,就是native中的代碼,如果這個可行那將會大大的減少我們這些以修改源碼為主的工作人員就輕鬆多了,目前還未開始,如果可行我會儘快發布,方法並非原創,僅僅是我成功測試了,所以分享。轉載請註明來源,謝謝。(經過測試,如果系統編譯成user版本的似乎不能調試)
1. 配置SDK開發環境
這個關於配置開發環境我就不多說了,由於工作時間原因,我會在後面加入關於windows下和linux下的開發環境配置的教程。這裡的工作環境是windows xp,Eclipse 4.2,
SDK情況如:
2. 匯入Android源碼
我這裡使用的代碼是Android 4.1.2(主要是目前我公司暫時在開發4.1.2的平板),我就以4.1.2的源碼為主,模擬器示範,真機就不示範了,原理是一樣的。在這裡,首先要確保一件事情就是你的源碼要能編譯通過才行,編譯源碼的教程網上有很多,後面我也會再做一份自己理解的教程。
2.1. 啟動Eclipse
這個就不詳述了,免得羅嗦,直接點表徵圖。啟動後:
2.2. 建立Java工程
點擊左上方的FileàNewàJavaProject,建立一個Java的工程。首先說明下,My Code之前就可以編譯通過,根目錄路徑為:U:\neo\android_4.1.2\4.1.2。
然後會進入下面的這個介面
2.3. 選擇匯入的源碼
在匯入之前我們需要做一個事情,就是減少源碼匯入的量過大,我們可以把源碼中的一個檔案拷貝到源碼根目錄下,該檔案的路徑是:(U:\neo\android_4.1.2\4.1.2\development\ide\eclipse\.classpath),看不到的話就把所有隱藏的檔案顯示出來,:
複製過去:
現在我們需要選擇要匯入的源碼,location處為我們所要匯入的源碼路徑(這裡注意是根目錄哦,源碼根目錄~~),輸入project name:Android4.1.2,去掉Use defaultlocation的勾,結果:
然後點next,就會匯入了,匯入大概需要十幾分鐘吧,等待等待,呵呵。
匯入完畢之後的圖:
Finish之後就OK了。
工程代碼:
3. 設定串連的連接埠
其實就是通過遠程來調試,設定一個socket的連接埠,操作過程
進入debugConfigurations時雙擊Remote Java Application建立一個遠端偵錯並將連接埠號碼改為8600(這裡需要做的是輸入你要調試的進程的連接埠號碼,這裡我附上一張後面的圖,以便解釋,每個進程啟動後都有一個連接埠號碼,,若要針對調試就需要設定好連接埠號碼才會進入,後面的圖,例如要調settings,那麼就把連接埠號碼設定為8604),且common欄中的debug打鉤。
點擊Apply即可。
4. 啟動真機或者模擬器
串連真機或者模擬器,我只串連模擬器了,真機也已經測試,是可行的。
首先要建立一個模擬器(平板的模擬器),步驟:
在window->AVDManager中,選擇建立
填滿內容,這裡要注意:Resolution設定為1280x800的,下面的AbstractedLCD density要設定成160,這樣才顯示的是平板。
點Create AVD即可。啟動剛才建立的模擬器。
模擬器已經在啟動
5. 設定斷點
模擬器啟動比較慢,我們先設定好斷點,根據啟動流程(這個需要自己理解下了),我在所有服務啟動之前加入了斷點,斷點設定在frameworks/base/services/java/com/android/server/SystemServer.java的第775行,即在run()啟動的第一句話,後面的代碼都是為了啟動各種服務。
設定好斷點後,開始串連模擬器。
6. 開始調試
接下來就是進行調試了,啟動過程中我們在DDMS中可以看到,裝置剛開始是offline的,等裝置處於online狀態時,我們啟動剛才設定好的debug。
點了debug後,這時會看到有只小蟲子粘在了system_process進程上,這說明已經可以調試了。
稍等會就會進入到我們剛才設定的斷點處了。
效果就是這樣,調試的步驟這個就不多說了,也可以在這裡查看變數的值,以及修改記憶體中的值,以便調試。(其實說實話解釋型的語言更好調試,編譯型的好不爽,好歹還能修改下記憶體的值)。
調試過程就是如此了,這裡只做了一個小小的示範,相信多的不用再說了,做為IT新手的我不可能寫的太詳細,如有疏漏請見諒。其實通過這個還看觀察到系統的部分啟動過程,可以調launcher、Setting等frameworks下面的東東,如果大家有好方法請互相共用,謝謝。