系統(tǒng)原理與開發(fā)要點(diǎn)詳解技術(shù)_第1頁
系統(tǒng)原理與開發(fā)要點(diǎn)詳解技術(shù)_第2頁
系統(tǒng)原理與開發(fā)要點(diǎn)詳解技術(shù)_第3頁
系統(tǒng)原理與開發(fā)要點(diǎn)詳解技術(shù)_第4頁
系統(tǒng)原理與開發(fā)要點(diǎn)詳解技術(shù)_第5頁
已閱讀5頁,還剩455頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一部基礎(chǔ)知第一部基礎(chǔ)知第一部第一部基礎(chǔ)知Android是包括一個(gè)操作第一部基第一部基礎(chǔ)知第一部基第一部基礎(chǔ)知第一部基礎(chǔ)知開放第一部基礎(chǔ)知開放源代碼用于移植制作手豐富的資用于開發(fā)上層應(yīng)應(yīng)用程序的交易場第一部第一部基礎(chǔ)知未來智能電話的發(fā)展方向媒體獲取設(shè)概念性產(chǎn)第一部基礎(chǔ)知第一部基礎(chǔ)知Android技術(shù)上的優(yōu)勢使用眾多的標(biāo)準(zhǔn)化技核心技術(shù)完整,統(tǒng)完善SDK和文完善的輔助開發(fā)工第一部基礎(chǔ)知Android第一部基礎(chǔ)知AndroidAndroid技術(shù)上的優(yōu)勢使用眾多的標(biāo)準(zhǔn)化技核心技術(shù)完整,統(tǒng)AndroidAndroid完善SDK和文完善的輔助開發(fā)工Android移植開發(fā)手機(jī)系統(tǒng)應(yīng)用程序開發(fā)Android系統(tǒng)開發(fā)第二部Android的開發(fā)工第二部Android的開發(fā)工②①手機(jī)Android系統(tǒng)手機(jī)系標(biāo)準(zhǔn)uAndroid系統(tǒng)手機(jī)系標(biāo)準(zhǔn)uAndroid系統(tǒng)Android系統(tǒng)AndroidAndroid系統(tǒng)開發(fā):系統(tǒng)用戶空內(nèi)核空AndroidAndroid系統(tǒng)開發(fā):系統(tǒng)用戶空內(nèi)核空AndroidSDKAndroidSDK第三部AndroidSDK第三部AndroidSDK與源代用于應(yīng)用開發(fā)JAVA應(yīng)用程序。第三部AndroidSDK與第三部AndroidSDK與源代AndroidSDKAndroid的AndroidSDKAndroid的知識結(jié)構(gòu)(SDK方面語言知應(yīng)用程序架GUI設(shè)計(jì)基礎(chǔ)知各種視圖的使圖形應(yīng)用程序的設(shè)計(jì)思AndroidSDKAndroidSDKLinux操作系統(tǒng)知Linux內(nèi)核知識(C語言)Linux驅(qū)動程序知識(C語言)Dalvik虛擬機(jī)(C++JAVA)GUI系統(tǒng)(C++JAVA音頻、視頻和多媒體(C語言、C++JAVA連接部分(C語言CJAVA)傳感器部分(C語言CJAVA)Android的應(yīng)用開Android預(yù)系統(tǒng)應(yīng)用Android手AndroidAndroid框架層軟硬件抽象硬Android的應(yīng)用開Android預(yù)系統(tǒng)應(yīng)用Android手AndroidAndroid框架層軟硬件抽象硬件抽象AndroidTouch/HW AndroidTouch/HW JavaJavaNativeNative Camera AndroidAndroidAndroid系統(tǒng)Android系統(tǒng)概第一部第二部第三部基礎(chǔ)知Android的開發(fā)工AndroidSDK與源代第一部基礎(chǔ)知第一部基礎(chǔ)知第一部第一部基礎(chǔ)知Android是包括一個(gè)操作第一部基第一部基礎(chǔ)知第一部基第一部基礎(chǔ)知第一部基礎(chǔ)知開放第一部基礎(chǔ)知開放源代碼用于移植制作手豐富的資用于開發(fā)上層應(yīng)應(yīng)用程序的交易場第一部第一部基礎(chǔ)知未來智能電話的發(fā)展方向媒體獲取設(shè)概念性產(chǎn)第一部基礎(chǔ)知第一部基礎(chǔ)知Android技術(shù)上的優(yōu)勢使用眾多的標(biāo)準(zhǔn)化技核心技術(shù)完整,統(tǒng)完善SDK和文完善的輔助開發(fā)工第一部基礎(chǔ)知Android第一部基礎(chǔ)知AndroidAndroid技術(shù)上的優(yōu)勢使用眾多的標(biāo)準(zhǔn)化技核心技術(shù)完整,統(tǒng)AndroidAndroid完善SDK和文完善的輔助開發(fā)工Android移植開發(fā)手機(jī)系統(tǒng)應(yīng)用程序開發(fā)Android系統(tǒng)開發(fā)第二部Android的開發(fā)工第二部Android的開發(fā)工②①手機(jī)Android系統(tǒng)手機(jī)系標(biāo)準(zhǔn)uAndroid系統(tǒng)手機(jī)系標(biāo)準(zhǔn)uAndroid系統(tǒng)Android系統(tǒng)AndroidAndroid系統(tǒng)開發(fā):系統(tǒng)用戶空內(nèi)核空AndroidAndroid系統(tǒng)開發(fā):系統(tǒng)用戶空內(nèi)核空AndroidSDKAndroidSDK第三部AndroidSDK第三部AndroidSDK與源代用于應(yīng)用開發(fā)JAVA應(yīng)用程序。第三部AndroidSDK與第三部AndroidSDK與源代AndroidSDKAndroid的AndroidSDKAndroid的知識結(jié)構(gòu)(SDK方面語言知應(yīng)用程序架GUI設(shè)計(jì)基礎(chǔ)知各種視圖的使圖形應(yīng)用程序的設(shè)計(jì)思AndroidSDKAndroidSDKLinux操作系統(tǒng)知Linux內(nèi)核知識(C語言)Linux驅(qū)動程序知識(C語言)Dalvik虛擬機(jī)(C++JAVA)GUI系統(tǒng)(C++JAVA音頻、視頻和多媒體(C語言、C++JAVA連接部分(C語言CJAVA)傳感器部分(C語言CJAVA)Android的應(yīng)用開Android預(yù)系統(tǒng)應(yīng)用Android手AndroidAndroid框架層軟硬件抽象硬Android的應(yīng)用開Android預(yù)系統(tǒng)應(yīng)用Android手AndroidAndroid框架層軟硬件抽象硬件抽象AndroidTouch/HW AndroidTouch/HW JavaJavaNativeNative Camera AndroidAndroidAndroidAndroidAndroidAndroid的系統(tǒng)架Android源代碼的開發(fā)環(huán)第一部第二部AndroidAndroidAndroid軟件結(jié)第四層軟件結(jié)第四層Java應(yīng)用程第三層Java框第二層本地框架和Java第一層Linux操作系統(tǒng)及驅(qū)/C實(shí)現(xiàn)34Java代碼實(shí)現(xiàn)。12Linux操作系統(tǒng)的角1234Android3層次以下的內(nèi)容是不可見的,僅考慮系統(tǒng)API即可。軟件結(jié)Linux操作系統(tǒng)和驅(qū)動:軟件結(jié)Linux操作系統(tǒng)和驅(qū)動:的核心系統(tǒng)服務(wù)內(nèi)核,如安賴性,內(nèi)存管理,進(jìn)程管理網(wǎng)絡(luò)內(nèi)核議棧和驅(qū)動模型同時(shí)作為硬件和軟件棧之間的抽層軟件結(jié)Android本地框架(C/C):軟件結(jié)Android本地框架(C/C):C繼承來的標(biāo)準(zhǔn)CPacketVideoOpenCORESurfaceManagerWebCorewebSGL:Skia2D3Dlibraries:基于OpenGLFreeType:位圖(bitmap)和矢量(vector)。軟件結(jié)運(yùn)行庫:Android軟件結(jié)運(yùn)行庫:Android行,都擁有一個(gè)獨(dú)立的Dalvik虛Dalvik虛擬機(jī)執(zhí)行(.dex)的Dalvik可執(zhí)行文件JAVASDKAndroid應(yīng)用程序框架Android應(yīng)用程序框架,包括列表(lists),網(wǎng)格(grids),文本框(textboxes),按鈕內(nèi)容提供器(ContentProviders):使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),或者共享它們自己的數(shù)據(jù)資源管理器(ResourceManager):如本地字符串,圖形,和布局文件layoutfiles)(NotificationManager):活動管理器ActivityManager)AndroidAndroid應(yīng)用程序:Android會同一系列核心應(yīng)用程序的應(yīng)用程序,主要包括email客戶程序都是使用JAVA語言編寫的。1.2Androidaapt(1.2Androidaapt(AndroidAssetPackagingTool進(jìn)制的assets。abd(AndroidDebugBridge,Android調(diào)試橋使用Adb工具可以在模擬器或設(shè)備上安裝應(yīng)用程序的.apk件,并從命令行訪問模擬器或設(shè)備。也可以用它把Android模器或設(shè)備上的應(yīng)用程序代碼和一個(gè)標(biāo)準(zhǔn)的調(diào)試器連接在android工具1.2AndroidAIDL1.2AndroidAIDL工具(AndroidInterfaceDescriptionLanguageAndroid接口描述語言),可以生成進(jìn)程間的接口的代碼,諸如service可能使用的接口AVDs(AndroidVirtualDevices,Android虛擬設(shè)備用于配置仿真器的選項(xiàng),使用實(shí)際的設(shè)備(DalvikDebugMonitorServiceDalvik調(diào)試監(jiān)視器服務(wù)這個(gè)工具集成了Dalvik,能夠在模擬器或者設(shè)備上管理進(jìn)蹤數(shù)據(jù),觀察堆(heap)和線程信息,截取模擬器或設(shè)備的屏幕面,還有更多的功能1.2Android1.2Android存在.dex文件中)。Android字節(jié)碼(Draw9-Draw9-patch工具允許使用所見即所得(WYSIWYG)的編輯器輕松地創(chuàng)建NinePatch圖形。模擬器Emulator它是在的計(jì)算機(jī)上運(yùn)行的一個(gè)虛擬移動設(shè)備??梢允褂闷鱽碓谝粋€(gè)實(shí)際的Android運(yùn)行環(huán)境下設(shè)計(jì),調(diào)試和測試的應(yīng)用程序HierarchyViewer(層級觀察器層級觀察器工具允許調(diào)試和優(yōu)化的用戶界面。它用可視的方把的視圖(view)的布局層次展現(xiàn)出來,此外還給當(dāng)前界面提供了一個(gè)具有像素柵格(grid)的放大鏡觀察器。1.2Android幫1.2Android幫助創(chuàng)建磁盤映像(diskimage),可以在模擬器環(huán)境下使用磁盤映像來模擬外部存儲卡(例如SD卡)。生為隨機(jī)的用戶事件流,例如點(diǎn)(click),觸(touch),揮手給正在開發(fā)的程序做隨機(jī)的,但可重復(fù)的壓力測試。(tracelog)轉(zhuǎn)換為圖形化的分析視AndroidAndroid運(yùn)行Git工具Repo工具Ubuntu獲取Android獲取Android完全的源代碼初始化代碼倉$repoinit-u獲取代$repo初始化指定的版本:$repoinit-u-brelease-$repoinit-u-bandroid-sdk-同步單個(gè)工程代碼:$repo同步單個(gè)工程代碼:$reposync獲取一個(gè)工程的代碼:$gitclonegit:///+project例如,獲取通用內(nèi)核的代碼:$gitclone2.1$repoinit-urepo...manifest...From2.1$repoinit-urepo...manifest...From**********************android-1.5->origin/android-1.5android-1.5r2->origin/android-1.5r2android-1.5r3->origin/android-1.5r3android-1.6_r1->origin/android-1.6_r1android-sdk-1.5-pre->origin/android-sdk-1.5-preandroid-sdk-1.5_r1->origin/android-sdk-1.5_r1android-sdk-1.5_r3->origin/android-sdk-1.5_r3android-sdk-1.6_r1->origin/android-sdk-1.6_r1cdma-import->origin/cdma-import->cupcake-release->origin/cupcake-->->release-1.0->origin/release-1.0android-1.5->android-1.5android-1.5r2->android-1.5r2android-1.5r3->android-1.5r3android-1.6_r1->android-1.6_r1->android-sdk-->android-sdk-->android-sdk-From*[newandroid-1.0->android-repoinit之后,repoinit之后,將生成隱藏目.repo,其中文repo時(shí)repo/manifest.xml中的path表示工程獲取后的路徑(基于當(dāng)前目錄),name表示工程的名稱。提交代碼Android代碼:提交代碼的流程:$提交代碼Android代碼:提交代碼的流程:$repostart{branch_name}$gitadd$gitcommit{file_path}$repoupload提交的網(wǎng)頁:/#change,{change核心工程(核心工程(CoreProject擴(kuò)展工程(包(Package核心工程libm核心工程libmlibdl,動態(tài)linkerbootloader/legacy:Build:dalvik:development:CBootloaderDalvik虛擬機(jī)Android核心的框架frameworks/policies/base:框架配置hardware/libhardwarekernel:prebuilt:system/core:硬件抽Linux內(nèi)LinuxMac編最小化可啟動底層調(diào)試和檢擴(kuò)展工程(1擴(kuò)展工程(1)::AdvancedEncryptionStandard::::::(JAVA)Http(主機(jī)目標(biāo)機(jī))(主機(jī))pythonjavaperlclib::::::動態(tài)主機(jī)設(shè)定協(xié)定的工具ssh2服務(wù)器和客戶(主機(jī))Ext2/3/4(主機(jī))ELF(主機(jī))ELF擴(kuò)展工程(2):擴(kuò)展工程(2): ::::::::::::(僅頭文件(主機(jī)目標(biāo)機(jī))XMLIEE754浮點(diǎn)GIFXtables(tables)”擴(kuò)展工程(擴(kuò)展工程(3): :::::::::::::::aportableforeignfunctioninterfacePNG(主機(jī)目標(biāo)機(jī))CXML解析庫CSSL(SecureSocketsLayer)Linux內(nèi)核支持的一種性能分析機(jī)ppp擴(kuò)展工程(4擴(kuò)展工程(4): :::::Sonic嵌入式的音樂合成器輕量級的SQL嵌入式數(shù)據(jù)庫(主機(jī)目標(biāo)機(jī))motorolaS-records16:::::::::(JAVA)HTML(主機(jī)目標(biāo)機(jī))XML(主機(jī)目標(biāo)機(jī))包(包括應(yīng)用程序,包(包括應(yīng)用程序,提供者和輸入法:Applications(package/appsAlarmClock,Browser,Calculator,Calendar,CameraContacts,Email,GoogleSearch,HTMLViewer,IMLauncher,Mms,Music,PackageInstaller,PhoneSettings,SoundRecorder,Stk,,,(package/ProvidersCalendarProvider,ContactsProvider,DownloadProviderDrmProvider,GoogleContactsProvider,GoogleSubscribedFeedsProvider,ImProvider,MediaProvider,SettingsProviderSubscribedFeedsProvider,2.2Android編譯2.2Android編譯中具有一Makefile,直接執(zhí)$ 2.2AndroidAndroid系統(tǒng)2.2AndroidAndroid系統(tǒng)編譯完成的結(jié)果全在其根目錄中沒有內(nèi)容out目錄中,在其他目編譯的結(jié)果目標(biāo)機(jī)映像文Linux內(nèi)核(需要單獨(dú)處)|||||||||||||||||||數(shù)據(jù)目錄[[根文件系統(tǒng)目錄符號的目錄主文件系統(tǒng)目錄[[[ AndroidAndroidAndroidVirtualAndroidEmulatorAndroid(Android虛擬設(shè)備)啟動界面啟動界面啟動界面啟動界面AndroidAndroid的桌面(HVGA-P:320×480AndroidAndroid的應(yīng)用主菜單在在Android中使用菜單拖拉到主界面的另外一屏拖拉到主界面的另外一屏logcatlogcat的選項(xiàng)包括:logcatlogcat的選項(xiàng)包括:--f-r-n-vf4log,<format>briefprocesstagthreadrawtimethreadtimelog----不阻('main((HVGA-L:480×320((QVGA-P:320×240((QVGA-L:320×2403.33.3AndroidSDK環(huán)Android1.6的模擬器環(huán)AndroidAndroidLinuxAndroidAndroidLinux第一部分Linux核心與驅(qū)第二部分Android專用驅(qū)第三部分Android使用的設(shè)備驅(qū)獲取通用內(nèi)核的代碼:$獲取通用內(nèi)核的代碼:$gitclone的kernel。AndroidLinuxAndroidLinux內(nèi)核的配置和編譯:處理器的編譯結(jié)果處理器的編譯結(jié)果為內(nèi)核ELFzImage為內(nèi)核的壓縮goldfish是一種ARM處goldfish是一種ARM處理器,核心內(nèi)容的路徑為arch/arm/mach-Android還需要在標(biāo)準(zhǔn)內(nèi)核中需要增加必要的驅(qū)動,用于對統(tǒng)用戶程序的支持。android中驅(qū)動主要分成兩種類型Android專用驅(qū)Android使用的設(shè)備驅(qū)AndroidAndroidAndroidAshmem匿名共享內(nèi)存Loggerlog驅(qū)BinderAndroidAshmem匿名共享內(nèi)存Loggerlog驅(qū)Binder驅(qū)動Driver):OpenBinder驅(qū)動,為Android的支能源管理(Management):Management(PM):定時(shí)器驅(qū)動,用于喚醒設(shè)KillerLow在缺少內(nèi)存的情況下,殺PMEM物理內(nèi)2.1Clibutil庫對AshemeAndroid的BinderAndroid的Binder層程序提供了IPC(進(jìn)程間通信)的支持,Android整個(gè)系統(tǒng)的運(yùn)行依賴Binder驅(qū)動10(在用戶空間libutil工具庫和ServiceManagerBinder接口提供對整個(gè)驅(qū)動程序?yàn)轵?qū)動程序?yàn)長og10(驅(qū)動Event輸入設(shè)備驅(qū)v4l2攝像頭-視頻驅(qū)OSS頻驅(qū)動ALSA音頻驅(qū)動MTD驅(qū)動藍(lán)牙驅(qū)Wlan3.1framebuffe3.1framebuffe3.1framebuffe文件接口調(diào)用用戶空內(nèi)核空調(diào)3.1framebuffe文件接口調(diào)用用戶空內(nèi)核空調(diào)注硬操硬件調(diào)注字符設(shè)備驅(qū)動程序核3.2Event輸入設(shè)備驅(qū)3.2Event輸入設(shè)備驅(qū)3.2Event文件接口調(diào)用用戶空內(nèi)核空調(diào)注硬操硬件調(diào)3.2Event文件接口調(diào)用用戶空內(nèi)核空調(diào)注硬操硬件調(diào)注字符設(shè)備驅(qū)動程序核Input驅(qū)動核3.3v4l23.3v4l2v4l2驅(qū)動主要頭文件路徑include/linux/videodev.hv4l第一版的頭文件include/linux/videodev2.h:定義主要的數(shù)據(jù)接口和常量v4l2驅(qū)動核心實(shí)現(xiàn)路徑:driver/media/video/v4l2-3.3v4l2文件接口調(diào)用V4L2驅(qū)動(v4l2-3.3v4l2文件接口調(diào)用V4L2驅(qū)動(v4l2-V4L2設(shè)備3.4OSS3.4OSSOSS驅(qū)動程序的主要頭文件include/linux/soundcard.hOSS驅(qū)動的主要頭文件OSS驅(qū)動程序的核心:3.4OSS文件接口調(diào)用調(diào)注硬操硬件調(diào)注3.4OSS文件接口調(diào)用調(diào)注硬操硬件調(diào)注字符設(shè)備驅(qū)動程序register_sound_OSS驅(qū)動核OSS設(shè)備號(14,3.5ALSA3.5ALSAArchitecture)高級Linux 主設(shè)備號為116,次設(shè)備號為各個(gè)設(shè)備。ALSA驅(qū)動程序的頭文件:include/sound/asound.hALSA驅(qū)動的主要頭文件include/sound/core.hALSA驅(qū)動核心數(shù)據(jù)結(jié)構(gòu)和具體驅(qū)動的注冊ALSA驅(qū)動程序的核心實(shí)現(xiàn)3.5ALSAALSA用戶空間接文件接口調(diào)內(nèi)核空接3.5ALSAALSA用戶空間接文件接口調(diào)內(nèi)核空接操硬件字符設(shè)備驅(qū)動程注冊snd_ctl_addALSA驅(qū)動核心用戶空ALSA設(shè)備號3.5MTD3.5MTDFlashMTD(memorydevice),內(nèi)存技術(shù)設(shè)備。13MTD源代碼路徑:drivers/mtd/mtdchar.c:MTD字符設(shè)備drivers/mtd/mtdblock.c:MTD塊設(shè)備3.5MTD調(diào)注MTD原始系3.5MTD調(diào)注MTD原始系藍(lán)牙的驅(qū)動程序一般都通過標(biāo)準(zhǔn)的HCI控制實(shí)CSR藍(lán)牙的驅(qū)動程序一般都通過標(biāo)準(zhǔn)的HCI控制實(shí)CSRBCSPCI對inx來說,一旦bluez可以使用HCI與芯片建立起通信(一般是+hciconfig),便可利用其上的標(biāo)準(zhǔn)協(xié)議SO,L2CAP等),與藍(lán)牙通信3.7Wlan3.7Wlan接WIFI驅(qū)動程序部分:AndroidAndroidAndroid第一部Android第一部第六部第七部底層庫和程序的結(jié)C語言底層Shell工Android的系統(tǒng)進(jìn)????Init進(jìn)程Shell中的包含帶有符號的庫(strip)includeincludeinclude$(BUILD_STATIC_LIBRARY)includeinclude$(BUILD_HOST_STATIC_LIBRARY)LOCAL_MODULE_PATH和LOCAL_MODULE_PATH和LOCAL_MODULE_PATH:=$(TARGET_ROOT_OUT)LOCAL_UNSTRIPPED_PATH:=$(TARGET_ROOT_OUT_UNSTRIPPED)TARGET_ROOT_OUTTARGET_OUT:TARGET_OUT_DATA:A.txt和C/CC/CNPTL線程庫。它還實(shí)現(xiàn)LinkerLoaderproperty系統(tǒng),這是享內(nèi)存的方式來實(shí)現(xiàn)維護(hù)property系統(tǒng)。工具功能。這是sockets.hAndroidproperties.h:Androidlog.hlogashmem.hatomic.hmq.hInitInit稱為init的可執(zhí)行程序。提供了以下的功能:InitinitInitinit的可執(zhí)行文件是系統(tǒng)運(yùn)行的第一個(gè)用戶空間的程序,以守護(hù)進(jìn)程的方式運(yùn)InitInitActions,Triggers,Services,Options,andsProperties字參考system/core/init/keyword.h。ShellShellconsole的件系統(tǒng)/system/bin/中的具有一些符號將連接到toolbox上。API也是C++Android的層次的ClibutilsI -I -Errors.hErrors.h定義宏表示錯Endian.h定義表示大小misc.h幾個(gè)字符串和文件相關(guān)的功能函TextOutput.hBufferedTextOutput.h:BufferedTextOutput,它是Pipe.hBuffer.h:List.h:定義鏈表的模TextOutput的實(shí)SharedBuffer.hSharedBuffer.h定義類SharedBuffer表示共享String16.hString8.h:定義表示單字節(jié)字符串的類String8,并包含了能String16轉(zhuǎn)換VectorImpl.hVector.h:定義繼承VectorImplVectorSortedVector.h:KeyedVector.h:定義使用關(guān)鍵字的向量模板threads.h定義線程相關(guān)的類,包括線Thread、互斥量Mutex、條件變量Condition、讀寫鎖ReadWriteLock等socket.hTimers.h:定義時(shí)間相關(guān)的函數(shù)和定時(shí)器類DurationTimerZipEntry.hZipFileCRO.hZipFile.hZipFileRO.h:zip功能相關(guān)的類kernelbinder驅(qū)動。kernelbinder驅(qū)動。ndrJAVAndrJAVA的服務(wù)器/客戶BndrC的服務(wù)器/客戶Javar框CPPr框的核心部rrr?r)Bnrdprep,r驅(qū)RefBase.hRefBase.hParcel.hIBinder.h:Binder.hBinder和:IInterface.h:進(jìn)程進(jìn)程②①程序框架部服務(wù)進(jìn)程進(jìn)程②①程序框架部服務(wù)器的實(shí)(具體實(shí)現(xiàn)功能(本地功能(代理功能IPermissionController.h且實(shí)現(xiàn)了BpPermisionController。classBpPermissionController:publicclassBpPermissionController:public{BpPermissionController(constsp<IBinder>&:{}virtualboolcheckPermission(constString16&int32_tpid,int32_t{Parceldata,reply;remote()->transact(CHECK_PERMISSION_TRANSACTION,data,&reply);if(reply.readInt32()!=0)return0;returnreply.readInt32()!=}AndroidAndroid/system/bin/servicemanagerservicemanagerzygotemediaserver這幾個(gè)進(jìn)程是Android系統(tǒng)運(yùn)行的基礎(chǔ)JAVAJAVA第一部分Dalvik虛擬第二部分AndroidJAVA程序環(huán)境第三部分JNI的使用第四部分系統(tǒng)服務(wù)的JAVA部Dalvik虛擬Dalvik虛擬DalvikAndroid(.dex)Dalvik可執(zhí)行文件,該格式文件針對小內(nèi)存使用做了優(yōu)化。同時(shí)虛擬機(jī)是基于寄存器的,所有的JAVASDK中的"dx".dex格式由虛擬機(jī)執(zhí)行。Dalvik虛Dalvik虛擬vm目錄中的內(nèi)容是虛擬機(jī)的實(shí)現(xiàn),由本地代碼實(shí)libdvm.co。CJAVA代碼,編譯的JAVAcore.jar。Dalvik虛擬nativehelperDalvik虛擬nativehelperJAVA調(diào)用的函數(shù),在其他的代碼中需要使用JAVAnativehelper庫的代碼路徑為:動態(tài)庫libnativehelper.so。nativehelper個(gè)庫的頭文件的路徑為:libnativehelper/include/nativehelper/JNIHelp.h:提供JNI注冊功能的頭文件AndroidJAVAAndroidJAVAAPI名稱相同的API功能,但這些API并AndroidJAVAAndroidJAVAandroidAndroidJAVAAndroidAndroidJAVAAndroidJAVA類的API<package><class><interface><implements><method><field>當(dāng)注釋中寫入的時(shí)候,就表示內(nèi)JAVA的源代AndroidJAVAAndroidJAVAAndroidJAVA<packageAndroidJAVA<package<classname="Activity"><!--省略內(nèi)<!--省略內(nèi)JNIJNIJavaNativeInterface的縮寫,中文為JAVAJava1.1JavaNativeJNIJNIJavaNativeInterface的縮寫,中文為JAVAJava1.1JavaNativeC可以調(diào)用C語言的程序。JNIJAVA的類型JNI的類型對應(yīng)的字母JAVA布爾類型(booleanjboolean(8位無符號ZJAVA字節(jié)(bytejbyte(JNIJAVA的類型JNI的類型對應(yīng)的字母JAVA布爾類型(booleanjboolean(8位無符號ZJAVA字節(jié)(bytejbyte(8位有符號BJAVA字符(charjchar(16位無符號CJAVA短整型(shoutjshort(16位有符號SJAVA整型(intjint(32位有符號IJAVA長整型(longjlong(64位有符號JJAVA單精度浮點(diǎn)(floatjfloat(IEEE75432位FJAVA雙精度?。╠oublejdouble(IEEE75464DJAVAjobjctLVAndroidAndroi系統(tǒng)在AndroidJNIAndroidAndroi系統(tǒng)在AndroidJNIAndroid中JAVA的類都native的接口,這些。(聲明本地接口3.1JNI在Android3.1JNI在AndroidJNI的代碼在以下的路徑中:frameworks/base/core/jni/libandroid_runtime.so,這就是一個(gè)普通的動態(tài)庫,被放置在目標(biāo)系統(tǒng)的/system/lib目錄中。AndroidJNIframeworks/base/media/jni/中,被編譯成為庫libmedia_jni.so。3.1JNI3.1JNI其命名一般和對應(yīng)支持的JAVA類有對應(yīng)關(guān)系。這種關(guān)在AndroidJNIlibnativehelper.so在應(yīng)用程序的Apk包中實(shí)現(xiàn)JNIJNIJNIJNIJNICodeJNIRegister初始化部分執(zhí)行的代碼JAVAApplicationCode3.4JNI3.4JNI3.4JNI3.4JNI3.4JNI3.4JNI3.4JNI3.4JNI3.4JNI3.4JNIJAVABinder<<接口<<接口<<接口<<接口<<接口<<接口zygote是通過init進(jìn)程讀取init.rc啟動servicezygote/system/bin/app_process-/system/bin--zygote--start-system-serversocketzygotestream666onrestartwrite/sys/android_power/request_statewakeonrestartwrite/sys/power/stateonAndroid的Android的GUIAndroidGUIAndroidGUIAndroidGUI系統(tǒng)綜pixelflingerlibuiSurface系Skia系OpenGL系統(tǒng)架第一部第五部第六部AndroidGUI各種GUI元androivie.VieandrovAndroidGUI各種GUI元androivie.VieandrovieSurfaceJAVA框Skia圖形引OpenGL3D引AndroidGUIAndroidGUIAndroidGUIAndroidGUI(pixelflingerlibuipixelflingerlibuilibpixelflingner.so是一個(gè)下層的工具性的類,這個(gè)類對外的主要內(nèi)容是GGLContextlibpixelflingner.so是一個(gè)下層的工具性的類,這個(gè)類對外的主要內(nèi)容是GGLContext結(jié)構(gòu),以及初始化和中樞,也是整個(gè)GUI系統(tǒng)的中樞。UI中樞,也是整個(gè)GUI系統(tǒng)的中樞。UIlib(→libpixelflinger口,按鍵及事件處理,Suface界OverlayCameraformat部分:format部分:EglWindows部分:包含了EGL頭文件構(gòu)建的egl_native_window_t,它依OpenGLlibEGLEGLDisplaySurface操作了硬件的framebuffer的驅(qū)動。這也是整個(gè)系統(tǒng)顯示的基Key/Event部分:這是AndroidSurfaceSurfaceSurfaceSurfaceOverlayCamera2.3Android2.3AndroidAndroidframebuffer驅(qū)動程序之間的適配層(硬件抽象輸出部分的硬件抽象(donut之前):2.3Android2.3Android2.3Android2.3Android2.3Android2.3Android2.3Android2.3Androidgrallocpmem的實(shí)現(xiàn)。2.3Android2.3Androidgralloc設(shè)備。2.4Android2.4Android包的View2.4AndroidTouch/Mouse/2.4AndroidTouch/Mouse/2.4Android2.4Android輸入部分的硬件抽象:KeyCodeLabel.handroid/view/KeyEvent.javaqwert.kl鍵盤布局文件2.4Android2.4Android2.4Android2.4Android2.4Android是DEFGHABC2.4Android是DEFGHABC2.4Android2.4AndroidRawInputEvent轉(zhuǎn)換成KeyEvent2.4Android2.4Android::X:Y:W:H:0x1:SurfaceFlinger的和JniSurfaceSurface系統(tǒng)結(jié)Surfacelibui.so提供Surface接口。libsurfacefilnger.so提供實(shí)現(xiàn)。Java框架層次UINavtive(本地調(diào)用)部分主要ISurface+bootFinished+bootFinishedSurface系統(tǒng)的頭文件Surface系統(tǒng)的頭文件Surface系統(tǒng)的源代碼文件(路徑為::SurfaceFlinger類繼承了ISurfaceComposer,是一個(gè)核心的實(shí)現(xiàn)classISurfaceComposer:public{enum{//(keepinsyncwithclassISurfaceComposer:public{enum{//(keepinsyncwith===eDestroyBackbuffer====enum=====/*......*/enum{=/*......*/enum{=/*......}代碼的路徑代碼的路徑:classLayerBaseClient:publicLayerBaseclassSurface:publicBnSurfaceclassLayer:publicclassLayerBuffer:publicclassSurfaceBuffer:publicLayerBaseClient::SurfaceclassLayerDim:publicLayerBaseClientclassLayerBlur:public ForCreateaSurface:(ISurface→Suface,→(IsurfaceFlingerClient::→Bclient::createSurface→SurfaceFlinger::createSurfaceLayerBaseClient*layer=0;sp<LayerBaseClient::Surface>surfaceHandle;eFXSurfaceNormal→LayerorLayerBuffereFXSurfaceBlur→LayerBlureFXSurfaceDim→LayerDimsurfaceHandle=layer-For→的和Jniz--的和Jniz--的和Jni的和JniJNICode的和Jni代碼的路徑的和Jni代碼的路徑:的和Jni3SurfaceView(SurfaceView.java)的和Jni3SurfaceView(SurfaceView.java)1:SurfaceHolderandroid.view.Surface表示了一個(gè)可以繪制圖形的界的和Jni的和JniUIwidgets(GUI)ViewSurfaceonDraw(Canvas)事件第四部AndroidJNIAndroidSkiaandroid統(tǒng)Java框C框架SkiaSGL(SkiaGraphicSkiaAndroidandroiSkiaandroid統(tǒng)Java框C框架SkiaSGL(SkiaGraphicSkiaAndroidandroi.grphic.*nroveSracenrovieVieSkia底層Skia底層SkiaGoogle一個(gè)底層的圖形,圖像,動畫,SVG,文本等多方面的圖形庫,它是Android中圖形系統(tǒng)的引擎。???CoreCg:GL(SkiaGraphicLib):skia-openglgluelibrary:Skia底層Skia底層核心圖形庫:libcorecg.so?Skia?skia-openglgluelibrary:AndroidJNIAndroid的AndroidJNIAndroid的圖形系統(tǒng)和Skia底層庫Android的圖形系統(tǒng)聯(lián)系比較緊密JNI提供了Skia底層庫JAVA上層支持Android的圖形系統(tǒng)JNI代碼的路Android的圖形系統(tǒng)JAVA層提供了繪制基本圖形的功能,是GUI系統(tǒng)的基AndroidJNICavAndroidJNICavscp是J中核心的接口,上層類提供了支持Androidandroid.graphic,JNIJAVA個(gè)類:個(gè)類:android.graphics.Canvas。Canvas類處理(draw)內(nèi)容的時(shí)候4個(gè)基本的組件:一個(gè)保ABitmap,一個(gè)處理繪制調(diào)用的Canvas(寫bitmapRect,Path,textBitmap)OpenGLOpenGLOpenGLOpenGL的aiveOpenGLJAVAJNIOpenGL系OpenGL引vOpenGL系OpenGL引vMegl_native的aive的aive(EGL庫(OpenGLES庫的封裝(的軟件實(shí)現(xiàn)庫的aive的aive測試代碼的路徑Surface的代: 5.2OpenGLNative5.2OpenGLNativeOpenGLES25.2OpenGLNative5.2OpenGLNative實(shí)現(xiàn)libGLES_android.so,通常作為加載的一個(gè)庫。另外還可以選擇加載硬件實(shí)現(xiàn)的OpenGL庫。的a的aive的a的aiveOpenGLJAVAJNIOpenGLJAVAJNIOpenGLJAVA(GL10.javaGL11.java))com.google.android.gles_jniJNI:OpenGLJAVAJNIOpenGLJAVAJNIJAVA代碼:(GL10.javaGL11.java)com.google.android.gles_jni(AndroidGLES的實(shí))JNI代碼:com.google.android.gles_jniOpenGLJAVAJNIOpenGLJAVAJNIandroid.opengl的代碼路徑OpenGLJAVAOpenGLJAVAJNIpublicclassXXXActivityextends{protectedvoidonCreate(Bundle{super.onCreate(savedInstanceState);mGLSurfaceView=newXXXGlSurfaceView(this);}privateGLSurfaceView}classXXXGlSurfaceViewextendsGLSurfaceViewprivateclassCubeRendererimplementsGLSurfaceView.Renderer /*...}AndroidAudioAndroidAudioAndroidAndroidAudio系第一部分Audio系統(tǒng)綜第二部分Audio系統(tǒng)和上層接第三部分Audio的硬件抽象第一部第一部Audio系統(tǒng)綜層Audio系統(tǒng)的上層接口主要提供了兩方面的第一部Audio系統(tǒng)綜Java本地C框內(nèi)核空第一部Audio系統(tǒng)綜Java本地C框內(nèi)核空AudioHAL第一部Audio第一部Audio系統(tǒng)綜Media庫(libmedia.so)AudioAudioAudioFlinger(libaudioflinger.so)第一部Audio第一部Audio系統(tǒng)綜AudioJNIAudioJAVAAudio系統(tǒng)和上層Audio系統(tǒng)和上層接第二部mediaAudioAudioFlingerAudioJNIAudioJava?libmedia.so提供AudioAudio??libaudiofilnger.so提供Audio?AudioJNIJAVAAudio輸Audio輸JavaAudio輸Audio輸Java本地框架硬件抽象mediaAudioSystemAudioTrack和中,可以獲得IAudioTrackIAudioRecorderIAudioTrackIAudioRecorder來實(shí)現(xiàn)。Audio框架部--Audio框架部--Audio系統(tǒng)的頭文件AudioFlinger來實(shí)現(xiàn),其他接JNIIAudioFlinger.h:需要下層實(shí)現(xiàn)的總管接口;AudioTrack.h:放音部分對上接口;AudioRecorder.h:錄音部分對上接口;IAudioFlinger.hIAudioTrack.hIAudioRecorder.h這三個(gè)接口通過下層的繼承來實(shí)現(xiàn)(即AudioFlinger)。AudioFlinger.hAudioTrack.hAudioRecorder.h是對器、錄制器等),也可以通過JNIJava層提供接口。AudioTrack和writesetget接口,是一個(gè)對上層的AudioSystem.h本地代Audio是AudioFlingerAudioFlinger.cppAudioFlingerIAudioFlingerAudFliger本地代AudioFlinger的實(shí)現(xiàn)classAudioFlingerAudFliger本地代AudioFlinger的實(shí)現(xiàn)classAudioFlinger:public{public//省略部分virtualsp<IAudioTrack>//獲得音頻輸出接口(Trackpid_tpid,intstreamType,uint32_tsampleRate,intformat,intchannelCount,intframeCount,uint32_tflags,constsp<IMemory>&sharedBuffer,status_t*status);//……省略部分setMasterVolume(floatvalue);setMasterMute(boolmuted);setStreamVolume(intstream,floatvalue);setStreamMute(intstream,boolmuted);setMode(intmode);getMode()const;uint32_troutes,uint32_tmask);sp<IAudioRecord>//獲得音頻輸出接口(Recordpid_tpid,intuint32_tintformat,intchannelCount,intframeCount,uint32_tflags,status_t*status);}Audio系統(tǒng)Audio系統(tǒng)JNI代Audio的JNI部分的代碼的路徑為Audio系統(tǒng)Audio系統(tǒng)的JAVAAudio的JAVA第三部Audio的硬件抽第三部Audio的硬件抽象AudioFlinger和硬件的接口??梢曰贚inuxOSSAudio第三部Audio第三部Audio的硬件抽象AudioHardwareInterface.h中定義了類:這是實(shí)現(xiàn)Audio硬件抽象層的主要接口。第三部Audio第三部Audio的硬件抽象AudioStreamIn第三部Audio第三部Audio的硬件抽象:第三部Audio的第三部Audio的硬件抽象AudioFlingerAudio???作為Audio系統(tǒng)的通用實(shí)現(xiàn)來完成。第三部Audio第三部Audio的硬件抽象OSS驅(qū)動程序和ALSA驅(qū)動程序來實(shí)現(xiàn)?;贠SSAudioGeneric的實(shí)現(xiàn),但是增加了控制接口?;贏LSA的硬件抽象層的實(shí)現(xiàn)需要構(gòu)建于用戶Android的Android的Android輸入Android輸入輸出系Video輸入輸出系統(tǒng)的第一部述第四部第五部Overlay系Overlay的硬件抽象Camera系統(tǒng)與上層接Camera的硬件抽象第一部分Video輸入第一部分Video輸入輸出系統(tǒng)的綜Video輸入輸出系統(tǒng)的綜第一部Android的Video輸入輸出系統(tǒng)的綜第一部Android的Overlay系統(tǒng)結(jié)Overlay內(nèi)核空OverlayHAL實(shí)第一部Video第一部Video輸入輸出系統(tǒng)的綜Overlay相關(guān)的代碼路徑:libui.so。Overlay的硬件抽象層的接口:第一部Video輸入輸出系統(tǒng)的綜AndroidCamera第一部Video輸入輸出系統(tǒng)的綜AndroidCamera系統(tǒng)結(jié)JavaCameraC框內(nèi)核空CameraHAL第一部Video輸?shù)谝徊縑ideo輸入輸出系統(tǒng)的綜Camera相關(guān)的代碼路徑Camera框架部分的頭文件和源文件Camera服務(wù)部分第一部Video第一部Video輸入輸出系統(tǒng)的綜CameraJAVA本地調(diào)用部分(JNICameraJAVAOverlayAndroidOverlayOverlayAndroidOverlayoverlay接口,這個(gè)接口的含義是疊加在主的顯OverlaySurfaceFlingerOverlayOverlayOverlayOverlayOverlay接口雖然通過SurfaceFlinger的SurfaceFlinger的其他部分沒有依賴關(guān)系。Overlay在文件Overlay.hOverlay在文件Overlay.h中,OverlayRefOverlay。OverlayVideoOutputVideoOutputPreviewPreviewOverlayVideoOutputVideoOutputPreviewPreviewVideoOut/2DOverlayOverlayOverlayOverlayOverlay的使用場景主要有兩個(gè):視頻播放器的輸出(PVPlayer)Preview的輸出(CameraHal)OverlayOverlayoverlay_control_device_toverlay_data_device_t,實(shí)現(xiàn)Overlay的硬件抽象層。Android硬件模塊的標(biāo)準(zhǔn)方法,通過類overlay_module_t來完成。OverlayOverlayOverlayOverlayOverlayOverlay→overlay_module_t(hw_module_tcommon)::→overlay_module_t(hw_module_tcommon)::→overlay_data_device_t(hw_device_t→overlay_t::→overlay_data_device_t::overlay_data_device_t::dequeueBufferoverlay_data_device_t::queueBufferOverlayOverlayVideoforLinux2framerbuffer驅(qū)動程序的實(shí)現(xiàn),通常實(shí)現(xiàn)獲得內(nèi)存地址的接口即可?;趘4l2的實(shí)Camera系統(tǒng)與上層接Camera系統(tǒng)與上層接Camera的JNI和在AndroidAndroid在AndroidAndroid據(jù)獲?。≧ecording)Camera部分的主要頭的框架部分包含在ui庫的中,而Camera中間層的實(shí)現(xiàn)是層的Camera硬件抽象層來實(shí)現(xiàn)功能。ICameraService.hICameraClient.hICamera.hCameraICameraService.cpp和Camera.cpp兩個(gè)文件用于CameraCamera的具體功能在下層Camera.h是CameraNativeeNativeeCamera.h是CameraCamera.h是Camera、ICamera.h三個(gè)類定義了Camera中間層Camera系統(tǒng)共同的幾個(gè)方面:拍照照片(takePicture)//Typicaluse#define#defineFRAME_CALLBACK_FLAG_CAMERA//Typicaluse#define#defineFRAME_CALLBACK_FLAG_CAMERA#define//msgTypeinnotifyCallbackanddataCallbackfunctionsenum{========CAMERA_MSG_COMPRESSED_IMAGE==//ref-countedobjectforclassCameraListener:virtualpublic{virtualvoidnotify(int32_tmsgType,int32_text1,int32_text2)=virtualvoidpostData(int32_tmsgType,constsp<IMemory>&dataPtr)=virtualvoidpostDataTimestamp(nsecs_ttimestamp,int32_tmsgType,constsp<IMemory>&dataPtr)=CameraService是繼承CameraService是繼承BnCameraService在運(yùn)作的過程中CameraService::connect函能,由于CameraService::Client本身繼承了BnCamera類,而BnCameraICamera,因此這個(gè)類是可以被當(dāng)成ICamera來使用的。CameraHAL中,直接送給Camera類通過Callback在Android照相機(jī)攝像機(jī)應(yīng)用程序中,使用的是2323CameraService讀取CameraHAL的useOverlay接口來實(shí)現(xiàn)。CameraCameraHighlevelCameraCameraCameraHardware1.ToUserkernelVideoOutCameraCameraHighlevelCameraCameraCameraHardware1.ToUserkernelVideoOut/CameraUserkernel/CameraUserkernelrarameraSendEncoderbStart/UserkernelRecordingClientSendEncoderbStart/UserkernelRecordingClientCameraNative的JNI和Android的JNI和AndroidCameraJNIJAVA提供了接口。Camera在JAVA中的類是:android.hardware.Camera。CameraJAVA本地調(diào)用部分(JNICameraJAVA類Camera的硬件抽象Camera的硬件抽象CameraHardwareInterface.h/Camera的硬Camera的硬件抽象Camera的硬件抽象classCameraHardwareInterface:publicvirtualRefBaseCamera的硬件抽象classCameraHardwareInterface:publicvirtualRefBase~CameraHardwareInterface(){getPreviewHeap()const=0;getRawHeap()const=0;startPreview(preview_callbackcb,void*=booluseOverlay()sp<Overlay>&overlay){return=previewEnabled()=startRecording(recording_callbackcb,void*user)=stopRecording()=0;recordingEnabled()=0;releaseRecordingFrame(constsp<IMemory>&mem)=0;autoFocus(autofocus_callback,void*user)=0;takePicture(shutter_callback,raw_callback,jpeg_callback,void*user)=0;cancelPicture(boolcancel_shutter,boolcancel_raw,boolcancel_jpeg)=0;setParameters(constCameraParameters¶ms)=0;CameraParametersgetParameters()const=0;voidrelease()=0;status_tdump(intfd,constVector<String16>&args)const=Camera的硬Camera的硬件抽象Android的éclair版本中:Camera的硬件抽象classCameraHardwareInterface:publicvirtual{~CameraHardwareInterface()Camera的硬件抽象classCameraHardwareInterface:publicvirtual{~CameraHardwareInterface(){getPreviewHeap()const=0;getRawHeap()const=0;data_callbackvoid*user)=0;enableMsgType(int32_tmsgType)=disableMsgType(int32_tmsgType)=0;msgTypeEnabled(int32_tmsgType)=startPreview()=0;useOverlay(){returnfalse;}setOverlay(constsp<Overlay>&overlay){returnstopPreview()=0;previewEnabled()=startRecording()=stopRecording()=recordingEnabled()=0;releaseRecordingFrame(constsp<IMemory>&mem)=autoFocus()=0;cancelAutoFocus()=takePicture()=cancelPicture()=setParameters(constCameraParameters¶ms)getParameters()const=status_tsendCommand(int32_tcmd,int32_targ1,int32_targ2)=0;voidrelease()=0;status_tdump(intfd,constVector<String16>&args)const=Camera的Camera的硬件抽象CameraService中,實(shí)現(xiàn)了一個(gè)CameraHardwareStub.cpp和FakeCamera.cpp中實(shí)現(xiàn)。候,CameraService將使用這個(gè)樁,這樣整個(gè)Camera模塊可以在沒有硬件的情況下編譯通過Camera的硬件抽Camera的硬件抽象setOverlay()ISurfaceOverlayCamera的Camera的硬件抽象VideoforLinux2(V4L2)驅(qū)動程序,在此處主要的處(V4L2_MEMORY_MMAP),構(gòu)建預(yù)覽的內(nèi)存Camera的Camera的硬件抽象releaseRecordingFrame()被調(diào)用后,表示上層通知AndroidAndroidAndroidAndroid的多媒體部分的的多媒體部分的框架涉及到應(yīng)用JAVA框架C語言框架、硬件抽象層等JavaMediaMediaJavaMediaMediaJAVAJAVAJAVA本地調(diào)用部分(JNIMP3mp3MP3mp3PCM輸出的播放Android的多媒體系Camera/MusicJavaAndroid的多媒體系Camera/MusicJava音頻視頻播放器PacketVideo音頻視頻播放器PacketVideo照相機(jī)Camera照相機(jī)Camera錄音機(jī)錄音機(jī)攝像機(jī)攝像機(jī)多媒體部分的JNI代碼類第二部多媒體的各個(gè)層第二部多媒體的各個(gè)層Android多媒體部分C語部分的核心media庫,它主要錄了媒體播放器和媒體記錄器的框。media庫向上層通JNI提Video接口,下層通實(shí)現(xiàn)2.1libmediailreyee2.1libmediailreyee2.1libmedia2.1libmediax2.1libmedia2.1libmediaMediaPlayerServiceMediaPlayerService多媒體部分的JNI代碼media多媒體部分的JNI代碼mediaJAVA本地調(diào)用部分(JNI多媒體部分的JAVA多媒體部分的JAVAJAVAVideoView類VideoViewVideoView類VideoViewmediaJAVA類,這類的路徑是VideoView是一個(gè)集成了MediaPlayer和SurfaceViewUI元素(View)直接放置在JAVA應(yīng)用的界面中,用于視頻的播放。OpenCore概述OpenCoreOpenCore的OSCL部OpenCoreNodePlayer介Author介紹OpenOpenCreOpenCore是一個(gè)多媒體的框架,從宏觀上來看,它主要PVPlayer提供媒體播放器的功能,完成各種音頻(AudioPVAuthor提供媒體流記錄的功能,完成各種音頻(Audio)視頻(Video)流的捕獲(Recording)功PVPlayer和PVAuthor以SDK的形式提供給開發(fā)者,可、錄音機(jī)等等的層次結(jié)CodecAndroidAndroidVlyreVtre2waye的層次結(jié)CodecAndroidAndroidVlyreVtre2wayeoMultimediaAudio的層次結(jié)的層次結(jié)?(OperatingSystemCompatibilityLibrary,操作系統(tǒng)兼容)?(PacketVideoMultimediaFrameworkPV多媒體框架文件解析(parser)和組成(composer)兩個(gè)部分???NODEs(節(jié)點(diǎn)PlayerEngine(播放器引擎AuthorEngine(作者引擎3.2OpenCore3.2OpenCoreOSCLOSCL,全稱為OperatingSystemCompatibilityLibrary操作系統(tǒng)兼容庫,它包含了言中每一個(gè)細(xì)節(jié)的功能都進(jìn)行封裝,并使用了C+的接口提供給上層使用。事OperCorePVMFEngine部分都OSCL,而整OperCore的調(diào)用者也需OSCL的文件格式和編解碼部OpenCore有關(guān)文件格式處理和編解碼部分兩部分的內(nèi)容,分別在目錄fileformats和codecs_v2當(dāng)parser(解析器),另composer(組成器。編解碼部分的子omxOpenMAXOpenMAX媒體應(yīng)用程序的框架標(biāo)的文件格式和編解碼部parser(解析器),另composer(組成器)。其代碼的目錄為的目錄,其中包含mp3,mp4,wav等子目錄。其中包含了AVImp3mp4wav等多的文件格式和編解碼部編解碼目錄為codecs_v2,其中包含了audio、omx、utilities、video等幾個(gè)目錄audio和video目錄中,對應(yīng)了針對各種流的子目錄,其中可能包含decenc兩個(gè)目錄,分別對應(yīng)解碼和編|--|||||--|--|--`--`--|--|--`--的文件格式和編解碼部codecs_v2目錄的子omx實(shí)現(xiàn)khronosOpenMAX的功能。OpenMAX是一個(gè)多媒體應(yīng)用程序的框架標(biāo)準(zhǔn),NVIDIA公司Khronos2006年推OpenMAXILOpenMAX的設(shè)計(jì)實(shí)現(xiàn)可以讓具有硬件編輯碼功能的平臺提供統(tǒng)一的接口和框OpenMAX中可以直接使用硬件加此處的OpenMAX則是基于一個(gè)純軟件的實(shí)現(xiàn),其實(shí)現(xiàn)的代碼即是調(diào)用這里的video和audio目錄中的軟件編輯碼的代碼。3.5OpenCoreNode介3.5OpenCoreNode介NodeOpenCoreNodeOpenCorenodes出模塊的Node。NodeOpenCore本身提供了很強(qiáng)的過程中,還可以對的使用,一般是基于OpenCore的OpenCore本身提供了很強(qiáng)的過程中,還可以對的使用,一般是基于OpenCore的框架為其增加定的插件。插件主要一般可以做Node各種文件格式插件各種編解碼的編解碼相關(guān)的Node包括:pvomxbasedecnode,pvomxaudiodecnode編解碼相關(guān)的Node包括:pvomxbasedecnode,pvomxaudiodecnodeecnodepvomxencnode等。,文件格式的Node包括:pvwavffparsernodeodepvmp4ffparsernodepvvideoparsernodepvmp4ffcomposernode等。輸入輸出的Node包括:pvmediainputnode,pvmediaoutputnode,pvdummyinputnodepvdummyoutputnodepvfileoutputnodepvdownloadmanagernode等。MediaIOpvmi/pvmf/includeMediaIOpvmi/pvmf/includePvmiMIOControl.hNode在OpenCoreMediaIO是對Node的一種封裝,封裝成介OpenCore介OpenCore的Player的編譯文件是pvplayer/Android.mk,將生成動態(tài)庫文件的內(nèi)容:一方是Player的engine(引擎)AndroidPlayer(adapter)engineandroid介介解碼工具對應(yīng)的Node;Player的引擎部分(編譯engines/player/Android.mk);為Android構(gòu)建的Player適配器(編譯文件:android/Android.mk識別工具(pvmi/recognizer編解碼工具OpenMAX部分(codecs_v2/omx);對應(yīng)插件Node的注冊。libopencoreplayer.so中的內(nèi)容較多,其中主要為各個(gè)文件解器和解碼器PVPlayer的核心engines/player/Android.mk當(dāng)中android/Android.mk的內(nèi)容比較特殊PVPlayer之上構(gòu)建的一個(gè)為Android使用的播放器。介適配(PVPlayer??介適配(PVPlayer??介OpenCorePlayerEngine具有清晰明介OpenCorePlayerEngine具有清晰明確的接口,在這個(gè)接口上,不同的系統(tǒng)可以根據(jù)情況實(shí)現(xiàn)不同的Player。位于OpenCore中的engines/player/目錄下,其中,engines/player/include目錄中保存的是接口頭engines/playe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論