日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【深入理解 android telephony 系列第一集 初识telephony】

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深入理解 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中的模塊,業務,交互等等進行細化拆分的


針對以上架構的總結

  • 應用層中主要包括了電話Dialer應用,Messaging應用,當然還包括了針對Car的CarDialer類應用
  • 應用層主要通過aidl的接口跟Telecom進行交互,Telecom是一個跟應用層直接進行交互的運行在系統進程中的服務
  • Telecom服務再通過aidl接口跟TeleService服務進行交互,TelecomService也就是所謂的phone進程,其實負責加載RIL的java層客戶端的,會去load在opt/telephony下的RIL.java,初始化在java層的Phone相關的信息
  • RILJ即RIL的java層代碼,通過hidl接口,即hal層,然后與RILC進行通信,也就將java層的業務轉移到了C層去實現,即原理就是通過java的hwbinder客戶端與一個C/C++的hwbinder服務端進行通信
  • RILC在去與模組進行通信
  • 根據這樣一層一層的調用,就將應用層的指令逐步的下發到了模組,然后模組通過回調,將模組的信息再一步一步的回調上來。中間跨越了數個層級

  • 4. Android Telephony 的代碼細分

    模塊代碼地址作用
    Dialerpackages/apps/Dialer手機設備的撥號應用
    Messagingpackages/apps/Messaging手持設備的短彩信應用
    CarDialerApppackages/apps/Car/Dialer車載設備的撥號應用
    CarMessengerApppackages/apps/Car/Messenger車載設備的短彩信應用
    Telecommpackages/services/Telecomm電話的第一層服務,跟UI層直接交互的
    TeleServicepackages/services/Telephony電話的第二層服務,跟底層hal層直接交互的,并且跟Telecomm進行交互的
    telephony-commonframeworks/opt/telephony/telephony主要是phone模塊,hal層對應的java層客戶端的代碼,這個模塊的代碼就是跟hal下面的C/C++服務進行通信的
    Telecom_Framewrokframeworks/base/telecomm這塊的代碼就是android提供的phone的一些sdk的代碼
    Telephony_Framewrokframeworks/base/telephony這塊的代碼就是android提供的phone的一些sdk的代碼
    CallLogBackuppackages/providers/CallLogProvider主要是電話記錄,電話日志等的provider
    ContactsProviderpackages/providers/ContactsProvider主要是聯系人對應的provider
    TelephonyProviderpackages/providers/TelephonyProvider短/彩信相關的provider
    RILhardware/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.關鍵模塊的編譯命令

    模塊代碼地址編譯命令
    Dialerpackages/apps/Dialermake Dialer
    Messagingpackages/apps/Messagingmake messaging
    CarDialerApppackages/apps/Car/Dialermake CarDialerAppc
    CarMessengerApppackages/apps/Car/Messengermake CarMessengerApp
    Telecommpackages/services/Telecommmake Telecom
    TeleServicepackages/services/Telephonymake TeleService
    telephony-commonframeworks/opt/telephony/telephonymake telephony-common
    Telecom_Framewrokframeworks/base/telecommmake framework
    Telephony_Framewrokframeworks/base/telephonymake framework
    CallLogBackuppackages/providers/CallLogProvidermake CallLogBackup
    ContactsProviderpackages/providers/ContactsProvidermake ContactsProvider
    TelephonyProviderpackages/providers/TelephonyProvidermake TelephonyProvider
    RILhardware/rilmake 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 logcatgrep -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】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。