[计算机软件及应用]第11章 Android NDK开发
11.1 NDK简介 Android NDK 程序开发人员需要仔细权衡Android NDK所能提升的运行效率与增加的复杂程度是否在可接受的范围内。选择使用Android NDK应主要出于以下两种目的 一是Android应用程序框架无法满足运行效率时 二是需要使用大量已有C/C++源代码 11.1 NDK简介 Android NDK 最新版本的Android NDK支持ARM指令集,包括ARMv5TE、ARMv7-A和x86 ARMv5TE机器码可以在所有基于ARM的Android设备上使用,ARMv7-A机器码则只能运行在具有ARM7 CPU的Android设备上,如Verizon Droid手机和Google Nexus One手机 ARMv7-A与ARMv5TE指令集的差别主要在于,ARMv7-A支持硬件FPU(浮点运算单元)、Thumb-2和NEON指令集 程序开发人员可以针对不同目标设备,在Android NDK中使用不同的ARM指令集支持不同的架构,也可以同时将支持多个架构的指令集编译到同一个apk文件中 11.2 NDK 开发环境 NDK开发环境包括Eclipse、Android NDK和Cygwin Eclipse用了建立Android工程和编写程序代码 Android NDK提供编译脚本和工具 Cygwin完成Linux环境下的交叉编译,将C/C++的源代码文件编译成Android系统可调用的共享连接库文件 11.5 NDK 高级示例 Application.mk文件 与APP_CPPFLAGS相同,后续版本将取消此变量 否 APP_CXXFLAGS 指定STL类型 APP_STL 指定ABI类型 APP_ABI 指定Android.mk脚本所在的目录,缺省在Anroid NDK\jni\Android.mk APP_BUILD_SCRIPT 编译C++代码时的编译器参数 否 APP_CPPFLAGS 说明 强制使用 变量 11.5 NDK 高级示例 Android.mk文件 helllo-neon示例的Android.mk文件,不仅声明了需要编译的模块信息,还引用了Android NDK的一个静态库cpufeatures Cpufeatures是用来检测CPU类型的模块,其源代码在Android NDK\sources\android\cpufeatures目录中,共3个文件,Android.mk、cpu-features.h和cpu-features.c分别是模块声明文件、头文件和源代码文件 分析cpufeatures中Android.mk代码可以发现,这些文件为Android NDK编译系统提供了静态库cpufeatures,供其他模块在检测CPU类型时调用 11.5 NDK 高级示例 Android.mk文件 cpufeatures中Android.mk文件的代码如下 1 LOCAL_PATH := $(call my-dir) 2 3 include $(CLEAR_VARS) 4 LOCAL_MODULE := cpufeatures 5 LOCAL_SRC_FILES := cpu-features.c 6 LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) 7 include $(BUILD_STATIC_LIBRARY) 11.5 NDK 高级示例 Android.mk文件 cpu-features.h头文件声明了android_getCpuFamily()函数,而具体的C语音实现则在cpu-features.c文件中 cpu-features.h的函数声明代码如下 extern AndroidCpuFamily android_getCpuFamily(void); 在了解cpufeatures模块的用途和函数后,下一步对helllo-neon示例的Android.mk文件进行分析 helllo-neon示例Android.mk文件的代码如下 11.5 NDK 高级示例 helllo-neon示例Android.mk文件代码 1 LOCAL_PATH := $(call my-dir) 2 include $(CLEAR_VARS) 3 4 LOCAL_MODULE := helloneon 5 LOCAL_SRC_FILES := helloneon.c 6 7 ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) 8 LOCAL_CFLAG
原创力文档

文档评论(0)