Android以太网架构源码
一 引言
以太網在各類android設備形態中目前是比較成熟的技術,尤其對于android系統的電視、平板以及機頂盒等都有支持有線網口的預留。最近正好做一個關于Android以太網的需求(后面在Android 系統相關問題和需求的相關文章中會具體介紹這個需求),就順便研究一下以太網的整體框架和流程。整體流程是很復雜,但是其中有一些細小的知識點還是需要關注的。這里主要基于Along的Android 10來分析。好嘞,話不多說,先看下Android以太網框架設計的代碼目錄及文件。
frameworks/base/core/java/android/net/---EthernetManager.java---IEthernetManager.aidl---ConnectivityManager.java---NetworkPolicyManager.java---NetworkAgent.javaframeworks/opt/net/ethernet/java/com/android/server/ethernet/---EthernetService.java---EthernetServiceImpl.java---EthernetTracker.java---EthernetNetworkFactory.java---EthernetConfigStore.javaframeworks/base/services/core/java/com/android/server/---NetworkManagementService.java---NativeDaemonConnector.java---NativeDaemonEvent.java---ConnectivityService.javaframeworks/base/services/core/java/com/android/server/net/---NetworkStatsService.java---NetworkPolicyManagerService.java二 整體框架簡介
對于Android 以太網架構源碼分析,我將從三個角度來分析,以點入面,進而分析整個Android 以太網的框架,整體流程不是很復雜,但是涉及其中的知識點還是比較多的,希望大家和我一塊來體驗一下Gooole大牛對于以太網架構的實現。
- 以太網服務(EthernetService)的啟動與注冊流程;
- 應用層調用使能ethernet功能的方法流程來分析,從應用層如何將指令一步一步傳到底層kernel;
- 底層kernel如何一步一步上報Uevent(例如網線的插拔等)給framework層實現;
下面我們先從圖2-1來了解一下Android 以太網的整體框架結構,了解一下每個主要服務是干啥事情。這樣就會為后面的流程分析做一定的準備。
2.1 Android 以太網框架主要服務及其作用
2.1.1 Android framework層以太網架構主要服務
根據圖2-1所以Android 以太網框架framework層主要涉及6個服務類,我們先基本了解一下這些類的作用。
- ConnectivityService :ConnectivityService 是系統網絡連接的管理服務,同時也是整個Android系統網絡的核心。主要處理App對于網絡的監聽和請求,以及網絡變化時候通知App;另外該服務還會處理Wifi/Telephony/Ethernet等各個網絡鏈路的注冊,與信息的更新,以及網絡評測和網絡評分。
- NetworkPolicyManagerService:NetworkPolicyManagerService是網絡策略的管理,主要是對某些App的網絡數據限制以及放行等。主要通過App的Uid來限制。
- NetworkManagementService:NetworkManagementService是網絡管理服務。其為ConnectivityService 和其他一些部分Framework Service建立了與Netd之間的通信通道(Android N以后Framework 與 Netd之間的通信,從socket變為了Binder調用,所以framework 其他一些服務目前也是有能力獲取到Netd的client端,從而與Netd進行通信的)。
- NetworkStatsService:NetworkStatsService主要根據不同的iface收集上下行網絡數據,并配合NetworkPolicyManagerService服務對特定的app做網絡數據限制及放行。
- EthernetServiceImp:主要提供接口,供App來設置和更新網絡,比如靜態IP,以及網絡類型等等,真正工作的是EthernetTracker這個類,這個類最終通過NetworkPolicyManagerService來和Netd進行通信。
- EthernetNetworkFactory:EthernetNetworkFactory是NetworkFactory的子類,從名字可以看出該類是個工廠類。主要功能是通過AsyncChannel接受來自ConnectivityService 的禁止自動連接、網絡有效性(NetworkMonitor的網絡檢測結果)、由于網絡不可上網等原因主動斷開網絡。同時通過NetworkAgent(網絡代理,其內部也是AsyncChannel)向ConnectivityService更新網絡狀態NetworkInfo(斷開、連接中、已連接);更新鏈路配置LinkProperties(本機網口、IP、DNS以及路由信息等);更新網絡能力NetworkCapabilities(信號強度、是否收費等)。
2.1.1 Android native 層主要服務類
根據圖2-1所以Android 以太網框架Native層目前從在兩套機制,一套是通過Binder調用實現,另外一套是通過socket通信。從Android的版本修改來看,Google更希望使用Binder調用,所以后面Android版本很有可能會將socket通信都換為Binder通信。
- NetdNativeService:NetdNativeService 是Framework層INetd的server端,提供Framework層訪問Netd。NetdNativeService是Netd進程的核心,負責Android 網絡管理和控制。通過xxxController將Framework的網絡配置和管理指令通過Syscall的方式傳遞給底層kernel。
- NetlinkManager:其利用SocketListener的方式監聽底層Kernel的Uevent事件,并且通過注冊NetdUnsolicitedEventListener方式,將底層Uevent事件上報到Framework層,例如網線的插拔等
- XXXListener:MDnsSdListener等Listener,主要通過socket監聽來自Framework層的指令,以及監聽底層的Uevent通過socket上報到framework層。
2.2 Android 以太網Framework層類圖關系
圖2-2為Android 以太網框架Framework層的類圖關系。
?
從各類的關系圖可以看出,Android以太網核心服務是NetworkManagementService,以及ConnectivityService,前者主要負責與Netd的通信以及網絡的管理,后者和幾個網絡的服務都有聯系,監聽和通知網絡狀態以及網絡評分等數據。
三 總結
作為Android 以太網框架源碼分析的啟動篇,我們主要分析了以太網的整體框架以及各類的之間的關系和作用,下一篇我們將正式開始Android 以太網框架源碼分析,首先是以太網服務的啟動,盡請期待。
總結
以上是生活随笔為你收集整理的Android以太网架构源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 「算法学习」:求平方根
- 下一篇: Android蓝牙通讯(服务端、客户端)