課程介紹:
如何理解Android架構(gòu)設(shè)計的初心并開發(fā)出搭載Android系統(tǒng)并且具備深度定制和軟硬整合能力特色產(chǎn)品,是本課程解決的問題。
課程以Android的五大核心:HAL、Binder、Native Service、Android Service(并以AMS和WMS為例)、View System為主軸,一次性徹底掌握Android的精髓。
之所以是開發(fā)Android產(chǎn)品的必修課,緣起于:
1,HAL是Android Framework & Application與底層硬件整合的關(guān)鍵技術(shù)和必修技術(shù);
2,Native Service 對上層來說代表了硬件,是Android底層真正的精髓;
3,Android Service是應(yīng)用程序的控制核心,應(yīng)用程序的一切行為均有Android Service掌控;
4,Binder 是Android系統(tǒng)運行的基石,不掌握Binder就永遠無法掌握Android;
5,View系統(tǒng)的差異化對消費者而言是Android產(chǎn)品核心競爭力之一,蘋果和三星是這方面成功的經(jīng)典案例;
通過Android五大核心的洗禮,從而完全具備Android系統(tǒng)二次開發(fā)和改造能力,進而開發(fā)出極具特色的Android產(chǎn)品。
課程特色:
建立360度的Android產(chǎn)品研發(fā)能力和解決問題的能力,能夠獨立開發(fā)并深度定制出搭載Android系統(tǒng)的產(chǎn)品;
貫通Android軟硬整合和HTML5端云整合技術(shù)整個體系;
全程案例驅(qū)動,重在剖析案例代碼背后的設(shè)計思維和商業(yè)密碼;
徹底掌握Android HAL的背后的密碼;
徹底掌握Android HAL的實現(xiàn)機制和技術(shù)
徹底掌握Android Framwork的背后的密碼
徹底掌握Android Framwork的設(shè)計思維和理念
揭秘Android系統(tǒng)的運行的基石Binder
以Camera實例來徹底剖析Native Service和Binder
徹底實戰(zhàn)編寫Andorid應(yīng)用程序的一切技術(shù)
掌握HTML5技術(shù)的源泉和精髓
課程長度:
3天
課程對象:
- ??? 手機、平板、智能電視、車載系統(tǒng)、智能家居設(shè)備(例如微波爐、防盜門、電冰箱)等所有想使用Android的硬件廠商;
- ??? 對Android軟硬整合感興趣的人員;
- ??? 希望迅速了解和掌握Android應(yīng)用和底層技術(shù)的人員;
- ??? Android底層開發(fā)者;
- ??? Android框架設(shè)計和開發(fā)者;
- ??? Android產(chǎn)品架構(gòu)師;
- ??? Android系統(tǒng)架構(gòu)師;
- ??? Android應(yīng)用程序開發(fā)者;
- ??? 欲從事HTML5系統(tǒng)工作的人員(瀏覽器的開發(fā)、PhoneGap的的Plugin開發(fā)等)
- 希望從事移動終端開發(fā)的愛好者、工程師、程序員、以及相關(guān)行業(yè)的工程技術(shù)人員
課程大綱:
1:Android架構(gòu)揭秘
1,1 Google是如何通過Android支持、掌控全球的硬件廠商和應(yīng)用程序開發(fā)者的?
1,2 Android控制力的源泉是什么?技術(shù)上如何實現(xiàn)?
1,3 Android的Linux Kernal、HAL、Libararies、Runtime、Application Framework設(shè)計的理念和實現(xiàn)技術(shù);
1.4 Android平臺與硬件、云的微妙關(guān)系;
2:Android開機流程揭秘
2,1 第一個用戶進程剖析;
2,2 ServiceManager與Binder的關(guān)系;
2,3 Zygote揭秘及其運作方式;
2,4 Android中的第一個Java進程揭秘,第一個Java進程和ServiceManager的關(guān)系及代碼實現(xiàn);
3:Android中啟動一個新的應(yīng)用程序揭秘
3,1 當(dāng)我們觸摸Android屏幕中Launcher上的一個應(yīng)用程序的圖標的時候到底發(fā)生怎樣的調(diào)用過程?
3,2 應(yīng)用程序的執(zhí)行入口到底在哪里?
3.3 一個新的Android應(yīng)用程序的進程到底是怎么產(chǎn)生的?
4:HAL揭秘
4.1 HAL被加入Android中的真正歷史原因分析
4.2 HAL的意外價值揭秘
4.3 HAL的Stub
4.4 hw_module_t與hw_device_t
4.5 C語言如何實現(xiàn)繼承來滿足HAL Stub的設(shè)計目的?包括內(nèi)存結(jié)構(gòu)分析和代碼風(fēng)格討論等
4.6 如何避免HAL Stub實現(xiàn)時的Dirty Code?
5:HAL Stub實戰(zhàn)
5.1 用面向?qū)ο蟮乃枷敕治觥⒃O(shè)計、實現(xiàn)Stub
5.2 hw_module_t的子類和hw_device_t的子類的關(guān)系以及這種關(guān)系的優(yōu)勢
5.3 在結(jié)構(gòu)體中如何實現(xiàn)C函數(shù)的調(diào)用?hw_module_t的子類在代碼中又是如何和hw_device_t的子類交互的?
5.4 類型轉(zhuǎn)換問題
6:HAL和Linux Kernel
6.1 HAL Stub訪問和控制硬件
6.2 Android下的Linux Kernel剖析
6.3 Android 硬件的Driver
6.4 訪問Linux內(nèi)核空間的Driver
7:Service與HAL Stub整合
7.1 以面向服務(wù)的觀點和方式與HAL交互
7.2 Library的中so庫文件的類型及C/S結(jié)構(gòu)剖析
7.3 hw_get_module
7.4 獲取HAL Stub對象的代碼流程剖析
7.5 為何HAL Stub的open方法必須提供supporting API(對設(shè)備的操作接口)給runtime;
8:Service、ServiceManager和Binder交互關(guān)系揭秘
8.1 Binder的第一號服務(wù)是誰?為何要這樣設(shè)計和實現(xiàn)?
8.2 如何編寫Service
8.3 新的Service產(chǎn)生與ServiceManager和Binder交互流程
8.4 如何獲取一個Service?
8.5 Binder的生產(chǎn)者與消費者模式剖析
9:Binder與Shared Memory
9.1 Binder源代碼剖析
9.2 Shared Memory剖析
9.3 Binder是如何使用共享內(nèi)存來完成進程間通信的?
9.4 從代碼的角度來分析Binder使用Shared Memory的生產(chǎn)者與消費者模式
10:Dalvik VM
10.1 Dalvik VM的特點,Dalvik VM和JVM的比較
10.2 Dalvik VM的內(nèi)存分布及OOM(Out of Memory)的根本原因和解決方案是什么?
10.3 Preload Classes和 Preload Resources,ClassLoader到底在哪里?
10.4 Dalvik與Java和C/C++
11:Android中的JNI編程
11.1 Java調(diào)用C/C++
11.2 JNIEnv、JVM、JObject揭秘
11.3 C/C++創(chuàng)建Java對象、調(diào)用Java屬性和方法
11.4 JNI中的多線程編程
11.5 Facade Pattern在JNI中絕妙應(yīng)用剖析
11.6 PnP(Plug and Play)
12:Android中的NDK編程
12.1 NDK與JNI關(guān)系揭秘
12.2 NDK開發(fā)的流程
12.3 采用NDK方式開發(fā)出的程序安裝和運行的內(nèi)幕
12.4 NDK中的Java與C/C++相互調(diào)用
12.5 NDK中的多線程編程
12.6 關(guān)于Android軟件開發(fā)的標準化和可替換性揭秘
13:SystemServer與Framework中的Service
13.1 Zygote與SystemServer
13.2 SystemServer開啟Java世界的過程揭秘
13.3 Android Service和Native Service是如何關(guān)聯(lián)起來的?
13.4 Android Service與ServiceManager
13.5 如何把自己的服務(wù)加入到ServiceManager中?
14:把Java寫的 Service加入到Applciation Framework中
14.1 IInterface與CTS
14.2 Binder
14.3 AIDL
14.4 Java Service與Manager
14.5 SystemServer、ServiceManager
15:Android框架移植移植時的事件驅(qū)動機制
15.1 Android Service是如何應(yīng)對硬件阻塞的?
15.2 開辟新的子線程并不斷的poll
15.3 Listener注冊
15.4 Callback
15.5 Application Framework中的Handler、Message、Looper、MessageQueue、
15.6 事件驅(qū)動機制實例
16:Manager、Service和完整的數(shù)據(jù)流
16.1.Manager和Service分離的原則
16.2.ANR問題
16.3.阻塞式的操作和非阻塞式操作
16.4.以實例說明Android中的從最底層到最上層的數(shù)據(jù)流
17:Android軟、硬、云三位一體整合
17.1 從技術(shù)角度揭秘云,包括云的關(guān)鍵技術(shù)和實現(xiàn)方法
17.2 在Native Service中整合Android與云
17.3 在Application Framework中整合Android與云
17.4 Android軟、硬、云三位一體整合,包括模式、策略、實現(xiàn)技術(shù)
18:Android Application Framwork和App的關(guān)系
18.1 Framework和App的具體關(guān)系是什么?
18.2 Framework和App的交互過程?
18.3 Framework如何掌控App的?
18.4 Framework與Android的四大組件;
19:Android Application Framwork和App的關(guān)系
19.1 Framework和App的具體關(guān)系是什么?
19.2 Framework和App的交互過程?
19.3 Framework如何掌控App的?
19.4 Framework與Android的四大組件;
20: Handler、Looper、Message、MessageQueue
20.1 Android的事件驅(qū)動模型
20.2 Looper、MessageQueue、Hanlder、Message等源碼深度剖析
20.3 Looper、MessageQueue、Hanlder、Message及多線程實戰(zhàn)案例
21:AsyncTASK異步線程技術(shù)
21.1 使用AsyncTask的原因及對AsyncTask的思考
21.2 AsyncTask代碼示例
21.3 AsyncTask源碼剖析
22:ActivityManagerService原理與核心架構(gòu)解析
22.1 AMS的架構(gòu)解析和main剖析
22.2 AMS啟動一個Process架構(gòu)解析源碼剖析
22.3 AMS啟動Activity、Service、Broadcast、ContentProvider架構(gòu)解析與源碼剖析
22.4 Proxy-Stub
23:WindowManagerService原理與核心架構(gòu)解析
23.1 WindowManagerService架構(gòu)解析
23.2 Window創(chuàng)建過程分析
23.3 Activity與WindowManagerService交互
23.4 WindowManagerService下的SurfaceFlinger
23.5 窗口的繪制和改變?nèi)檀a解析
24:Dalvik虛擬機架構(gòu)設(shè)計和實現(xiàn)徹底剖析
24.1 Dalvik虛擬機啟動過程剖析
24.2 Dalvik虛擬機運行過程剖析
24.3 Dalvik的C/C++與Java交互的JNI方法注冊過程剖析
24.4 Dalvik關(guān)于進程和線程創(chuàng)建與管理剖析
25:源碼:通過Binder、ServiceManager、BpBinder、BnBinder、AIDL貫通Android整個體系的架構(gòu)核心(120分鐘)
25.1 源碼剖析Service Manager是如何成為一個守護進程的?
25.2 源碼剖析Server和Client是如何獲得Service Manager接口的?
25.3 源碼剖析Server是如何把自己的服務(wù)啟動起來的?Service Manager在Server啟動的過程中是如何為Server提供服務(wù)的?
25.4 源碼剖析Service Manager是如何為Client提供服務(wù)的?
25.5 Android系統(tǒng)進程間通信Binder機制在應(yīng)用程序框架層的Java接口源代碼分析