您好,登錄后才能下訂單哦!
億速云服務器與全球多個國家頂級機房直接合作,提供包括香港、美國、日本等國家和地區的服務器,需要的請聯系億速云官方客服! 優質的服務器租用!
今天我要分享的是Framework的學習和調試的方法。
首先,Android是一種基于Linux的開放源代碼軟件棧,為廣泛的設備和機型而創建。下圖是Android平臺的主要組件。
從圖中你可以看到主要有以下幾部分組成:
 
  在各個應用市場看到的,大多是第三方應用,也就是安裝在data區域的應用,它們可以卸載,并且權限也受到一些限制,比如不能直接設置時間日期,需要調用到系統應用設置里面再進行操作。
 
  在應用開發過程中使用的四大組件,便是在Framework框架層進行實現,應用通過約定俗成的規則,在AndroidMainfest.xml中進行配置,然后繼承對應的基類進行復寫。系統在啟動過程中解析AndroidMainfest.xml,將應用的信息存儲下來,隨后根據用戶的操作,或者系統的廣播觸發,啟動對應的應用。
 
framwork 到底又那些東西?
  Framework框架層是應用開發過程中,調用的系統方法的內部實現,比如我們使用的TextView、Button控件,都是在這里實現的。再舉幾個例子,我們調用ActivityManager的getRunningAppProcesses方法查看當前運行的進程列表,還有我們使用NotificationManager的notify發送一個系統通知。
代碼 | 源碼目錄 | 編譯目錄 |
---|---|---|
系統的相關Widget | frameworks/base/core/java/android, frameworks/base/core/java/android/view | /system/framework/framework.jar |
系統中的AMS/PMS | frameworks/base/services/core/java/com/android/server | /system/framework/services.jar |
系統中內置的資源文件,比如Button的背景圖、屬性值之類 | frameworks/base/core/res | /system/framework/framework-res.apk |
在系統開發中還會涉及到服務的對應本地實現部分,比如 | frameworks/base/core/jni, frameworks/base/services/core/jni | 視情況 |
 
如何快速地學習、梳理Framework知識體系呢?常見的學習方法有下面幾種:
 
  首先可以通過購買相關的書籍進行學習,其中主要的知識體系有Linux操作系統,比如進程、線程、進程間通信、虛擬內存,建立起自己的軟件架構。在此基礎上學習Android的啟動過程、服務進程SystemServer的創建、各個服務線程(AMS/PMS等)的創建過程,以及Launcher的啟動過程。熟悉了這些之后,你還要了解ART虛擬機的主要工作原理,以及init和Zygote的主要工作原理。之后隨著在工作和實踐過程中你會發現,Framework主要是圍繞應用啟動、顯示、廣播消息、按鍵傳遞、添加服務等開展,這些代碼的實現主要使用的是Java和C++這兩種語言。
 
  通過書籍或者網絡資料學習一段時間后,你會發現很多問題都沒有現成的解決方案,而此時就需要我們深入源碼中進行挖掘和學習。但是除了閱讀官方文檔外,別忘了調試Framework也是一把利刃,可以讓你游刃有余快速定位和分析源碼。
 
  下面我們來看看調試Framework的Java部分:
 
  這里使用 Android Studio 進行調試,在調試前我們要先掌握一些知識。Java代碼的調試,主要依據兩個因素,一個是你要調試的進程;一個是調試的類對應的包名路徑,同時還要保證你所運行的手機環境和你要調試的代碼是匹配的。只要這兩個信息匹配,編譯不通過也是可以進行調試的。
我們調試的系統服務是在SystemServer進程中,可以使用下面的命令驗證
ps -A | grep system_server 查看系統服務進程pid
cat /proc/pid/maps |grep services 通過cat查看此進程的內存映射,看看是否services映射到內存里面。
 
這里我們看到信息:/system/framework/oat/x86/services.odex 。odex是Android系統對于dex的進一步優化,目的是為了提升執行效率。從這個信息便可以確定,我們的services.jar確實是跑到這里了,也就是我們的系統服務相關聯的代碼,可以通過調試SystemServer進程進行跟蹤。
 
下來我們來建立調試環境。
這時候我們點擊Genymotion模擬器中桌面的一個圖標,啟動新的界面。會發現這時候我們設定的斷點已經生效。
你可以看到斷下來的堆棧信息,以及一些變量值,然后我們可以一步步調試下去,跟蹤啟動的流程。
 
  對于學習系統服務線程來講,通過調試可以快速掌握流程,再結合閱讀源碼,便可以快速學習,掌握系統框架的整個邏輯,從而節省學習的時間成本。
 
  以上我們驗證了系統服務AMS服務代碼的調試,其他服務調試方法也是一樣,具體的線程信息,可以使用下面的命令查看。
ps -T 353
這里353是使用ps -A |grep system_server查出 SystemServer的進程號
億速云的服務器不僅具有高穩定性,高速訪問,而且易于管理,安全和輕松使用,以減少用戶在服務器維護中的能量和時間成本,并專注于自己的業務的開發和推廣。億速云服務器,致力于為用戶提供性價比最高的服務器!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。