淺談Android軟硬件巧妙整合的開(kāi)發(fā)技巧
·應(yīng)用程序(Application):所有Android應(yīng)用程序皆是以Java程序語(yǔ)言編寫(xiě),原始就會(huì)包含像是Email、簡(jiǎn)訊、日歷、地圖、瀏覽器、聯(lián)絡(luò)人等其它應(yīng)用程序,讓用戶一開(kāi)始就擁有這些基本功能,開(kāi)發(fā)者也可在此客制其使用接口。
廠商越想要設(shè)計(jì)出與原始設(shè)定不同且增強(qiáng)效能的產(chǎn)品,便越需要對(duì)這五層架構(gòu)進(jìn)行修改。譬如像是多任務(wù)處理能力(multi-tasking),便可能需要修改包括Linux核心與應(yīng)用程序框架的設(shè)計(jì);而應(yīng)用程序的開(kāi)發(fā)者更可能需要針對(duì)應(yīng)用程序與框架進(jìn)行調(diào)整。由此可見(jiàn),對(duì)Android設(shè)備而言,任何一個(gè)功能的置入或是對(duì)硬件設(shè)定的細(xì)微更動(dòng),都需要對(duì)Android系統(tǒng)進(jìn)行從下到上的調(diào)整以達(dá)到最優(yōu)化的效能,而這正是最為困難與需要驗(yàn)證的一環(huán)。
二、Android設(shè)備軟硬件整合的五大技術(shù)環(huán)節(jié)
如前所述,對(duì)眾家開(kāi)發(fā)廠商而言最大的挑戰(zhàn)其實(shí)在于,如何將自己理想的產(chǎn)品訴求,與Android系統(tǒng)巧妙結(jié)合成一個(gè)功能完整并使用流暢順手的產(chǎn)品,這其中牽涉了不同技術(shù)間的整合與運(yùn)用。在此我們便根據(jù)其多年的測(cè)試與研究經(jīng)驗(yàn),歸納出五大Android相關(guān)設(shè)備在技術(shù)整合上的重要環(huán)節(jié):
1、Linux驅(qū)動(dòng)程序的導(dǎo)入
由于Android是根源于Linux所延伸出來(lái)的操作系統(tǒng),因此各種關(guān)鍵功能的驅(qū)動(dòng)程序也必須要能順利的寫(xiě)入其中,舉凡像是字符設(shè)備、存儲(chǔ)器的空間配置、中斷處理、網(wǎng)路通信、螢?zāi)伙@示或是連接接口像是USB與PCI的驅(qū)動(dòng)程序,這些可能是自行撰寫(xiě)、或是來(lái)自不同組件廠商的驅(qū)動(dòng)程序,都必須要能被導(dǎo)入到Android系統(tǒng),并維持良好穩(wěn)定的效能表現(xiàn)。
2、系統(tǒng)單芯片的優(yōu)化處理
對(duì)廠商而言,開(kāi)發(fā)一款A(yù)ndroid設(shè)備,不僅僅只是將所有零組件組合成為一個(gè)產(chǎn)品那么容易,最大的學(xué)問(wèn)便在于將系統(tǒng)單芯片(System-on-a-chip,SoC)、各種新技術(shù)和Android系統(tǒng)進(jìn)行整合,SoC涉及像是Dalvik Virtual Machine、OpenGL、V8、Webkit Engine等上層的演算,與Android間的結(jié)合便必須透過(guò)不斷的嘗試與驗(yàn)證,才能研發(fā)出既符合成本效益、又有良好效能的優(yōu)化產(chǎn)品。目前市面上有些SoC廠商已針對(duì)Android系統(tǒng)的特性,提供整合過(guò)的SoC平臺(tái),將藍(lán)牙、相機(jī)或上網(wǎng)等常用功能模組預(yù)先寫(xiě)入,減少終端成品廠商費(fèi)力整合開(kāi)發(fā)的時(shí)間,但對(duì)廠商而言,這樣的預(yù)先整合是否適合自身產(chǎn)品,以及是否需要再作更細(xì)致的修改,則又是更困難的課題。
3、新技術(shù)的移植
隨著技術(shù)的快速發(fā)展,更多新興的技術(shù)規(guī)格也逐漸應(yīng)用在手機(jī)等手持設(shè)備上,以手機(jī)為例,已經(jīng)從過(guò)去以撥打電話為主要功能,轉(zhuǎn)變?yōu)閾碛懈鞣N多樣化用途的產(chǎn)品。像是觸控技術(shù)讓消費(fèi)者可以透過(guò)手指的滑動(dòng)傳送指令甚至是具備多點(diǎn)觸控的支持、Wi-Fi模組提供隨時(shí)無(wú)線上網(wǎng)的可能、通用圖形處理器(General-purpose computing on graphics procESSing units,GPGPU)則能以并行方式透過(guò)圖形處理器來(lái)執(zhí)行通用計(jì)算任務(wù)、Android 2.3版所支持的NFC近場(chǎng)通信技術(shù),以及更高階的相機(jī)模組等等,背后都有各自的驅(qū)動(dòng)程序與軟件技術(shù),也必須要與Android系統(tǒng)相結(jié)合使用。
4、效能表現(xiàn)的穩(wěn)定
盡管上述這些技術(shù)不斷推陳出新,但也都不能因此而犧牲設(shè)備原本的效能表現(xiàn),讓處理速度因此變慢或造成使用上不順暢的狀況。除了采用更好的硬件設(shè)備外(例如現(xiàn)今處理器的時(shí)脈已邁向1GHz),更需要操作系統(tǒng)的支持,像是如何在多任務(wù)運(yùn)作的狀況下維持程序執(zhí)行速度以及系統(tǒng)滿載的處理等等,都必須要透過(guò)軟件面的奧援。也就是說(shuō),一臺(tái)Android設(shè)備除了要能將各種功能與技術(shù)收納起來(lái)、將軟硬件整合外,更必須同時(shí)注重它在效能上能否維持應(yīng)有的水準(zhǔn),以提供使用者在操作上流暢易上手的感受。
5、低電耗設(shè)計(jì)
Android的設(shè)計(jì)概念主要是應(yīng)用于便攜式設(shè)備上,目前市面上可見(jiàn)的像是平板電腦與智能手機(jī)等。對(duì)這類產(chǎn)品而言,電池續(xù)航力的好壞可說(shuō)是影響消費(fèi)者使用感受的關(guān)鍵之一,試想,若是一臺(tái)智能手機(jī)的待機(jī)時(shí)間過(guò)短,而使用者在外時(shí)又無(wú)法隨時(shí)充電使用,不能即時(shí)的連網(wǎng)查詢資料或執(zhí)行其他手機(jī)功能,這樣的產(chǎn)品便失去了它作為便攜式移動(dòng)設(shè)備應(yīng)有的便利性。追根究底,良好的待機(jī)時(shí)間除了需仰賴高容量的電池以提供充足電力之外,另一個(gè)重點(diǎn)就是設(shè)備本身在被使用執(zhí)行時(shí)能否作到低電耗設(shè)計(jì)。Android設(shè)備讓使用者能透過(guò)各種多樣化的應(yīng)用程序,來(lái)達(dá)到各種不同的使用目的,舉凡像是單純上網(wǎng)、觀看新聞、郵件推播或是游戲等等,各種不同功能的程序都能透過(guò)自由下載使用,也由于其多任務(wù)處理與讓程序背景執(zhí)行的能力,更讓降低耗電量成為開(kāi)發(fā)者不可輕忽的一項(xiàng)課題。
持續(xù)驗(yàn)證修正 找出最佳Android整合方案
正如前面我們不斷提到的,對(duì)Android設(shè)備而言,最困難的開(kāi)發(fā)挑戰(zhàn)便在于如何完美地“整合”軟件與硬件,以開(kāi)發(fā)出一項(xiàng)功能完整又同時(shí)注重使用者感受的產(chǎn)品。從對(duì)Android本身程序碼的修改、相關(guān)硬件的選擇,到驅(qū)動(dòng)程序的結(jié)合運(yùn)用以及能否維持穩(wěn)定的效能表現(xiàn)等,在在都必須要透過(guò)仔細(xì)的研究與不斷的嘗試,才能找出問(wèn)題的根源并解決、更進(jìn)而找出最合適的整合方案。
像是Android源代碼中對(duì)音源的重新取樣(Re-sampling)設(shè)計(jì),就會(huì)導(dǎo)致設(shè)備在讀取48K音源時(shí)重新取樣成44K,而造成諧波失真的現(xiàn)象影響音質(zhì),這便是廠商不會(huì)注意到而未去修改的問(wèn)題;另外像是天線位置的設(shè)計(jì),也可能直接的影響到收訊能力的好壞;而不良的電源管理設(shè)計(jì),也極有可能影響到設(shè)備在持續(xù)使用狀態(tài)中的耗電情形。百佳泰在此僅以專業(yè)測(cè)試驗(yàn)證實(shí)驗(yàn)室的角度,希冀以宏觀的方式,針對(duì)Android設(shè)備的開(kāi)發(fā)設(shè)計(jì)提供可用的參考,近期內(nèi)我們也將會(huì)提供實(shí)際的相關(guān)測(cè)試數(shù)據(jù)報(bào)告,并進(jìn)一步指陳這些可能的問(wèn)題風(fēng)險(xiǎn),以期讓更多廠商與消費(fèi)者都能注意到品質(zhì)驗(yàn)證的重要性,是從產(chǎn)品設(shè)計(jì)的根源就要開(kāi)始層層把關(guān)。
Android 是運(yùn)行于 Linux kernel之上,但并不是GNU/Linux。因?yàn)樵谝话鉍NU/Linux 里支持的功能,Android 大都沒(méi)有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic 取代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 為了達(dá)到商業(yè)應(yīng)用,必須移除被GNU GPL授權(quán)證所約束的部份,例如Android將驅(qū)動(dòng)程序移到 userspace,使得Linux driver 與 Linux kernel徹底分開(kāi)。bionic/libc/kernel/ 并非標(biāo)準(zhǔn)的kernel header files。Android 的 kernel header 是利用工具由 Linux kernel header 所產(chǎn)生的,這樣做是為了保留常數(shù)、數(shù)據(jù)結(jié)構(gòu)與宏。 目前Android 的 Linux kernel控制包括安全(Security),存儲(chǔ)器管理(Memory Management),程序管理(Process Management),網(wǎng)絡(luò)堆棧(Network Stack),驅(qū)動(dòng)程序模型(Driver Model)等。下載Android源碼之前,先要安裝其構(gòu)建工具 Repo來(lái)初始化源碼。Repo 是 Android 用來(lái)輔助Git工作的一個(gè)工具。
評(píng)論