1. 程式人生 > >Android 4.4 Kitkat Phone工作流程淺析(一)__概要和學習計劃

Android 4.4 Kitkat Phone工作流程淺析(一)__概要和學習計劃

        美國時間 2013 年 10 月 31 日, Google 正式釋出了全新版本的移動作業系統 Android 4.4 KitKat 。據 google官方介紹,Android 4.4 降低了硬體的需求,提高了程式執行效率。距離 4.4 釋出已經過去3個月了,不少朋友也已經體驗到了 4.4 所帶來的快感,大家可以通過刷入三方ROM(比如CM/Omni/Slim等)體驗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)/src
res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res

LOCAL_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

        從整體上來講,Android 4.4 把原來的Phone分成了幾塊:Dialer現在是撥號應用;TeleService是Server端;InCallUI負責顯示;相對於 4.4 之前的Phone應用來說,這樣更改後結構更加清晰明瞭。

        看了整體結構,大致規劃一下後續的學習計劃,如下:

        以上計劃僅目前考慮到的一部分,後續根據實際情況可能會有些許變動。