隨著近期Gingerbread的發(fā)布及基于ARM的Android每日激活數(shù)量達(dá)到300,000(參見(jiàn)James Bruce的博客),開(kāi)發(fā)人員迎來(lái)了前所未有的好機(jī)遇。開(kāi)發(fā)人員所使用的工具也比以前要好。Gingerbread的更新引起了對(duì)如何支持開(kāi)發(fā)人員為快速成長(zhǎng)的消費(fèi)市場(chǎng)創(chuàng)建優(yōu)質(zhì)內(nèi)容的強(qiáng)烈關(guān)注。
Android很早就隨軟件開(kāi)發(fā)套件(SDK)提供了一套本機(jī)開(kāi)發(fā)套件(NDK)。NDK可以支持以C和/或ARM匯編代碼創(chuàng)建本機(jī)函數(shù)。Java應(yīng)用程序可以通過(guò)Java本機(jī)接口(JNI)調(diào)用這些函數(shù)。一位筆名為ARM_DaveB的ARM首席軟件工程師寫(xiě)了一篇關(guān)于NDK的精彩博客。
盡管NDK的工作模式旨在實(shí)現(xiàn)專門任務(wù),但我們通過(guò)與許多Android應(yīng)用程序開(kāi)發(fā)人員交談發(fā)現(xiàn),他們更愿意將整個(gè)應(yīng)用程序嵌入一個(gè)本地庫(kù)。他們只愿意創(chuàng)建一個(gè)非常小的Java封裝來(lái)處理應(yīng)用程序生命周期管理并訪問(wèn)本機(jī)代碼無(wú)法訪問(wèn)的API。瘋狂流行的Rovio專營(yíng)游戲“憤怒的小鳥(niǎo)”,及曾經(jīng)風(fēng)靡一時(shí)的Mozilla Firefox瀏覽器均是采取這方式的典范。
圖1 - Mozilla Foundation Firefox for Android
新NDK中的增強(qiáng)本機(jī)API類別
隨著Android 2.3 (Gingerbread) SDKr8和谷歌NDKr5的發(fā)布,許多事情都發(fā)生了改變!對(duì)于那些使用過(guò)NDK的有經(jīng)驗(yàn)的開(kāi)發(fā)人員,谷歌推出了一系列可用于本機(jī)代碼的API擴(kuò)展功能。這將極大地改進(jìn)本機(jī)代碼的性能并提高其多功能性。增強(qiáng)的本機(jī)API類包括:
輸入和傳感器事件
基于Khronos OpenSL ES標(biāo)準(zhǔn)的Audio API
基于Khronos EGL標(biāo)準(zhǔn)的EGL界面
適用于圖形資源的資源管理器API
NativeActivity類轉(zhuǎn)變NDK工作模式
然而,最為顯著的變化則是引入了NativeActivity類。這一新功能代表著NDK工作模式的重大轉(zhuǎn)變。本機(jī)代碼的NativeActivity類附加功能支持應(yīng)用程序生命周期管理,而窗口管理則可在Java外執(zhí)行。它可以有效地將“main()”從Java轉(zhuǎn)至C。這意味著可以完全使用C/C++/ARM匯編代碼來(lái)編寫(xiě)應(yīng)用程序,而無(wú)需開(kāi)發(fā)Java或JNI捆綁包。它賦予了開(kāi)發(fā)人員選擇Java或C的真正自由權(quán)力,從而進(jìn)一步為Android平臺(tái)上的應(yīng)用程序開(kāi)發(fā)打開(kāi)了一個(gè)開(kāi)發(fā)人員社區(qū)的超集。
新的NativeActivity類與當(dāng)前一些激進(jìn)的NDK用戶編寫(xiě)的代碼并沒(méi)有什么不同,都將應(yīng)用程序的大部分移至本地庫(kù)。它提供了一個(gè)本地幫助程序類以將回調(diào)函數(shù)捆綁至本機(jī)代碼。NativeActivity中的這些方法不僅是源自Java中的標(biāo)準(zhǔn)Activity類,可以提供Java應(yīng)用程序的靈活性,而且該類還增加了一些處理附加任務(wù)的獨(dú)特方法,如surfacedChanged(…)和surfaceRedrawNeeded(…)。通過(guò)這種方式,應(yīng)用程序仍舊以Dalvik線程運(yùn)行,并享有Android應(yīng)用程序框架模型的相同安全保護(hù)和優(yōu)勢(shì)。
新的幫助程序庫(kù)簡(jiǎn)化了NativeActivity的使用
谷歌創(chuàng)建了一個(gè)新的幫助程序庫(kù),作為新NDK的一部分,從而又向前邁進(jìn)了一步。該幫助程序可以簡(jiǎn)化NativeActivity的使用,從而讓新開(kāi)發(fā)人員可以更輕松地掌握它,并快速地在Android平臺(tái)中部署本機(jī)應(yīng)用程序。該庫(kù)被定義在NDK源目錄下的android_native_app_glue.[h|c]文件中。此幫助程序庫(kù)定義了一個(gè)由開(kāi)發(fā)人員執(zhí)行的android_main(…)函數(shù)。android_main(…)函數(shù)旨在保持開(kāi)發(fā)人員主應(yīng)用程序流控制,且可由幫助程序庫(kù)通過(guò)唯一線程調(diào)用。這樣,庫(kù)即可幫助開(kāi)發(fā)人員避免發(fā)生與在主NativeActivity線程中運(yùn)行回調(diào)代碼相關(guān)的堵塞問(wèn)題。幫助程序庫(kù)定義的android_app架構(gòu)實(shí)例將被傳至android_main(…)函數(shù)。此架構(gòu)包含有一個(gè)嵌入ALooper架構(gòu)實(shí)例,可以支持應(yīng)用程序偵聽(tīng)活動(dòng)生命周期事件,如“pause”或“resume”,及設(shè)備輸入事件。
圖2 - 使用NDKr5以本機(jī)代碼編寫(xiě)的android_mail函數(shù)示例
NDK將加速平板優(yōu)質(zhì)內(nèi)容的生產(chǎn)
在嘗試了新功能和提供的NativeActivity示例后,我對(duì)修訂版NDK的新式樣產(chǎn)生了深刻的印象。正如我們可以期待在新的一年中會(huì)有更多的Android平板設(shè)備運(yùn)行2.3 (Gingerbread),我相信通過(guò)簡(jiǎn)化潛在ARM架構(gòu)的利用,在為更大屏幕的設(shè)備加速創(chuàng)建優(yōu)質(zhì)應(yīng)用程序內(nèi)容方面,新的NDK將會(huì)拌演重要角色。
趕快親身體驗(yàn)吧!您現(xiàn)在可以從谷歌獲得NDKr5包裹、文檔及示例,有關(guān)NativeActivity的詳細(xì)信息,請(qǐng)參見(jiàn)此處。您還能從Android開(kāi)發(fā)人員頁(yè)面找到許多其它Android 2.3增強(qiáng)內(nèi)容。
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。