国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

AndroidCamera系統(tǒng)的結(jié)構(gòu)簡(jiǎn)析及移植初探

2013-04-29 20:40:07范卉敏紀(jì)勇
電腦知識(shí)與技術(shù) 2013年9期
關(guān)鍵詞:Android系統(tǒng)

范卉敏 紀(jì)勇

摘要:目前對(duì)于各類Android系統(tǒng)設(shè)備,都要求具備照相拍攝功能??紤]到平臺(tái)的多樣性和設(shè)備型號(hào)的差異,需要開(kāi)展相應(yīng)的Camera系統(tǒng)的移植工作。在理解Android系統(tǒng)結(jié)構(gòu)的基礎(chǔ)上,分析了Camera在Android系統(tǒng)中各個(gè)層次結(jié)構(gòu)上的實(shí)現(xiàn)方式,進(jìn)而闡明了在進(jìn)行Camera移植時(shí)所需完成的主要工作內(nèi)容。

關(guān)鍵詞:Android系統(tǒng);Camera組件;系統(tǒng)移植

中圖分類號(hào):TP316 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)09-2100-02

1 概述

目前Android系統(tǒng)由于其系統(tǒng)的開(kāi)放性、強(qiáng)大的多媒體能力、無(wú)需許可費(fèi)用等等顯著的特點(diǎn),在各類移動(dòng)設(shè)備與嵌入式設(shè)備中得到極為廣泛的使用,得到業(yè)界各大開(kāi)發(fā)團(tuán)隊(duì),頂尖IT公司的廣泛支持。具備照相和視頻拍攝功能是這些移動(dòng)設(shè)備、多媒體設(shè)備的一個(gè)基本要求,因此對(duì)原生Android系統(tǒng),針對(duì)不同的開(kāi)發(fā)平臺(tái)、不同的廠商產(chǎn)品來(lái)進(jìn)行有針對(duì)性的移植,是有著積極的實(shí)踐意義的。

2 Android結(jié)構(gòu)分析

目前在移動(dòng)設(shè)備中廣泛使用的Android系統(tǒng),從邏輯結(jié)構(gòu)上可以分為應(yīng)用層、應(yīng)用框架層、庫(kù)層、內(nèi)核層這個(gè)四個(gè)層次。

應(yīng)用層的應(yīng)用程序通常是指用戶界面這個(gè)層面的程序,使用Android提供的API進(jìn)行開(kāi)發(fā),通常用java程序編寫,再加上各種資源文件。Java源程序和資源文件共同編譯生成APK包。當(dāng)然Android系統(tǒng)本身也提供了一些最基本的核心應(yīng)用。

應(yīng)用框架層為應(yīng)用軟件開(kāi)發(fā)者提供上述提到的API,本質(zhì)上,這是應(yīng)用程序的框架。在這個(gè)框架內(nèi)部,提供了UI界面所需要的各種控件,比如網(wǎng)格、列表等,為開(kāi)發(fā)應(yīng)用軟件提供了必要的編程接口。另外在應(yīng)用框架層中也需要按照統(tǒng)一的標(biāo)準(zhǔn)接入下一個(gè)層次庫(kù)層中的內(nèi)容。

庫(kù)層對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),占據(jù)一個(gè)中間件層次的位置,是Android應(yīng)用層與實(shí)際硬件進(jìn)行相互通信的一個(gè)接口,把硬件的行為和功能封裝起來(lái),然后應(yīng)用框架層再通過(guò)某種通信途徑與庫(kù)層進(jìn)行通信。具體說(shuō)來(lái),該層次包含兩個(gè)部分,一個(gè)是各種庫(kù),另外一個(gè)是Android的運(yùn)行環(huán)境(RunTime),這些庫(kù)通常是用C++語(yǔ)言實(shí)現(xiàn)的,包含C標(biāo)準(zhǔn)庫(kù)、多媒體框架、圖形引擎、嵌入式數(shù)據(jù)庫(kù)等等部分。

內(nèi)核層又稱之為操作系統(tǒng)層,使用標(biāo)準(zhǔn)的Linux2.6內(nèi)核,是直接與硬件聯(lián)系的一層??紤]到Android系統(tǒng)的主要應(yīng)用范圍,這個(gè)層次主要包含一些與移動(dòng)設(shè)備相關(guān)設(shè)備驅(qū)動(dòng)程序。

3 Camera各層次的實(shí)現(xiàn)方式剖析

在分析上述Android整體框架基礎(chǔ)上,進(jìn)一步分析Camera系統(tǒng)的具體實(shí)現(xiàn)方式。

3.1 應(yīng)用層實(shí)現(xiàn)

Camera系統(tǒng)在應(yīng)用層上是以一個(gè)APK包的直觀形式表現(xiàn)出來(lái)的,當(dāng)然在這個(gè)APK包的開(kāi)發(fā)過(guò)程中調(diào)用了大量框架層中的API函數(shù),能夠?qū)崿F(xiàn)Camera應(yīng)用的業(yè)務(wù)邏輯和UI顯示,路徑在/android/packages/apps/Camera下,主要實(shí)現(xiàn)文件是Camera.java,對(duì)應(yīng)的Java層次的類是android.hardware.Camera。這個(gè)類就是Android提供給上層調(diào)用的Camera類。這個(gè)類的具體作用是用來(lái)連接與斷開(kāi)下層中Camera服務(wù),對(duì)拍攝的參數(shù)或者模式進(jìn)行設(shè)置,打開(kāi)關(guān)閉畫(huà)面預(yù)覽,開(kāi)啟拍照動(dòng)作,實(shí)現(xiàn)自動(dòng)對(duì)焦等。它也是Android Camera應(yīng)用框架封裝暴露出來(lái)的接口。不過(guò)需要注意的是如果要在一個(gè)實(shí)際的Android應(yīng)用程序中使用Camera類,必須在源代碼中聲明Camera的權(quán)限與特性。

3.2 應(yīng)用框架層實(shí)現(xiàn)

Camera框架層將應(yīng)用與底層的實(shí)現(xiàn)隔離開(kāi)來(lái),實(shí)現(xiàn)了一套Android定義的對(duì)上對(duì)下接口規(guī)范,方便應(yīng)用及底層硬件的開(kāi)發(fā)和移植。這一層對(duì)上以Java類的形式包裝出android.hardware.Camera,以便應(yīng)用層軟件進(jìn)行調(diào)用;對(duì)下則在一個(gè)文件名為CameraHardwareInterface.h頭文件中規(guī)定出Camera硬件抽象層的接口。注意這個(gè)接口類內(nèi)定義了純虛函數(shù),虛函數(shù)必須被實(shí)現(xiàn)類繼承以后才能使用。實(shí)際上這個(gè)實(shí)現(xiàn)類就是在上文所提到的Android框架里的庫(kù)層,這個(gè)庫(kù)層作用是繼承CameraHardwareInterface接口,將處于最底層的硬件驅(qū)動(dòng)加以實(shí)例化,生成libcamera.so讓應(yīng)用框架的libcameraservice.so進(jìn)行調(diào)用。通過(guò)這種處理方式,使得讓Camera的應(yīng)用框架代碼保持獨(dú)立性,不會(huì)受到具體硬件型號(hào)和參數(shù)的影響,為在不同的平臺(tái)上移植Android系統(tǒng)提供了極大的方便。

在這個(gè)層次中,代碼經(jīng)歷了從Java到JNI再到C++的多次轉(zhuǎn)換。Camera.java源文件中的類作為Android SDK中有關(guān)Camera的一個(gè)組成部分提供給上層應(yīng)用程序調(diào)用,并進(jìn)一步通過(guò)本地調(diào)用方式(即JNI方式)調(diào)用本地C++代碼。相關(guān)cpp文件名是android_hardware_Camera.cpp,這個(gè)文件是實(shí)現(xiàn)JAVA代碼到C++代碼的轉(zhuǎn)換的基本路徑,并且進(jìn)一步編譯為libandroid_runtime.so文件。

在Android系統(tǒng)的/android/frameworks/base/libs/ui中包含多個(gè)cpp源文件,這些源文件會(huì)最終編譯生成libui.so。這個(gè)文件在Camera占有極其重要的地位,是一個(gè)核心文件。基本作用體現(xiàn)為作為Camera應(yīng)用框架的Client客戶端,與作為服務(wù)端的libcameraservice.so通過(guò)Binder機(jī)制進(jìn)行進(jìn)程之間的通訊,即IPC通信。作為Camera服務(wù)載體libcameraservice.so是通過(guò)調(diào)用Camera hardware interface接口功能完成上述的客戶端連接。

在上述過(guò)程中,libandroid_runtime.so和libui.so是兩個(gè)公用庫(kù),Android系統(tǒng)中的其他一些組件可能也會(huì)調(diào)用這兩個(gè)文件。在Camera系統(tǒng)工作的時(shí)候,客戶端與服務(wù)器端分別在兩個(gè)進(jìn)程中運(yùn)行,借助于Binder機(jī)制實(shí)現(xiàn)進(jìn)程之間通訊。不過(guò)需要指出的是這種進(jìn)程之間的通訊對(duì)于上層應(yīng)用程序來(lái)說(shuō)是透明的,上層應(yīng)用程序無(wú)需關(guān)心功能究竟是在客戶端還是在服務(wù)端實(shí)現(xiàn)的??偠灾?dāng)Camera 客戶端通過(guò)Binder機(jī)制與服務(wù)端通訊,由服務(wù)端實(shí)現(xiàn)后傳遞到客戶端。而服務(wù)端的實(shí)現(xiàn)又是調(diào)用camera硬件接口實(shí)現(xiàn)的。

3.3 庫(kù)層實(shí)現(xiàn)

在camera系統(tǒng)中,庫(kù)層實(shí)際上就是硬件抽象層(HAL層),用戶空間的驅(qū)動(dòng)代碼就是在這個(gè)層次中。在庫(kù)層的上級(jí)層次框架層中,包含了 Camera硬件抽象層的接口,這些接口是包含純虛函數(shù)的類。那么在庫(kù)層或者硬件抽象層中將會(huì)依據(jù)Linux中V4L2標(biāo)準(zhǔn)規(guī)范對(duì)底層硬件驅(qū)動(dòng)進(jìn)行實(shí)例化,最終生成libcamera.so以便應(yīng)用框架的libcameraservice.so服務(wù)進(jìn)行調(diào)用。具體代碼所在的目錄根據(jù)開(kāi)發(fā)板或者廠家的不同也稍顯有些區(qū)別,通常是在/android/hardware/XXX/libcamera目錄下。例如對(duì)于三星S3C平臺(tái),這里的XXX用s3c表示。

3.4 內(nèi)核層實(shí)現(xiàn)

由于Android系統(tǒng)本身是架構(gòu)在Linux內(nèi)核上的開(kāi)源操作系統(tǒng),因此驅(qū)動(dòng)層實(shí)質(zhì)上就是Linux的內(nèi)核,只不過(guò)針對(duì)移動(dòng)設(shè)備的特點(diǎn)做了一些優(yōu)化而已。對(duì)于Android中Camera系統(tǒng),通常是依據(jù)V4L2驅(qū)動(dòng)規(guī)范以ioctl的形式將Camera基本物理功能提供給硬件抽象層調(diào)用。主要功能包含圖像視頻數(shù)據(jù)的采集、格式轉(zhuǎn)換、圖片縮放、數(shù)據(jù)傳輸。其中V4L2是V4L的升級(jí)版,全稱為視頻設(shè)備的通用驅(qū)動(dòng)接口,Android系統(tǒng)中的Camera功能實(shí)現(xiàn)的基礎(chǔ)就是這套標(biāo)準(zhǔn)的驅(qū)動(dòng)架構(gòu)。當(dāng)視頻設(shè)備加載成功后,會(huì)相應(yīng)的在/dev目錄下面生成設(shè)備節(jié)點(diǎn)。

4 Camera系統(tǒng)移植的主要內(nèi)容

由上所知,在camera系統(tǒng)中,Camera本地框架、Camera服務(wù)、Camera硬件接口都是采用標(biāo)準(zhǔn)化接口,代碼相對(duì)獨(dú)立,在移植過(guò)程中無(wú)需作出改變。因此對(duì)于Camera系統(tǒng)的移植,主要有兩方面的內(nèi)容:一是Camera硬件抽象層的修改,這個(gè)層次是直接和底層硬件驅(qū)動(dòng)緊密相關(guān)的,是V4L2與Camera服務(wù)之間的一個(gè)接口,是一個(gè)C++的標(biāo)準(zhǔn)類,一個(gè)具體的實(shí)現(xiàn)者將會(huì)繼承這個(gè)類。Camera的硬件抽象層需要具備提取景物、視頻攝錄、照片捕捉等功能。二是Camera驅(qū)動(dòng)程序的修改。在Linux系統(tǒng)中,采用標(biāo)準(zhǔn)的Video for Linux 2作為標(biāo)準(zhǔn)的Camera驅(qū)動(dòng),并且定義了內(nèi)核空間及用戶空間中的數(shù)據(jù)類和控制類。在移植Android系統(tǒng)中的Camera系統(tǒng)的時(shí)候,仍然可以采用V4L2作為Camera的驅(qū)動(dòng)程序。綜上所述,如果Android系統(tǒng)中的Camera硬件發(fā)生變化了,對(duì)于相應(yīng)的移植工作,主要的工作就是硬件抽象層到內(nèi)核層這一部分,應(yīng)用框架層以上的部分無(wú)需作出變動(dòng)。當(dāng)然在具體進(jìn)行移植時(shí),由于硬件平臺(tái)、Camera硬件型號(hào)的差異,實(shí)際的代碼修改,參數(shù)配置還會(huì)有所差異。

參考文獻(xiàn):

[1] 李駿.Android驅(qū)動(dòng)開(kāi)發(fā)與移植實(shí)戰(zhàn)講解[M].北京:人民郵電出版社,2012.

[2] 扶松柏.安卓開(kāi)發(fā)從入門到精通[M].北京:兵器工業(yè)出版社,2012.

猜你喜歡
Android系統(tǒng)
掌游西塘APP設(shè)計(jì)與實(shí)現(xiàn)
基于污點(diǎn)傳播動(dòng)態(tài)分析的Android安全系統(tǒng)研究
Android系統(tǒng)上的移動(dòng)互聯(lián)網(wǎng)集成平臺(tái)開(kāi)發(fā)機(jī)制
Android系統(tǒng)核心管理工具設(shè)計(jì)與實(shí)現(xiàn)
Android下的機(jī)械式電表數(shù)字識(shí)別技術(shù)研究
基于Android系統(tǒng)的掌上班級(jí)課表與學(xué)生考勤管理系統(tǒng)
基于GPS和iBeacon的智能校園信息發(fā)布平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
基于增強(qiáng)現(xiàn)實(shí)技術(shù)的導(dǎo)航系統(tǒng)研究
基于Android的溫室智能視頻監(jiān)控系統(tǒng)研究
面向移動(dòng)終端的語(yǔ)音簽到系統(tǒng)
綦江县| 金门县| 邛崃市| 济宁市| 鄂州市| 黑山县| 南华县| 长汀县| 靖西县| 青龙| 哈尔滨市| 绿春县| 东城区| 高碑店市| 五原县| 江北区| 崇信县| 凉城县| 军事| 宝兴县| 桐柏县| 湖州市| 庐江县| 泊头市| 册亨县| 诸城市| 宁波市| 法库县| 临夏市| 婺源县| 西城区| 保靖县| 丰镇市| 确山县| 民勤县| 咸宁市| 麻栗坡县| 棋牌| 青海省| 德令哈市| 刚察县|