【深入理解 android telephony 系列第一集 初识telephony】
深入理解 android telephony
- 深入理解 android telephony 系列第一集 初識telephony
- 1. 概述
- 2. Android Telephony 框架
- 3. Android Telephony 細分框架
- 4. Android Telephony 的代碼細分
- 5.關于Android Telephony 所具有的能力
- 6.關鍵模塊的編譯命令
- 7.關于Android在調試的時候的一些常用命令,以及Phone進程的調試命令
- 8. 關于Genymotion的下載安裝
- 8.1 下載和安裝
- 9. 總結
深入理解 android telephony 系列第一集 初識telephony
提示:
博主:_ 小小碼nong
博客地址:http://blog.csdn.net/qq_29924041
1. 概述
??? 回看上篇文章,已經是long long ago以前了,好久都沒有針對性的總結一些東西,剛好今年做了一些關于phone相關的東西,抽點時間整理下,總結下。不對,不喜歡的地方,不喜勿噴。所謂的成長就是慢慢的積累和總結。
???手機的基礎屬性,或者叫基礎功能是什么,毫無疑問,通話,上網,短信,離開了這三個基礎屬性,那就不叫手機了。而Phone模塊,在整個android源碼中所占的地位也是毫無疑問的。是一個比較龐大的一系列模塊。
???從針對手機的Dialer應用,Messaging應用,針對車載設備的CarDialer,Messager,到Phone 的服務層Telecom,TeleService服務,然后再到RILJ,乃至最終的RILC,再到電話的日志記錄CallLogBackup,ContactsProvider等等,無一不是屬于Phone的范疇,再到通信模組,當然模組知識是另外一個知識領域,不在此系列文章中贅述。
??? 本系列文章主要是以android 9.0的代碼為基礎,進行解讀和調試的。參考的也是genymotion下的android 9.0的模擬器設備。
2. Android Telephony 框架
???首先來張框架圖
總結如下
- 整個telephony模塊是跨越了AP到BP的,即ril是跟模組進行相互通信
- Android的Telephony采用了分層的架構設計,即應用層,應用框架層以及系統運行庫
- Android的三層主要為Telephony應用,Telephony框架以及RIL(Radio Interface Layer)即無線通信接口層
整個telephony的設計是一個很標準的android的分層架構,其結構是非常清晰的,但是其業務上是極其復雜和繁瑣的
3. Android Telephony 細分框架
???此架構圖主要是對整個Telephony中的模塊,業務,交互等等進行細化拆分的
針對以上架構的總結
4. Android Telephony 的代碼細分
| Dialer | packages/apps/Dialer | 手機設備的撥號應用 |
| Messaging | packages/apps/Messaging | 手持設備的短彩信應用 |
| CarDialerApp | packages/apps/Car/Dialer | 車載設備的撥號應用 |
| CarMessengerApp | packages/apps/Car/Messenger | 車載設備的短彩信應用 |
| Telecomm | packages/services/Telecomm | 電話的第一層服務,跟UI層直接交互的 |
| TeleService | packages/services/Telephony | 電話的第二層服務,跟底層hal層直接交互的,并且跟Telecomm進行交互的 |
| telephony-common | frameworks/opt/telephony/telephony | 主要是phone模塊,hal層對應的java層客戶端的代碼,這個模塊的代碼就是跟hal下面的C/C++服務進行通信的 |
| Telecom_Framewrok | frameworks/base/telecomm | 這塊的代碼就是android提供的phone的一些sdk的代碼 |
| Telephony_Framewrok | frameworks/base/telephony | 這塊的代碼就是android提供的phone的一些sdk的代碼 |
| CallLogBackup | packages/providers/CallLogProvider | 主要是電話記錄,電話日志等的provider |
| ContactsProvider | packages/providers/ContactsProvider | 主要是聯系人對應的provider |
| TelephonyProvider | packages/providers/TelephonyProvider | 短/彩信相關的provider |
| RIL | hardware/ril | 主要是phone的C/C++服務層,跟模組交互的 |
總結:
??? 以上所列舉的相關模塊都是跟phone進程有強烈耦合關系的,模塊,針對本系列文章主要也就是針對以上模塊的代碼進行分析,深入理解。
??? 可以看出來,整個phone模塊下的相關子模塊是何其的龐大,當然中間還有一些模塊被省略了,如settings下的phone的設置等等功能,telecom命令的解析等等,都沒有在其中涉及到
5.關于Android Telephony 所具有的能力
phone模塊的基礎能力就是通話,短信能力,當然phone能力肯定不僅僅局限于這兩個能力
總結
- Sim卡的服務的能力是phone的基礎能力,如多卡多待,切換sim卡,飛行模式等等
- Call通話能力,毋庸置疑,包含了來電,去電,緊急電話,會議電話模式以及volte網絡視頻通話等等
- DataCall也是基礎能力,如上網功能,網絡切換從4G切到3G等等
- SMS/MMS的功能,短信功能現在用的也沒那么多了,都是收一些垃圾短信,驗證碼等等,還有彩信能力,最近這幾年,感覺這玩意要淘汰掉了一樣。彩信收發是要用到網絡的。
結合以上的一些能力,在整體的模塊中按照業務邏輯整理串聯下來
6.關鍵模塊的編譯命令
| Dialer | packages/apps/Dialer | make Dialer |
| Messaging | packages/apps/Messaging | make messaging |
| CarDialerApp | packages/apps/Car/Dialer | make CarDialerAppc |
| CarMessengerApp | packages/apps/Car/Messenger | make CarMessengerApp |
| Telecomm | packages/services/Telecomm | make Telecom |
| TeleService | packages/services/Telephony | make TeleService |
| telephony-common | frameworks/opt/telephony/telephony | make telephony-common |
| Telecom_Framewrok | frameworks/base/telecomm | make framework |
| Telephony_Framewrok | frameworks/base/telephony | make framework |
| CallLogBackup | packages/providers/CallLogProvider | make CallLogBackup |
| ContactsProvider | packages/providers/ContactsProvider | make ContactsProvider |
| TelephonyProvider | packages/providers/TelephonyProvider | make TelephonyProvider |
| RIL | hardware/ril | make rild |
以上是這些模塊的相關編譯命令,當然你也可以使用mm, mma等等編譯
以上都是一些簡單的編譯模塊的命令,更具體的其他的一些命令,可以參考博主的另一篇博客
Android源碼編譯命令匯總
注意:
1:關于源碼的現在在這里不贅述,有興趣的可以去清華源上下載源碼并且編譯,同時這塊的博客講解也是非常多的,如何使用repo,如何切換分支,如果有不知道的可以聯系博主
2:還有要注意的是,如果修改了framework的接口,最好先make update-api一下,然后使用make -j4進行全編
3:博主在公司有板子可以刷,一般修改自己的framework代碼的時候都是使用fastboot整體刷機,當然在這里是以aosp的源碼為基礎,所以沒有必要
7.關于Android在調試的時候的一些常用命令,以及Phone進程的調試命令
| adb logcat -b events | 主要是查看當前am下activity的 |
| adb logcat -b radio | 打印的是ril的日志 |
| adb logcat -b all | 將系統的logcat下的所有日志全部輸出出來,包括ril的日志 |
| adb logcat -c -b all | 清理日志的緩存 |
| adb logcat -s xxx | 按照xxx的tag打印日志 |
| adb logcat | grep -nre xxx -e xxx |
以上的一些命令都是簡單的調試指令,更具體的一些調試命令,可以參考博主的另一篇博客
8. 關于Genymotion的下載安裝
8.1 下載和安裝
??? 關于genymotion的下載和安裝可以參考以下這篇博客,寫的是非常的詳細,在這里我就不去贅述
https://blog.csdn.net/yht2004123/article/details/80146989
??? 安裝好genymotion后,我們安裝對應的android9.0對應的虛擬機,然后就可以愉快的跟著android系統一起看看phone是怎么玩的啦
9. 總結
??? 開篇主要講的是對于phone模塊的認識,phone模塊的功能劃分,模塊劃分,以及代碼劃分,后面會再genymotion基礎上,跟著代碼的邏輯一步一步的分析,電話流程是如何從ui層流向hal層,又是怎么從hal層一步一步回調通知上來,以及總結phone模塊中優秀的代碼邏輯設計
??? 在phone模塊中,有大量的優秀的設計模式和分層設計思想在里面。事件通知等等,都是值得我們去總結和學習的
本人也是在邊學習邊總結的過程,寫的不好的地方,不喜勿噴,有錯誤的地方歡迎斧正。
歡迎繼續訪問,我的博客
總結
以上是生活随笔為你收集整理的【深入理解 android telephony 系列第一集 初识telephony】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: selenium模拟12306登录
- 下一篇: linux系统中profile文件介绍