編輯:關於Android編程
1.2 system_process不是進程的名稱,它是DDM用於區別不同的Java App的標識,對於一般Android程序來說會被設置成包名
1.3 system_process的進程名稱是system_server,就是我們通過ps可以看到的
1.4 system_server進程是zygote進程孵化的第一個Java進程
1.5 zygote進程的程序名稱叫app_process。
它的代碼在frameworks\base\cmds\app_process\app_main.cpp
在init.rc中可以看到它是怎樣啟動起來的:
startSystemServer中:
2 接下來我們來看看怎麼去調試這個Android裡Java層的最重要的進程,一般調試和開機調試
3 一般調試:
3.1 這種調試方法就是在Android啟動完後,用adb連接Android,再調試system_process進程,實現起來是比較簡單的,
3.2 無非就是在eclipse裡創建一個名叫system_process的Android程序,然後在DDMS裡選擇system_process即可開始調試。
4 開機調試
4.1 有時我們需要調試一下system_process的初始化過程,因為上面的方法是在system_process已經初始化完之後開始調試的,用上面的方法是無能為力的,這就得另想辦法。
4.2 搜索了下網絡,沒有找到比較實用的資源,於是自己研究了下。
4.3 其實也不是很麻煩:
找到SystemServer.java裡的main函數,在函數的最開始加上幾行代碼:
首先通過判斷/system/debug是否存在來判斷是否要等待調試器連接
android.os.Debug.waitForDebugger()就是等待調試器來連接,在調試器連接上之前代碼不會往下執行
但是第一行代碼就比較費解了,先來解析下什麼叫ddm,ddm就是Dalvik Debug Monitor的縮寫
android.ddm.DdmHandleAppName.setAppName就是要設置Java App在ddm裡的名稱。
如果不設置的話,你在DDMS裡看到的Name一欄就會有一個“?”,這個時候,eclipse找不到對應的工程,所以就沒法調試了。
所以這一行代碼很重要
4.5 接下來就是重新編譯代碼並燒錄了,這個看自己使用的是什麼平台。
4.6 呵呵,是不是可以開機後用adb連接,再通過eclipse調試了?
5 這種方式的唯一缺陷就是要修改源代碼,這個留著以後再研究,現在要做的是好好享受一下這種調試方法。
我們有一個TextView,其裡面的內容是可以通過代碼動態改變的,我們想用一張圖片作為TextView的背景,實現類似於手機QQ對話中的氣泡文本效果。TextView定義
ViewStub可以在運行時動態的添加布局。幫助文檔給定的定義是:A ViewStub is an invisible, zero-sized View that can
本節引言: 最近一段時間因為工作上的事以及面試等等,耽誤了博客的更新,這裡道歉下~ 今天下午去追夢網絡面試了一趟,全齊大神給小弟我上了一課,增長了
main.xml代碼如下: .java代碼如下: package org.lxh.demo; import androi