400-888-5228

課程介紹:

如何理解Android架構(gòu)設(shè)計(jì)的初心并開(kāi)發(fā)出搭載Android系統(tǒng)并且具備深度定制和軟硬整合能力特色產(chǎn)品,是本課程解決的問(wèn)題。

課程以Android的五大核心:HAL、Binder、Native Service、Android Service(并以AMS和WMS為例)、View System為主軸,一次性徹底掌握Android的精髓。

之所以是開(kāi)發(fā)Android產(chǎn)品的必修課,緣起于:

1,HAL是Android Framework & Application與底層硬件整合的關(guān)鍵技術(shù)和必修技術(shù);

2,Native Service 對(duì)上層來(lái)說(shuō)代表了硬件,是Android底層真正的精髓;

3,Android Service是應(yīng)用程序的控制核心,應(yīng)用程序的一切行為均有Android Service掌控;

4,Binder 是Android系統(tǒng)運(yùn)行的基石,不掌握Binder就永遠(yuǎn)無(wú)法掌握Android;

5,View系統(tǒng)的差異化對(duì)消費(fèi)者而言是Android產(chǎn)品核心競(jìng)爭(zhēng)力之一,蘋(píng)果和三星是這方面成功的經(jīng)典案例;

通過(guò)Android五大核心的洗禮,從而完全具備Android系統(tǒng)二次開(kāi)發(fā)和改造能力,進(jìn)而開(kāi)發(fā)出極具特色的Android產(chǎn)品。

 

課程特色:

建立360度的Android產(chǎn)品研發(fā)能力和解決問(wèn)題的能力,能夠獨(dú)立開(kāi)發(fā)并深度定制出搭載Android系統(tǒng)的產(chǎn)品;

貫通Android軟硬整合和HTML5端云整合技術(shù)整個(gè)體系;

全程案例驅(qū)動(dòng),重在剖析案例代碼背后的設(shè)計(jì)思維和商業(yè)密碼;

徹底掌握Android HAL的背后的密碼;

徹底掌握Android HAL的實(shí)現(xiàn)機(jī)制和技術(shù)

徹底掌握Android Framwork的背后的密碼

徹底掌握Android Framwork的設(shè)計(jì)思維和理念

揭秘Android系統(tǒng)的運(yùn)行的基石Binder

以Camera實(shí)例來(lái)徹底剖析Native Service和Binder

徹底實(shí)戰(zhàn)編寫(xiě)Andorid應(yīng)用程序的一切技術(shù)

掌握HTML5技術(shù)的源泉和精髓

 

課程長(zhǎng)度:

3天

 

 

課程對(duì)象:

  1. ??? 手機(jī)、平板、智能電視、車(chē)載系統(tǒng)、智能家居設(shè)備(例如微波爐、防盜門(mén)、電冰箱)等所有想使用Android的硬件廠商;
  2. ??? 對(duì)Android軟硬整合感興趣的人員;
  3. ??? 希望迅速了解和掌握Android應(yīng)用和底層技術(shù)的人員;
  4. ??? Android底層開(kāi)發(fā)者;
  5. ??? Android框架設(shè)計(jì)和開(kāi)發(fā)者;
  6. ??? Android產(chǎn)品架構(gòu)師;
  7. ??? Android系統(tǒng)架構(gòu)師;
  8. ??? Android應(yīng)用程序開(kāi)發(fā)者;
  9. ??? 欲從事HTML5系統(tǒng)工作的人員(瀏覽器的開(kāi)發(fā)、PhoneGap的的Plugin開(kāi)發(fā)等)
  10. 希望從事移動(dòng)終端開(kāi)發(fā)的愛(ài)好者、工程師、程序員、以及相關(guān)行業(yè)的工程技術(shù)人員

 

課程大綱:

1:Android架構(gòu)揭秘

1,1 Google是如何通過(guò)Android支持、掌控全球的硬件廠商和應(yīng)用程序開(kāi)發(fā)者的?

1,2 Android控制力的源泉是什么?技術(shù)上如何實(shí)現(xiàn)?

1,3 Android的Linux Kernal、HAL、Libararies、Runtime、Application Framework設(shè)計(jì)的理念和實(shí)現(xiàn)技術(shù);

1.4 Android平臺(tái)與硬件、云的微妙關(guān)系;

2:Android開(kāi)機(jī)流程揭秘

2,1 第一個(gè)用戶(hù)進(jìn)程剖析;

2,2 ServiceManager與Binder的關(guān)系;

2,3 Zygote揭秘及其運(yùn)作方式;

2,4 Android中的第一個(gè)Java進(jìn)程揭秘,第一個(gè)Java進(jìn)程和ServiceManager的關(guān)系及代碼實(shí)現(xiàn);

3:Android中啟動(dòng)一個(gè)新的應(yīng)用程序揭秘

3,1 當(dāng)我們觸摸Android屏幕中Launcher上的一個(gè)應(yīng)用程序的圖標(biāo)的時(shí)候到底發(fā)生怎樣的調(diào)用過(guò)程?

3,2 應(yīng)用程序的執(zhí)行入口到底在哪里?

3.3 一個(gè)新的Android應(yīng)用程序的進(jìn)程到底是怎么產(chǎn)生的?

4:HAL揭秘

4.1 HAL被加入Android中的真正歷史原因分析

4.2 HAL的意外價(jià)值揭秘

4.3 HAL的Stub

4.4 hw_module_t與hw_device_t

4.5 C語(yǔ)言如何實(shí)現(xiàn)繼承來(lái)滿足HAL Stub的設(shè)計(jì)目的?包括內(nèi)存結(jié)構(gòu)分析和代碼風(fēng)格討論等

4.6 如何避免HAL Stub實(shí)現(xiàn)時(shí)的Dirty Code?

5:HAL Stub實(shí)戰(zhàn)

5.1 用面向?qū)ο蟮乃枷敕治?、設(shè)計(jì)、實(shí)現(xiàn)Stub

5.2 hw_module_t的子類(lèi)和hw_device_t的子類(lèi)的關(guān)系以及這種關(guān)系的優(yōu)勢(shì)

5.3 在結(jié)構(gòu)體中如何實(shí)現(xiàn)C函數(shù)的調(diào)用?hw_module_t的子類(lèi)在代碼中又是如何和hw_device_t的子類(lèi)交互的?

5.4 類(lèi)型轉(zhuǎn)換問(wèn)題

6:HAL和Linux Kernel

6.1 HAL Stub訪問(wèn)和控制硬件

6.2 Android下的Linux Kernel剖析

6.3 Android 硬件的Driver

6.4 訪問(wèn)Linux內(nèi)核空間的Driver

7:Service與HAL Stub整合

7.1 以面向服務(wù)的觀點(diǎn)和方式與HAL交互

7.2 Library的中so庫(kù)文件的類(lèi)型及C/S結(jié)構(gòu)剖析

7.3 hw_get_module

7.4 獲取HAL Stub對(duì)象的代碼流程剖析

7.5 為何HAL Stub的open方法必須提供supporting API(對(duì)設(shè)備的操作接口)給runtime;

8:Service、ServiceManager和Binder交互關(guān)系揭秘

8.1 Binder的第一號(hào)服務(wù)是誰(shuí)?為何要這樣設(shè)計(jì)和實(shí)現(xiàn)?

8.2 如何編寫(xiě)Service

8.3 新的Service產(chǎn)生與ServiceManager和Binder交互流程

8.4 如何獲取一個(gè)Service?

8.5 Binder的生產(chǎn)者與消費(fèi)者模式剖析

9:Binder與Shared Memory

9.1 Binder源代碼剖析

9.2 Shared Memory剖析

9.3 Binder是如何使用共享內(nèi)存來(lái)完成進(jìn)程間通信的?

9.4 從代碼的角度來(lái)分析Binder使用Shared Memory的生產(chǎn)者與消費(fèi)者模式

10:Dalvik VM

10.1 Dalvik VM的特點(diǎn),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對(duì)象、調(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開(kāi)發(fā)的流程

12.3 采用NDK方式開(kāi)發(fā)出的程序安裝和運(yùn)行的內(nèi)幕

12.4 NDK中的Java與C/C++相互調(diào)用

12.5 NDK中的多線程編程

12.6 關(guān)于Android軟件開(kāi)發(fā)的標(biāo)準(zhǔn)化和可替換性揭秘

13:SystemServer與Framework中的Service

13.1 Zygote與SystemServer

13.2 SystemServer開(kāi)啟Java世界的過(guò)程揭秘

13.3 Android Service和Native Service是如何關(guān)聯(lián)起來(lái)的?

13.4 Android Service與ServiceManager

13.5 如何把自己的服務(wù)加入到ServiceManager中?

14:把Java寫(xiě)的 Service加入到Applciation Framework中

14.1 IInterface與CTS

14.2 Binder

14.3 AIDL

14.4 Java Service與Manager

14.5 SystemServer、ServiceManager

15:Android框架移植移植時(shí)的事件驅(qū)動(dòng)機(jī)制

15.1 Android Service是如何應(yīng)對(duì)硬件阻塞的?

15.2 開(kāi)辟新的子線程并不斷的poll

15.3 Listener注冊(cè)

15.4 Callback

15.5 Application Framework中的Handler、Message、Looper、MessageQueue、

15.6 事件驅(qū)動(dòng)機(jī)制實(shí)例

16:Manager、Service和完整的數(shù)據(jù)流

16.1.Manager和Service分離的原則

16.2.ANR問(wèn)題

16.3.阻塞式的操作和非阻塞式操作

16.4.以實(shí)例說(shuō)明Android中的從最底層到最上層的數(shù)據(jù)流

17:Android軟、硬、云三位一體整合

17.1 從技術(shù)角度揭秘云,包括云的關(guān)鍵技術(shù)和實(shí)現(xiàn)方法

17.2 在Native Service中整合Android與云

17.3 在Application Framework中整合Android與云

17.4 Android軟、硬、云三位一體整合,包括模式、策略、實(shí)現(xiàn)技術(shù)

18:Android Application Framwork和App的關(guān)系

18.1 Framework和App的具體關(guān)系是什么?

18.2 Framework和App的交互過(guò)程?

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的交互過(guò)程?

19.3 Framework如何掌控App的?

19.4 Framework與Android的四大組件;

20: Handler、Looper、Message、MessageQueue

20.1 Android的事件驅(qū)動(dòng)模型

20.2 Looper、MessageQueue、Hanlder、Message等源碼深度剖析

20.3 Looper、MessageQueue、Hanlder、Message及多線程實(shí)戰(zhàn)案例

21:AsyncTASK異步線程技術(shù)

21.1 使用AsyncTask的原因及對(duì)AsyncTask的思考

21.2 AsyncTask代碼示例

21.3 AsyncTask源碼剖析

22:ActivityManagerService原理與核心架構(gòu)解析

22.1 AMS的架構(gòu)解析和main剖析

22.2 AMS啟動(dòng)一個(gè)Process架構(gòu)解析源碼剖析

22.3 AMS啟動(dòng)Activity、Service、Broadcast、ContentProvider架構(gòu)解析與源碼剖析

22.4 Proxy-Stub

23:WindowManagerService原理與核心架構(gòu)解析

23.1 WindowManagerService架構(gòu)解析

23.2 Window創(chuàng)建過(guò)程分析

23.3 Activity與WindowManagerService交互

23.4 WindowManagerService下的SurfaceFlinger

23.5 窗口的繪制和改變?nèi)檀a解析

24:Dalvik虛擬機(jī)架構(gòu)設(shè)計(jì)和實(shí)現(xiàn)徹底剖析

24.1 Dalvik虛擬機(jī)啟動(dòng)過(guò)程剖析

24.2 Dalvik虛擬機(jī)運(yùn)行過(guò)程剖析

24.3 Dalvik的C/C++與Java交互的JNI方法注冊(cè)過(guò)程剖析

24.4 Dalvik關(guān)于進(jìn)程和線程創(chuàng)建與管理剖析

25:源碼:通過(guò)Binder、ServiceManager、BpBinder、BnBinder、AIDL貫通Android整個(gè)體系的架構(gòu)核心(120分鐘)

25.1 源碼剖析Service Manager是如何成為一個(gè)守護(hù)進(jìn)程的?

25.2 源碼剖析Server和Client是如何獲得Service Manager接口的?

25.3 源碼剖析Server是如何把自己的服務(wù)啟動(dòng)起來(lái)的?Service Manager在Server啟動(dòng)的過(guò)程中是如何為Server提供服務(wù)的?

25.4 源碼剖析Service Manager是如何為Client提供服務(wù)的?

25.5 Android系統(tǒng)進(jìn)程間通信Binder機(jī)制在應(yīng)用程序框架層的Java接口源代碼分析