《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > Android 2.3 (Gingerbread) NDK現(xiàn)在更加接近純本機開發(fā)

Android 2.3 (Gingerbread) NDK現(xiàn)在更加接近純本機開發(fā)

2011-08-08

   隨著近期Gingerbread的發(fā)布及基于ARM的Android每日激活數(shù)量達到300,000(參見James Bruce的博客),開發(fā)人員迎來了前所未有的好機遇,。開發(fā)人員所使用的工具也比以前要好,。Gingerbread的更新引起了對如何支持開發(fā)人員為快速成長的消費市場創(chuàng)建優(yōu)質(zhì)內(nèi)容的強烈關注,。 

   Android很早就隨軟件開發(fā)套件(SDK)提供了一套本機開發(fā)套件(NDK),。NDK可以支持以C和/或ARM匯編代碼創(chuàng)建本機函數(shù)。Java應用程序可以通過Java本機接口(JNI)調(diào)用這些函數(shù),。一位筆名為ARM_DaveB的ARM首席軟件工程師寫了一篇關于NDK的精彩博客,。
 
   盡管NDK的工作模式旨在實現(xiàn)專門任務,但我們通過與許多Android應用程序開發(fā)人員交談發(fā)現(xiàn),,他們更愿意將整個應用程序嵌入一個本地庫,。他們只愿意創(chuàng)建一個非常小的Java封裝來處理應用程序生命周期管理并訪問本機代碼無法訪問的API。瘋狂流行的Rovio專營游戲“憤怒的小鳥”,,及曾經(jīng)風靡一時的Mozilla Firefox瀏覽器均是采取這方式的典范,。
 
 
圖1 - Mozilla Foundation Firefox for Android
 
 
新NDK中的增強本機API類別
隨著Android 2.3 (Gingerbread) SDKr8和谷歌NDKr5的發(fā)布,許多事情都發(fā)生了改變,!對于那些使用過NDK的有經(jīng)驗的開發(fā)人員,,谷歌推出了一系列可用于本機代碼的API擴展功能。這將極大地改進本機代碼的性能并提高其多功能性,。增強的本機API類包括:
輸入和傳感器事件
基于Khronos OpenSL ES標準的Audio API
基于Khronos EGL標準的EGL界面
適用于圖形資源的資源管理器API
 
NativeActivity類轉(zhuǎn)變NDK工作模式
然而,,最為顯著的變化則是引入了NativeActivity類。這一新功能代表著NDK工作模式的重大轉(zhuǎn)變,。本機代碼的NativeActivity類附加功能支持應用程序生命周期管理,,而窗口管理則可在Java外執(zhí)行。它可以有效地將“main()”從Java轉(zhuǎn)至C,。這意味著可以完全使用C/C++/ARM匯編代碼來編寫應用程序,,而無需開發(fā)Java或JNI捆綁包。它賦予了開發(fā)人員選擇Java或C的真正自由權(quán)力,,從而進一步為Android平臺上的應用程序開發(fā)打開了一個開發(fā)人員社區(qū)的超集,。
 
新的NativeActivity類與當前一些激進的NDK用戶編寫的代碼并沒有什么不同,都將應用程序的大部分移至本地庫,。它提供了一個本地幫助程序類以將回調(diào)函數(shù)捆綁至本機代碼,。NativeActivity中的這些方法不僅是源自Java中的標準Activity類,,可以提供Java應用程序的靈活性,而且該類還增加了一些處理附加任務的獨特方法,,如surfacedChanged(…)和surfaceRedrawNeeded(…),。通過這種方式,應用程序仍舊以Dalvik線程運行,,并享有Android應用程序框架模型的相同安全保護和優(yōu)勢,。

新的幫助程序庫簡化了NativeActivity的使用
谷歌創(chuàng)建了一個新的幫助程序庫,作為新NDK的一部分,,從而又向前邁進了一步,。該幫助程序可以簡化NativeActivity的使用,從而讓新開發(fā)人員可以更輕松地掌握它,,并快速地在Android平臺中部署本機應用程序,。該庫被定義在NDK源目錄下的android_native_app_glue.[h|c]文件中。此幫助程序庫定義了一個由開發(fā)人員執(zhí)行的android_main(…)函數(shù),。android_main(…)函數(shù)旨在保持開發(fā)人員主應用程序流控制,,且可由幫助程序庫通過唯一線程調(diào)用。這樣,,庫即可幫助開發(fā)人員避免發(fā)生與在主NativeActivity線程中運行回調(diào)代碼相關的堵塞問題,。幫助程序庫定義的android_app架構(gòu)實例將被傳至android_main(…)函數(shù)。此架構(gòu)包含有一個嵌入ALooper架構(gòu)實例,,可以支持應用程序偵聽活動生命周期事件,,如“pause”或“resume”,及設備輸入事件,。
 
 
圖2 - 使用NDKr5以本機代碼編寫的android_mail函數(shù)示例
 

NDK將加速平板優(yōu)質(zhì)內(nèi)容的生產(chǎn)
在嘗試了新功能和提供的NativeActivity示例后,,我對修訂版NDK的新式樣產(chǎn)生了深刻的印象。正如我們可以期待在新的一年中會有更多的Android平板設備運行2.3 (Gingerbread),,我相信通過簡化潛在ARM架構(gòu)的利用,,在為更大屏幕的設備加速創(chuàng)建優(yōu)質(zhì)應用程序內(nèi)容方面,新的NDK將會拌演重要角色,。
 
趕快親身體驗吧,!您現(xiàn)在可以從谷歌獲得NDKr5包裹、文檔及示例,,有關NativeActivity的詳細信息,,請參見此處。您還能從Android開發(fā)人員頁面找到許多其它Android 2.3增強內(nèi)容,。
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。