隨著近期Gingerbread的發布及基于ARM的Android每日激活數量達到300,000(參見James Bruce的博客),開發人員迎來了前所未有的好機遇。開發人員所使用的工具也比以前要好。Gingerbread的更新引起了對如何支持開發人員為快速成長的消費市場創建優質內容的強烈關注。
Android很早就隨軟件開發套件(SDK)提供了一套本機開發套件(NDK)。NDK可以支持以C和/或ARM匯編代碼創建本機函數。Java應用程序可以通過Java本機接口(JNI)調用這些函數。一位筆名為ARM_DaveB的ARM首席軟件工程師寫了一篇關于NDK的精彩博客。
盡管NDK的工作模式旨在實現專門任務,但我們通過與許多Android應用程序開發人員交談發現,他們更愿意將整個應用程序嵌入一個本地庫。他們只愿意創建一個非常小的Java封裝來處理應用程序生命周期管理并訪問本機代碼無法訪問的API。瘋狂流行的Rovio專營游戲“憤怒的小鳥”,及曾經風靡一時的Mozilla Firefox瀏覽器均是采取這方式的典范。

圖1 - Mozilla Foundation Firefox for Android
新NDK中的增強本機API類別
隨著Android 2.3 (Gingerbread) SDKr8和谷歌NDKr5的發布,許多事情都發生了改變!對于那些使用過NDK的有經驗的開發人員,谷歌推出了一系列可用于本機代碼的API擴展功能。這將極大地改進本機代碼的性能并提高其多功能性。增強的本機API類包括:
輸入和傳感器事件
基于Khronos OpenSL ES標準的Audio API
基于Khronos EGL標準的EGL界面
適用于圖形資源的資源管理器API
NativeActivity類轉變NDK工作模式
然而,最為顯著的變化則是引入了NativeActivity類。這一新功能代表著NDK工作模式的重大轉變。本機代碼的NativeActivity類附加功能支持應用程序生命周期管理,而窗口管理則可在Java外執行。它可以有效地將“main()”從Java轉至C。這意味著可以完全使用C/C++/ARM匯編代碼來編寫應用程序,而無需開發Java或JNI捆綁包。它賦予了開發人員選擇Java或C的真正自由權力,從而進一步為Android平臺上的應用程序開發打開了一個開發人員社區的超集。
新的NativeActivity類與當前一些激進的NDK用戶編寫的代碼并沒有什么不同,都將應用程序的大部分移至本地庫。它提供了一個本地幫助程序類以將回調函數捆綁至本機代碼。NativeActivity中的這些方法不僅是源自Java中的標準Activity類,可以提供Java應用程序的靈活性,而且該類還增加了一些處理附加任務的獨特方法,如surfacedChanged(…)和surfaceRedrawNeeded(…)。通過這種方式,應用程序仍舊以Dalvik線程運行,并享有Android應用程序框架模型的相同安全保護和優勢。
新的幫助程序庫簡化了NativeActivity的使用
谷歌創建了一個新的幫助程序庫,作為新NDK的一部分,從而又向前邁進了一步。該幫助程序可以簡化NativeActivity的使用,從而讓新開發人員可以更輕松地掌握它,并快速地在Android平臺中部署本機應用程序。該庫被定義在NDK源目錄下的android_native_app_glue.[h|c]文件中。此幫助程序庫定義了一個由開發人員執行的android_main(…)函數。android_main(…)函數旨在保持開發人員主應用程序流控制,且可由幫助程序庫通過唯一線程調用。這樣,庫即可幫助開發人員避免發生與在主NativeActivity線程中運行回調代碼相關的堵塞問題。幫助程序庫定義的android_app架構實例將被傳至android_main(…)函數。此架構包含有一個嵌入ALooper架構實例,可以支持應用程序偵聽活動生命周期事件,如“pause”或“resume”,及設備輸入事件。

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