• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      范卉敏 紀(jì)勇

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

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

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

      1 概述

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      參考文獻(xiàn):

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

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

      猜你喜歡
      Android系統(tǒng)
      掌游西塘APP設(shè)計(jì)與實(shí)現(xiàn)
      基于污點(diǎn)傳播動態(tài)分析的Android安全系統(tǒng)研究
      Android系統(tǒng)上的移動互聯(lián)網(wǎng)集成平臺開發(fā)機(jī)制
      Android系統(tǒng)核心管理工具設(shè)計(jì)與實(shí)現(xiàn)
      Android下的機(jī)械式電表數(shù)字識別技術(shù)研究
      基于Android系統(tǒng)的掌上班級課表與學(xué)生考勤管理系統(tǒng)
      基于GPS和iBeacon的智能校園信息發(fā)布平臺設(shè)計(jì)與實(shí)現(xiàn)
      基于增強(qiáng)現(xiàn)實(shí)技術(shù)的導(dǎo)航系統(tǒng)研究
      基于Android的溫室智能視頻監(jiān)控系統(tǒng)研究
      面向移動終端的語音簽到系統(tǒng)
      康乐县| 遵化市| 咸阳市| 西安市| 陆川县| 榆树市| 云安县| 庆云县| 永宁县| 郑州市| 尖扎县| 塘沽区| 河源市| 五寨县| 绥棱县| 成安县| 双鸭山市| 吴江市| 穆棱市| 洛川县| 潢川县| 东光县| 上杭县| 石嘴山市| 新蔡县| 临漳县| 哈尔滨市| 肥东县| 潮安县| 鸡东县| 北京市| 水富县| 涪陵区| 浙江省| 山东| 拉萨市| 新昌县| 湘西| 巴南区| 甘肃省| 广宁县|