美國時間 2013 年 10 月 31 日, Google 正式發布了全新版本的移動作業系統 Android 4.4 KitKat 。據 google官方介紹,Android 4.4 降低了硬體的需求,提高了程式運行效率。距離 4.4 發布已經過去3個月了,不少朋友也已經體驗到了 4.4 所帶來的快感,大家可以用過刷入三方ROM(比如知名的CM ROM等)體驗Android 4.4。但從目前來看,基於MTK平台的裝置,幾乎還沒有運行Android 4.4 的裝置,OEM廠商拿到系統之後會做許多定製,比如MTK就比高通的定製更多,這也就是為什麼國內許多廠商直接拿到MTK的方案就可以出貨的原因,當然這也造成了鋪貨時間更慢。
因工作原因,這裡就以MTK平台Android 4.4為例(後文例子代碼使用MTK平台 Android 4.4 代碼,但基於各方面原因只標註關鍵代碼,以調用時序圖為主),整理並記錄 Android 4.4 Phone 的工作流程。雖然MTK對於Android的源碼定製修改較多,但整體結構還是可以與原生進行對比的。
我們知道通話功能(Telephony)是手機最基本,也是最終要的功能,因此 Google對於這塊的改動曆來是最少的。在經過了數次迭代之後,我們在 4.4 上發現 Google 對 Phone 模組進行了較大的改動。從圖1可以大致看到相關的改動:
圖1
原來的Phone應用不見了,取而代之的是Dialer和TeleService,為什麼這裡把InCallUI單獨列出來呢?實際上我們單獨去編譯InCallUI也是可以產生對應的APK的,但實際上push到手機中卻沒有效果,因為Dialer的Android.mk中已經將InCallUI的程式碼封裝含,也就是已經將InCallUI的代碼打包到了Dialer.apk中。如下:
src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/srcres_dirs := res $(contacts_common_dir)/res $(incallui_dir)/resLOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))LOCAL_AAPT_FLAGS := \ --auto-add-overlay \ --extra-packages com.android.contacts.common \ --extra-packages com.android.incallui
從整體上來講,也就是說把原來的Phone分成了幾塊,Dialer現在是撥號應用,TeleService是Server端,InCallUI負責顯示。相對於 4.4 之前的Phone應用來說,這樣更改後結構更加清晰明了。
看了整體結構,大致規劃一下後續的學習計劃,如下:
1. Android 4.4 Kitkat Phone工作流程淺析(一)__概要和學習計劃;
(註:制定學習計劃)
2. Android 4.4 Kitkat Phone工作流程淺析(二)__UI分析;
(註:主要包括介面控制項介紹,介面控制項更新控制流程程介紹)
3. Android 4.4 Kitkat Phone工作流程淺析(三)__MO(去電)流程分析;
(註:包括從Dialer撥號到對方接通電話並進行正常通話流程分析)
4. Android 4.4 Kitkat Phone工作流程淺析(四)__MT(來電)流程分析;
(註:包括來電從RIL上報到InCallActivity顯示流程分析)
以上計劃僅目前考慮到的一部分,後續根據實際情況變動。