創(chuàng)新互聯(lián)服務(wù)器與全球多個(gè)國家頂級(jí)機(jī)房直接合作,提供包括香港、美國、日本等國家和地區(qū)的服務(wù)器,需要的請(qǐng)聯(lián)系創(chuàng)新互聯(lián)官方客服! 優(yōu)質(zhì)的服務(wù)器租用!
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、城中網(wǎng)絡(luò)推廣、小程序開發(fā)、城中網(wǎng)絡(luò)營銷、城中企業(yè)策劃、城中品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供城中建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com今天我要分享的是Framework的學(xué)習(xí)和調(diào)試的方法。
首先,Android是一種基于Linux的開放源代碼軟件棧,為廣泛的設(shè)備和機(jī)型而創(chuàng)建。下圖是Android平臺(tái)的主要組件。
從圖中你可以看到主要有以下幾部分組成:
在各個(gè)應(yīng)用市場(chǎng)看到的,大多是第三方應(yīng)用,也就是安裝在data區(qū)域的應(yīng)用,它們可以卸載,并且權(quán)限也受到一些限制,比如不能直接設(shè)置時(shí)間日期,需要調(diào)用到系統(tǒng)應(yīng)用設(shè)置里面再進(jìn)行操作。
在應(yīng)用開發(fā)過程中使用的四大組件,便是在Framework框架層進(jìn)行實(shí)現(xiàn),應(yīng)用通過約定俗成的規(guī)則,在AndroidMainfest.xml中進(jìn)行配置,然后繼承對(duì)應(yīng)的基類進(jìn)行復(fù)寫。系統(tǒng)在啟動(dòng)過程中解析AndroidMainfest.xml,將應(yīng)用的信息存儲(chǔ)下來,隨后根據(jù)用戶的操作,或者系統(tǒng)的廣播觸發(fā),啟動(dòng)對(duì)應(yīng)的應(yīng)用。
framwork 到底又那些東西?
Framework框架層是應(yīng)用開發(fā)過程中,調(diào)用的系統(tǒng)方法的內(nèi)部實(shí)現(xiàn),比如我們使用的TextView、Button控件,都是在這里實(shí)現(xiàn)的。再舉幾個(gè)例子,我們調(diào)用ActivityManager的getRunningAppProcesses方法查看當(dāng)前運(yùn)行的進(jìn)程列表,還有我們使用NotificationManager的notify發(fā)送一個(gè)系統(tǒng)通知。
代碼 | 源碼目錄 | 編譯目錄 |
---|---|---|
系統(tǒng)的相關(guān)Widget | frameworks/base/core/java/android, frameworks/base/core/java/android/view | /system/framework/framework.jar |
系統(tǒng)中的AMS/PMS | frameworks/base/services/core/java/com/android/server | /system/framework/services.jar |
系統(tǒng)中內(nèi)置的資源文件,比如Button的背景圖、屬性值之類 | frameworks/base/core/res | /system/framework/framework-res.apk |
在系統(tǒng)開發(fā)中還會(huì)涉及到服務(wù)的對(duì)應(yīng)本地實(shí)現(xiàn)部分,比如 | frameworks/base/core/jni, frameworks/base/services/core/jni | 視情況 |
如何快速地學(xué)習(xí)、梳理Framework知識(shí)體系呢?常見的學(xué)習(xí)方法有下面幾種:
首先可以通過購買相關(guān)的書籍進(jìn)行學(xué)習(xí),其中主要的知識(shí)體系有Linux操作系統(tǒng),比如進(jìn)程、線程、進(jìn)程間通信、虛擬內(nèi)存,建立起自己的軟件架構(gòu)。在此基礎(chǔ)上學(xué)習(xí)Android的啟動(dòng)過程、服務(wù)進(jìn)程SystemServer的創(chuàng)建、各個(gè)服務(wù)線程(AMS/PMS等)的創(chuàng)建過程,以及Launcher的啟動(dòng)過程。熟悉了這些之后,你還要了解ART虛擬機(jī)的主要工作原理,以及init和Zygote的主要工作原理。之后隨著在工作和實(shí)踐過程中你會(huì)發(fā)現(xiàn),F(xiàn)ramework主要是圍繞應(yīng)用啟動(dòng)、顯示、廣播消息、按鍵傳遞、添加服務(wù)等開展,這些代碼的實(shí)現(xiàn)主要使用的是Java和C++這兩種語言。
通過書籍或者網(wǎng)絡(luò)資料學(xué)習(xí)一段時(shí)間后,你會(huì)發(fā)現(xiàn)很多問題都沒有現(xiàn)成的解決方案,而此時(shí)就需要我們深入源碼中進(jìn)行挖掘和學(xué)習(xí)。但是除了閱讀官方文檔外,別忘了調(diào)試Framework也是一把利刃,可以讓你游刃有余快速定位和分析源碼。
下面我們來看看調(diào)試Framework的Java部分:
這里使用 Android Studio 進(jìn)行調(diào)試,在調(diào)試前我們要先掌握一些知識(shí)。Java代碼的調(diào)試,主要依據(jù)兩個(gè)因素,一個(gè)是你要調(diào)試的進(jìn)程;一個(gè)是調(diào)試的類對(duì)應(yīng)的包名路徑,同時(shí)還要保證你所運(yùn)行的手機(jī)環(huán)境和你要調(diào)試的代碼是匹配的。只要這兩個(gè)信息匹配,編譯不通過也是可以進(jìn)行調(diào)試的。
我們調(diào)試的系統(tǒng)服務(wù)是在SystemServer進(jìn)程中,可以使用下面的命令驗(yàn)證
ps -A | grep system_server 查看系統(tǒng)服務(wù)進(jìn)程pid
cat /proc/pid/maps |grep services 通過cat查看此進(jìn)程的內(nèi)存映射,看看是否services映射到內(nèi)存里面。
這里我們看到信息:/system/framework/oat/x86/services.odex 。odex是Android系統(tǒng)對(duì)于dex的進(jìn)一步優(yōu)化,目的是為了提升執(zhí)行效率。從這個(gè)信息便可以確定,我們的services.jar確實(shí)是跑到這里了,也就是我們的系統(tǒng)服務(wù)相關(guān)聯(lián)的代碼,可以通過調(diào)試SystemServer進(jìn)程進(jìn)行跟蹤。
下來我們來建立調(diào)試環(huán)境。
這時(shí)候我們點(diǎn)擊Genymotion模擬器中桌面的一個(gè)圖標(biāo),啟動(dòng)新的界面。會(huì)發(fā)現(xiàn)這時(shí)候我們?cè)O(shè)定的斷點(diǎn)已經(jīng)生效。
你可以看到斷下來的堆棧信息,以及一些變量值,然后我們可以一步步調(diào)試下去,跟蹤啟動(dòng)的流程。
對(duì)于學(xué)習(xí)系統(tǒng)服務(wù)線程來講,通過調(diào)試可以快速掌握流程,再結(jié)合閱讀源碼,便可以快速學(xué)習(xí),掌握系統(tǒng)框架的整個(gè)邏輯,從而節(jié)省學(xué)習(xí)的時(shí)間成本。
以上我們驗(yàn)證了系統(tǒng)服務(wù)AMS服務(wù)代碼的調(diào)試,其他服務(wù)調(diào)試方法也是一樣,具體的線程信息,可以使用下面的命令查看。
ps -T 353
這里353是使用ps -A |grep system_server查出 SystemServer的進(jìn)程號(hào)
創(chuàng)新互聯(lián)的服務(wù)器不僅具有高穩(wěn)定性,高速訪問,而且易于管理,安全和輕松使用,以減少用戶在服務(wù)器維護(hù)中的能量和時(shí)間成本,并專注于自己的業(yè)務(wù)的開發(fā)和推廣。創(chuàng)新互聯(lián)服務(wù)器,致力于為用戶提供性價(jià)比最高的服務(wù)器!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。