編輯推薦
《Android係統服務開發》分析瞭Android提供的硬件控製機製。編寫團隊目前均從事相關工作,直接分析並測試平颱源代碼和日誌,介紹瞭目前尚未普及的Android平颱的硬件控製基本原理及實際框架的操作。
與Android剛齣現時相比,Android開發人員現在已有瞭大幅增長,人們也可輕鬆搜索到相關資料。但Android開發仍然很有難度,每當版本升級時,結構變動都會使之前的代碼無法繼續使用。雖然需要深入掌握Android平颱,但開發人員的主要工作就是修復Bug,所以對實際情況往往“隻見樹木不見森林”。本書著眼點在於“開發人員如何改善開發流程”,這個問題的關鍵就是深入挖掘Android的基本實現原理。
基本功紮實的開發人員可以主導順應智能手機時代發展的智能開發。通過本書可以掌握Android平颱的操作原理,並將其直接應用於開發業務。
內容簡介
《Android係統服務開發》分析瞭安卓提供的硬件控製機製。編寫團隊目前均從事相關工作,直接對平颱源代碼及日誌進行分析及測試,介紹瞭目前尚未普及的安卓平颱的硬件控製基本原理及實際框架的操作。 與安卓剛齣現時相比,安卓開發人員現在已有瞭大幅增長,人們也可輕鬆搜索到相關資料。但安卓開發仍然很有難度,每當版本升級時,結構變動都會使之前的代碼無法重新使用。雖然需要深入掌握安卓平颱,但開發人員的主要工作就是修復Bug,所以對實際情況往往“隻見樹木不見森林”。本書著眼點在於“開發人員如何改善開發流程”,這個問題的關鍵就是深入挖掘安卓的基本實現原理。 基本功紮實的開發人員可以主導順應智能手機時代發展的“Smart”開發。通過本書可以掌握安卓平颱的操作原理,並將其直接應用於開發業務。
作者簡介
金大佑,西江大學電子工程學士及碩士學位。大學時期沉迷於Linux,並創建瞭一個Linux社團。曾參與LG電子安卓項目,目前在瑞薩移動參與安卓LTE手機項目。雖然熱衷於安卓開發,但目前仍在使用非智能手機。主要關注領域是安卓平颱、SW設計以及ARM架構。希望有一天可以將創建開源項目作為個人愛好。
樸宰永,高麗大學無綫電工程學士及碩士學位,進入LG電子後從事手機開發業務至今。尤其在10餘年的開發過程中,從與硬件相關的BSP業務到UI業務,乃至批量生産相關業務均有所涉獵,積纍瞭豐富經驗。比較關注的領域是無綫通信、移動平颱、ARM架構、USIM、電源管理,今後想通過授課對社會做齣貢獻。
文炳元,曾在LG電子參與手機開發業務,目前在一傢遊戲公司負責數據分析。認為程序員的能力不僅在於瞭解豐富的知識,更在於能夠找到解決問題的方法。現在仍然為瞭每天都有進步而不斷付齣努力。
內頁插圖
精彩書評
★看韓國人寫的技術書籍,我的感觸是講解深入、細緻和嚴謹,不僅講瞭是什麼,還講瞭為什麼。作者從原理的角度深度剖析,解釋瞭Android係統設計的內容,很多總結很到位,類比也很形象,可見其對telephony模塊和power模塊有著深入的研究和豐富的實戰經驗。通過本書不僅能夠學到技術,更能體會那份認真的態度,這在當下日益浮躁的氛圍下顯得尤為珍貴! ——陳傢林(Marvell高級研發經理)
★這是一本不錯的係統開發書籍,通過本書可以瞭解係統進程間通信、通信(RIL)框架、電源管理等內容的相關細節,對緻力於這方麵開發的程序員來說大有裨益。 ——張泳(資深軟件工程師、《深入剖析Android開發》作者)
★Android係統中,內置App可以實現電話號碼顯示、亮度調整等很多基本功能,這些Android手機的基本功能就是通過“係統服務”實現的。本書非常詳細地講解瞭各種係統服務的內部運作原理。毫無疑問,無論你是初學者還是Android開發高手,都能從本書中獲益。 ——金哲(360高級研發經理)
★“我從事Android開發1年瞭,都是做App層次的開發,很難有係統服務層次的開發。這書確實不錯,這次試讀個人感覺比較清晰明瞭,也通俗易懂。可能很多人認為,做App會比做係統服務有成就感,因為上市的App是能看得見、能被彆人使用、被彆人評價的。但是,能做好底層係統服務纔是更難、更重要的事情。期待此書麵世並大賣!” “彩色插圖真是太酷炫瞭!看慣瞭傳統的UML圖,這本書真是讓人眼前一亮啊!書裏的代碼都是片段式的,感覺心裏輕鬆很多呀~市場上Android底層的書都是代碼一堆,看到瞬間頭疼……” “我接觸手機移動應用行業3年多瞭,做過兩年Android端程序開發,這2年在工作上麵的開發僅僅局限於Android四大組件、Android常用布局設計等基礎知識。像我們公司産品中手機端數據同步(數據傳輸)的功能,我也隻是依葫蘆畫瓢地修改BUG,從來都沒有對Android網絡通信的原理進行過研究學習,也不瞭解Android係統的通信框架、基本原理等。這本書來得太及時瞭,一定要珍藏。” “本人從事Android開發已經有一段時間瞭,我認為,要開發高效的Android程序,必須要瞭解係統內部的原理。從目錄結構看,這是一本詳細講解內部原理的書,我十分需要。因為瞭解Android係統服務必定對以後的Android開發有一定提升,也希望能為以後深入Android底層開發做好準備。” “試讀過樣章後,我發現自己之前開發的App都太流於錶麵瞭,都是一些界麵和網絡數據交互和顯示的功能,卻一點都不瞭解這些係統的功能開發。這本書讓我感觸很深,尤其是學到瞭很多以前沒有接觸過的概念。這是讓我嚮高級程序員進階的一本好書,終於知道自己工作兩年技術還是這麼菜的原因瞭,非常感謝。” ——eoeAndroid社區資深會員熱評
目錄
第1 章 Android 係統服務開發 11.1 Android 係統服務開發簡介 21.1.1 Android 的齣現 21.1.2 移動設備的硬件結構 51.1.3 Android 硬件服務開發概要 111.1.4 本書的敘述方嚮 141.2 IPC 161.2.1 Android 的進程 161.2.2 進程的fork() 及exec() 函數 171.2.3 Linux 內核的IPC 191.2.4 Linux 管道 201.2.5 網絡套接字 211.2.6 UNIX 套接字 271.3 I/O 多路復用 301.3.1 服務器端/ 客戶端模型 301.3.2 使用select() 函數的I/O 多路復用 331.3.3 select() 函數示例 341.4 ITC 361.4.1 多綫程 361.4.2 Android 的ITC 模型 391.4.3 消息 421.4.4 Looper 451.4.5 Handler 491.4.6 HandlerThread 541.5 守護進程服務分析 561.5.1 普通守護進程程序的結構 561.5.2 生成init 進程的守護進程服務 581.5.3 守護進程與多客戶端間的通信 65第2 章 RIL 702.1 RIL 簡介 712.1.1 RIL 簡介 712.1.2 AP 與調製解調器間的相互作用 722.1.3 AP 與調製解調器間的通信:RIL 命令 732.2 RIL 結構 752.2.1 Android 通信棧 762.2.2 Android RIL 的調製解調器控製模型 772.3 RIL 守護進程的結構 782.3.1 RIL 守護進程的構成要素 792.3.2 RIL 事件 802.3.3 RIL 事件調度程序 812.4 RIL 守護進程初始化 872.4.1 守護進程的啓動 872.4.2 RIL 守護進程初始化過程 902.4.3 動態加載Vendor RIL 庫 912.4.4 生成RIL 事件調度程序 922.4.5 Vendor RIL 初始化 972.4.6 注冊Vendor RIL 的Radio控製函數及生成I/O 事件專用套接字 1002.5 RIL 事件處理機製 1032.5.1 RIL 事件調度程序的運行原理 1032.5.2 RIL 事件處理迴調函數 1102.5.3 RIL req 處理機製 1192.5.4 RIL resp 處理機製 1242.5.5 RIL ind 處理機製 129第3 章 通信框架 1363.1 通信框架概要 1373.1.1 通信框架的功能 1373.1.2 通信框架提供的服務 1393.2 通信框架的結構 1403.2.1 通信框架的分層構成要素 1403.2.2 PhoneApp 類 1423.2.3 PhoneProxy 類 1423.2.4 Phone 接口 1443.2.5 Radio 接口 1463.2.6 state tracker 類 1483.2.7 CallManager 類 1493.2.8 不同版本中通信框架的變化(1.5~4.2) 1513.3 通信框架的初始化 1523.3.1 Phone 應用程序的生成 1533.3.2 通信框架的初始化 1553.3.3 RILJava 的初始化 1603.4 通信框架的服務模型 1643.4.1 通信框架的服務結構 1643.4.2 通信框架的服務req/resp 處理機製 1653.4.3 通信框架的服務ind 處理機製 1723.5 RILJava 的RIL req 處理示例 1863.5.1 Phone 應用程序的通信框架API 調用 1873.5.2 調用RILJava 的Radio API 1893.5.3 生成RILJava 的RILRequest對象 1913.5.4 嚮RILSender 綫程傳送RILRequest 對象 1933.5.5 發送RILSender 綫程的RIL req 1943.6 RILJava 的RIL resp 處理示例 1973.6.1 從RIL 守護進程接收RIL resp 1983.6.2 發送RILReceiver 綫程的服務resp 消息 2003.6.3 處理客戶端對象handler 的服務resp 消息 2023.7 RILJava 的RIL ind 處理示例 2033.7.1 注冊Subscriber 對象的服務ind 2043.7.2 接收RILReceive 綫程的RIL ind 2053.7.3 調用RILReceive 綫程的notifyRegistrant() 方法 2063.7.4 處理Subscriber 對象handler的服務ind 消息 209第4 章 USIM 2114.1 USIM 簡介 2124.1.1 智能卡的定義 2134.1.2 智能卡的啓動過程 2134.1.3 使用APDU 的智能卡通信 2154.1.4 USIM 的由來 2154.1.5 USIM 的主要功能 2164.2 USIM 的數據結構及運行 2194.2.1 USIM 的數據結構 2194.2.2 USIM 的移動通信相關EF 2214.2.3 通過APDU 讀取EF 的過程 2234.3 Android USIM 軟件結構 2254.3.1 調製解調器 2254.3.2 RIL 2264.3.3 通信框架 2264.3.4 Android 應用程序 2294.4 Android USIM 初始化及運行 2304.4.1 UICC 初始化及UICC 相關對象的生成 2304.4.2 係統啓動後調製解調器通電 2354.4.3 進入SIM_READY 狀態 2404.4.4 查看USIM 狀態及執行EF讀取 2444.4.5 分析通信框架的EF 讀取 2464.5 Android USAT 初始化及運行 2544.5.1 USAT 初始化 2544.5.2 通過Display Text 分析Proactive Command 2584.5.3 Android 的Proactive Command處理 263第5 章 Android 電源管理 2705.1 電源管理概述 2725.1.1 電功率 2735.1.2 瞭解電池 2735.1.3 默認電源狀態 2745.1.4 Android 電源管理的作用 2755.2 Android 電源管理的結構 2765.2.1 Android 電源管理的層級結構 2775.2.2 Power Manager 2785.2.3 Power Manager Service 2795.2.4 本地空間 2805.2.5 內核空間 2825.2.6 Android 電源管理主要方法調用過程 2835.3 Power Manager Service 的初始化 2845.3.1 Power Manager Service 的類結構及方法 2855.3.2 生成並注冊Power ManagerService 2865.3.3 Power Manager Service 初始化:init() 方法 2905.3.4 Power Manager Service 初始化:systemReady() 方法 3025.4 Power Manager Service 的主要操作 3045.4.1 Power Manager Service 狀態 3045.4.2 決定Power Manager Service狀態 3075.4.3 屏幕亮度時間的結構 3155.4.4 根據屏幕亮度時間控製屏幕亮度 3185.4.5 屏幕亮度轉換的結構要素 3205.4.6 屏幕亮度轉換操作 3215.4.7 Wake Lock 標記與標簽 3285.4.8 生成Wake Lock 3305.4.9 獲取Wake Lock 3345.4.10 解除Wake Lock 3445.5 間接應用電源管理服務 3445.5.1 Power Manager 類提供的方法 3455.5.2 Power Manager 類的實例化及獲取 3455.5.3 獲取Wake Lock:PARTIAL_WAKE_LOCK 3475.5.4 Wake Lock 獲取示例:PARTIAL_WAKE_LOCK 3485.5.5 獲取Wake Lock:屏幕亮度控製標記 3505.5.6 Wake Lock 獲取示例:FULL_WAKE_LOCK 3525.5.7 獲取Wake Lock:ACQUIRE_CAUSES_WAKEUP 3535.5.8 解除Wake Lock:PARTIAL_WAKE_LOCK 3575.5.9 解除Wake Lock:屏幕亮度控製標記 3585.5.10 解除Wake Lock:ON_AFTER_RELEASE 3605.6 直接應用Power Manager Service 3615.6.1 屏幕亮度設置 3625.6.2 Poke Lock 3635.7 不應用Power Manager Service的Wake Lock 364第6 章 Android 內核電源管理 3676.1 Linux 內核電源管理 3696.1.1 APM 與ACPI 3696.1.2 設備電源管理 3726.2 Android 內核電源管理 3726.2.1 Android 內核修訂內容 3726.2.2 kobject 與sysfs 文件係統 3736.2.3 生成用於電源管理的sysfs文件 3766.3 電源管理初始化 3786.4 Early Suspend 3816.4.1 Early Suspend 結構體與注冊 3826.4.2 Early Suspend 操作 3846.5 Wake Lock 3876.5.1 Wake Lock 結構 3876.5.2 生成Wake Lock 3896.5.3 激活Wake Lock 3906.5.4 禁用Wake Lock 3936.6 Suspend 3946.6.1 執行Suspend 3946.6.2 準備Suspend 3956.6.3 進入Suspend 3966.7 Resume 3996.7.1 Early Resume 4006.7.2 設備Resume 4016.7.3 Resume 完成 4026.8 Late Resume 4026.9 Surface Flinger 與內核之間的相互操作 4056.9.1 屏幕On(開)狀態到Off(關)狀態的轉換 4066.9.2 屏幕Off(關)狀態到On(開)狀態的轉換 409索引 412
前言/序言
長達兩年半的寫作終於結束瞭,真讓我耗盡心力。公司、傢庭、寫作齊頭並進,經常讓我覺得時間不夠用。體力和健康狀況大不如前,這也牽製瞭我的寫作計劃。我有好幾十次想過就此放棄,有好幾百次問過自己:“為什麼要自討苦吃?為什麼要做這些?”頻繁的加班,甚至周末也要加班,這讓我很難保證寫作時間。孩子齣生後,時間就更少瞭。盡管這樣,我仍舊堅持每天更新稿件,心想著哪怕每天隻寫一行也好。就憑著這種不放棄的態度,本書最終得以麵世。如果中途放棄的話,我一定會抱憾終身。 Android 的版本不斷更新,我最初接觸Android 的時候,是Android Cupcake(1.5)版本,現在已經升級到瞭Android Jelly Bean Plus(4.2)。在此期間,Android 取得瞭令人矚目的發展,是目前擁有最大用戶群的智能手機OS。Android 發布之初很難找到相關資料,而且在實際應用領域,使用Android 的人也隻是少數。我本人也曾經通過Google 搜索Android 相關資料,但找到的信息隻停留在基礎理論水平。當然,現在也經常難以找到真正需要的內容,不得不自己解決問題。因此,我開始整理開發中所需資料,希望有一天能夠以某種形式公開這些資料,以幫助那些因為資料不足而傷腦筋的開發人員。一個偶然的機會,我在網絡上看到瞭招募作者的網絡招聘信息,於是決定參與其中,與團隊中給我很大影響的樸宰永負責人,以及對Android 平颱有很大興趣的文炳元先生閤作,最終完成瞭這本書。 不知道大傢是否聽說過馬爾科姆? 格拉德威爾(Malcolm Gladwell)在《異數》(Outsider)一書中介紹的“一萬小時定律”?“一萬小時定律”是指,無論任何領域,如果想要成為一名專傢,那麼至少要投入一萬小時。這一萬小時是由什麼組成的呢?隻要工作時間閤計超過一萬小時,就可以成為該領域的專傢嗎?如果以每周工作40 小時為基準,工作一年的話有2000 小時,這樣一來,如果一份工作做5 年,那麼就在該領域有瞭一萬小時的經驗,應該就可以說是一位專傢瞭。然而我們麵對的現實情況卻是,從事開發工作5 年的開發人員有時候做調試都覺得吃力,更彆說做係統設計瞭。是的,“一萬小時定律”不是單純的工作時間總和,而是為瞭提高自己的實力所投資的時間總和。我想,這本書也是我提高自身實力過程中的産物。在邊寫書邊思考如何嚮讀者進行說明、如何更好地幫助讀者理解的過程中,我也學到瞭很多。這種思考成為非常有用的知識及經驗,可以在實際開發中解決很多問題。 與Android 初創期相比,現在的Android 開發人員有瞭大幅增加,然而這樣就可以認為進入Android 世界的門檻降低瞭嗎?開源的優點就好比開捲考試的優點,開捲考試雖然為所有人都提供瞭相同的機會,但是在限定時間內進行考試而得到的結果卻有所不同,那些對基礎知識掌握透徹的人反而能夠得到更好的成績。同樣,開源的優點也使得很多人可以接觸到Android 平颱的核心,但是這無法降低進入Android 世界的門檻。為什麼一綫的開發人員仍然會覺得Android開發難度很高呢?是因為Android 的發布速度慢於其他智能手機OS 嗎?或者是因為Android 還不夠成熟?還是因為MSDN 等強大的開發人員幫助手冊還不夠完備? 當然,上麵所列的原因都是影響Android 開發的要素,但我個人認為,最主要的原因是惡劣的開發環境。極短的項目周期、接連不斷的加班、依照Man-Month 投入的人力、不完善的開發人員教育係統等,這些惡劣的開發環境消耗瞭開發人員的好奇心,反而使Android 變為令開發人員感到痛苦的對象。在這種開發環境下,與其從根本上找到避免齣現Bug 的對策,不如快速修復Bug,解決Bug 跟蹤係統的問題。我本人開始進行Android 開發後不久,有一次閱讀Android 方麵的參考書籍時,一個同事問瞭我這樣一個問題:“連開發的時間都不夠用,哪兒還有時間看書啊?”我當時是這樣迴答的:“如果想要更好地掌握開發技術,就一定要學習。如果隻注重
Android係統服務開發 下載 mobi epub pdf txt 電子書 格式