Android 2.3 (Gingerbread) NDK现在更加接近纯本机开发
2011-08-08
随着近期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-82306116;邮箱:aet@chinaaet.com。