随着AndroidNDK(本机开发套件)披露了许多的新设备和新功能,现在我们可以充分利用这些ARM设备了。下面列举了一些快速提示,希望对您有所帮助。
1 - 关注目标
最新的设备一般是ARMv7,这意味着它可以使用v7版本和功能。最新版的NDK增加了ARMv7和NEON代码支持,可以实现关键循环操作和媒体操作优化,远超其它方法。NDK提供小型静态库,可以帮助您识别运行时的选项。有关如何使用这些功能的示例,请参见NDK样本目录中的hello-neon示例项目。
v6是较旧的设备,但是NDK未提供专门支持,您需要自己选择是安全地构建v5TE还是冒险尝试可能是v5TE的设备。如果您对速度无甚要求,并清楚目标硬件是什么,则可以尝试构建v6。尽管无法避免狂热爱好者将新版的OS装入旧硬件上,但事实是支持Android 2.0及以上版本的最新设备通常是基于ARMv7的。如果有选择的话,最好专注于采用NEON实施方案的ARMv7。
2 - 不要仓促优化
除非您计划移植现有的C++应用程序,否则不要仓促编译本机代码。首先确保应用程序正确运行并仔细地profiling配置。成为瓶颈的要素通常是您意想不到的。近期的手持设备都具有两级缓存,有时还有用于节省电量的时钟调度,再加上Google为了提高OS性能而付出的长期努力,我们将会看到更多惊喜。
3 - 优化,悄无声息
不留痕迹。为了得到额外的运行周期会诱使您打破设计,但如非特殊情况,应避免这样。执行优化时,轻轻进入,迅速将应用程序关键部分转为本机或汇编代码,然后不留痕迹地退出。这样,您不用牺牲可维护性和调试便利性。当然,如果您确定重新设计可以带来足够的速度且值得付出代价,则可放手大干。
4 - 围绕优化实施重构
设计完成后,务必重新排列代码以使其更加适于优化,但一旦本机代码开始工作,则要避免修补过度。Java代码更易重新排列和调试。通常应先在Java层面优化,以便让逻辑块接受本机代码。在移植本机代码时,在Java层面改变算法或数据结构更具优势且更易处理。
5 - 维护Java的异常处理
执行不支持的本机代码是个糟糕的主意;即使理想状态下,它也可能造成应用程序意外退出。开发人员可以大胆推测本机代码是否与运行程序的设备兼容,只要有Java实施方案,您可以随时退回Java。这就是技巧4中优化Java版本的好处所在。
6 - 小心的分配内存
不论何时,在Java中尽可能用Java来分配,而不要拖延到以后调用C函数来解围。这样才能最大程度地减少泄漏并使Java代码保持简洁。如果有长期操作,则应在本地分配暂存空间,但请注意您的指针 - 编写大量Java代码时,围绕指针准则的旧C语言习惯可能会忘得很快。
7 - 谨慎采用多线程
已经有好几个采用多ARM内核的开发平台,客户使用它们的速度可能比您想像的更快。这样的想法会诱使您将所有任务都分割为多线程。总的来说这是个好主意,但切记,加重系统负载尽管能提升速度,也会牺牲用户体验。当然,巧妙使用线程非常地有效。Android系统自身会创建几条线程去运行一个应用程序,然而它们一般都在等待事件,所以如果您自己创建太多活动执行线程,可能会削弱它们的运行能力,适得其反地降低整体用户体验。
8 - Java层的线程
如果将逻辑分为多个线程,应尽可能通过Java执行,而不要采用Pthreads。使用Java VM管理访问可以降低风险,且有更多的语言层工具。如果您担心设置成本,采用现有的小型工人池应该不会太困难。切记将长期任务的更新发回到主UI线程,以确保用户知悉。另外请牢记一条重要的Android NDK规则:不要在UI线程上运行本机代码。事实上,最好不在UI线程上运行任何Java代码;Android有相应的API(请查看Handler类)可在非UI线程上经济运行任务。
9 - 懂得何时使用汇编程序
C或C++可以立即带来速度提升,而不需要编写比Java要难以维护的代码。也可通过将代码关键部分转换为汇编程序来实现进一步提升,但需要在耗费的时间、精力与最终受益之间做出权衡。最好先发布工作代码,在以后发布快速升级,而不是永无休止的调试。尽管如此,如果您十分清楚想要做什么,也许可以获得更多性能。
切记要检查发布出来的GCC,这一点至关重要。objdump是一款非常有用的工具,谷歌NDK下载目录位于build/prebuilt/linux-x86/arm-eabi-4.4.0/arm-eabi/bin下提供了一种版本。
10 - 懂得如何使用NEON
NEON是一个非常强大的工具,在理想环境中,可给优化汇编程序提供8倍的性能提升,但并不适用于所有环境。要了解如何充分利用NEON,请阅读本博客中的NEON指南。
NEON加载和存储处理遗留工作
Dave,ARM首席工程师,致力于虚拟机的维护、优化、检查至少十年,为硬件工程师解答有关虚拟机的问题。在Java领域经营多年后,他得以抽出时间研究工具,现在正着力于研究并理解Android。
分享到:
相关推荐
“【eoe+Android特刊】第十九期:Android自定义控件.pdf”虽然不是直接关于NDK,但它提供了关于Android自定义控件的信息。在某些情况下,使用NDK可以提高自定义控件的性能,例如当需要进行复杂的图形绘制或物理模拟...
### Android NDK-Stack 使用说明 #### 一、概述 在使用Cocos2d-x、JNI及Android NDK进行开发时,经常会遇到调试困难的问题。尤其是对于C/C++代码的调试,由于涉及到本地代码与Java层之间的交互,使得调试过程变得...
NDK包含多个版本,如本例中的"android-ndk-r23b",代表着第23版的NDK,适用于Linux操作系统。 NDK的使用场景主要包括以下几点: 1. **性能优化**:对于CPU密集型任务,如图形渲染、物理模拟或者加密算法,使用C++...
Android NDK(Native Development ...通过阅读“android_jni操作指南.pdf”,你可以更深入地了解这些步骤和技巧,从而更好地掌握Android NDK的基本操作。不断实践和学习,你将能够充分利用NDK提升你的Android应用性能。
Android NDK是一个重要的工具集,它允许开发者在Android应用中使用原生代码,如C++和...通过这个"HelloNdk"实例,开发者可以逐步学习并掌握Android NDK开发的基本流程和技巧,进一步提升Android应用的性能和功能。
本文将深入探讨Android NDK的基础开发知识,帮助你掌握其核心概念和应用技巧。 1. **NDK概述**: - NDK是Android开发中的一个重要补充,与Java SDK相结合,可以充分利用本地代码的优势,提高应用的性能,特别是...
**Android NDK 开发入门详解** Android NDK(Native Development Kit)是Google提供的一款用于在Android平台上进行原生代码开发的工具集...通过不断实践,你可以掌握更多的NDK技巧,开发出更具特色的Android应用程序。
总的来说,Android NDK开发涉及广泛的系统知识和编程技巧,从安装配置到实际编程,都需要开发者具备扎实的C/C++基础和对Android系统的深入理解。通过阅读官方文档(如"android_ndk_dev_guide"中的documentation.html...
Android NDK(Native Development Kit)是...通过这个项目实战,你可以从实践中学习到NDK的各个方面,不仅理解原理,还能掌握实际操作技巧,这对于成为一名全面的Android开发者,特别是对于游戏开发,是极其有价值的。
《Android NDK与C语言实现图像过滤器的详解》 Android NDK(Native Development ...通过学习该项目,开发者不仅可以掌握Android NDK的使用,还能深入理解图像处理的原理和技巧,为开发高性能的图像应用打下坚实基础。
Android NDK(Native Development Kit)是Android平台开发中的一个重要工具,它允许开发者使用C和C++编写部分应用代码,以实现性能敏感或需要调用硬件底层功能的部分。对于初学者而言,理解NDK的工作原理和如何在...
掌握 Android NDK构建系统 - 第1部分:使用ndk-build的技术 本文不是“Hello world!” - NDK的类型教程。虽然我仍然会快速介绍ndk-build的基本知识,但它不是本文的重点。相反,我将总结一些非常有用的NDK技术和我...
总之,Android NDK是Android开发中的一个重要组成部分,它为开发者提供了更多灵活性和性能优势,但也带来了一些额外的挑战。正确理解和使用NDK可以帮助开发者创建出更高效、更安全的Android应用。
在移动应用开发领域,Android NDK(Native Development Kit)作为一个重要的工具集,允许开发者使用C和C++编写部分程序,以提升性能,尤其是处理密集型计算或硬件交互的任务。NDK R4版本是其历史的一个里程碑,为...
总之,《细说Android 4.0 NDK编程 源码》这本书涵盖了NDK开发的多个重要方面,从基础概念到高级技巧,再到实战源码解析,是学习Android原生编程不可多得的参考资料。对于希望提升Android应用性能,或者需要利用C/C++...
在实际应用中,NDK的使用通常分为几个步骤:配置NDK环境,编写C/C++代码,创建Android.mk或CMakeLists.txt构建文件,使用ndk-build或Android Studio的CMake插件进行编译,最后将生成的.so文件打包进APK。 然而,NDK...
6. **调试技巧**:使用NDK的gdb进行原生代码调试,或者结合Android Studio的NDK调试功能。 7. **NDK库的分发和更新**:理解AAR格式,如何将本地库打包并发布到Maven仓库,以及在Gradle中管理库版本。 8. **安全...
总之,Android NDK R9教程涵盖了从环境配置到实际开发的所有关键步骤,通过NDKhi工程源码,开发者可以深入学习NDK的使用技巧和最佳实践,提高应用的性能和功能。随着对NDK的理解加深,开发者可以更好地利用硬件资源...
"android-ndk-r10d-windows-x86_64"是NDK的一个特定版本,R10d是其发行版号,表明这是NDK的第10次重大更新。此版本是为64位Windows操作系统设计的,意味着它可以在64位的Windows环境下运行,为开发者提供了在Windows...