Android NDK编程浅入深出之--了解NDK

来源:互联网 发布:内网连接软件 编辑:程序博客网 时间:2024/04/30 05:03

       NDK 全称 Native Development Kit ,是 Android 原生软件开发包的相关工具集,用来扩展 Android SDK的功能。
       在官方网站下载 Android NDK 的安装包,下载地址是http://developer.android.com/sdk/ndk/index.html,打开下载页面后选择的下载文件为 android-ndk-xxxx-windows.zip 。Android NDK 编译环境支持 Windows XP、Linux 和 MacOS 。
      NDK 组件结构
       Android NDK 不是一个单独的工具;它是一个包含 API 、交叉编译器、链接程序、调试器、构建工具、文档和示例应用程序的综合工具集。以下是 Android NDK 的一些主要组件:
              ARM 、x86 和 MIPS 交叉编译器
             构建系统
             Java 原生接口头文件
             C 库
             Math 库
             POSIX 线程
             最小的 C++ 库
             ZLib 压缩库
             动态链接库
             Android 日志库
             Android 像素缓冲区库
             Android 原生应用 APIs
             OpenGL ES 3D 图形库
             OpenSL ES 原生音频库
             OpenMAX AL 最小支持
      打开NDK 的安装目录可以看见一下文件及目录:
             ndk-build:一个 shell 脚本,是 Android NDK 构建系统的起始点。 
             ndk-gdb:一个 shell 脚本,允许用 GUN 调试器调试原生组件。 
             ndk-stack:一个 shell 脚本,可以帮助分析原生组件崩溃时的堆栈追踪。 
             build:该目录包含了 Android NDK 构建系统的所有模块。
             platforms:该目录包含了支持不同 Android 目标版本的头文件和库文件。Android NDK 构建系统会根据具体的 Android 版本自动引用这些文档。
             samples:该目录包含了一些示例应用程序,这些程序可以体现 Android NDK 的性能。示例项目对于学习如何使用 Android NDK 的特性很有帮助。
             sources:该目录包含了可供开发人员导入到现有的 Android NDK 项目的一些共享模块。
             toolchains:该目录包含目前 Android NDK 支持的不同目标机体系结构的交叉编译器。Android NDK 目前支持ARM、X86 和 MIPS 机体系结构。Android NDK 构建系统根据选定的体系结构使用不同的交叉编译器。
       NDK 构建系统
        Android NDK 的构建系统是基于 GUN Make 的。该构建系统的主要目的是使开发人员能够用很短的构建文档来描述原生的 Android 应用程序;该构建系统还处理了包括替开发人员指定工具链、平台、CPU 和 ABI 等很多细节。封装该构建过程可以在不改变构建文件的情况下,使 Android NDK 的后续更新添加更多对工具链、平台以及系统接口的支持。
        Android NDK 构建系统是由多种 GUN Makefile 片段构成的。该构建系统包括基于渲染构建过程的不同类型 NDK 项目所需要的必要片段。这些构建系统片段可以在 Android NDK 安装程序的 build/core 子目录中找到。虽然开发人员并不会直接接触到这些文件,但知道它们的位置对与构建系统相关的故障很有帮助。
        这里先介绍 Application,mk , Application.mk 是 Android NDK 构建系统使用的一个可选构建文件。和 Android.mk 文件一样,它也被放在 jni 目录下。Application.mk 也是一个 GUN Makefile 片段。它的目的是描述应用程序需要哪些模块;它也定义所有模块的通用变量。以下是Application.mk 构建文件支持的变量:
              APP_MODULES:默认情况下,Android NDK构建系统构建Android.mk文件声明的所有模块。该变量可以覆盖上述行为并提供一个用空格分开的、需要被构建的模块列表。
             APP_OPTIM:该变量可以被设置为release或debug以改变生成的二进制文件的优化级别。默认情况下使用的是release模式,并且此时生成的二进制文件被高度优化。该变量可以被设置为debug模式以生成更容易调试的未优化二进制文件。
            APP_CLAGS:该变量列出了一些编译器标志,在编译任何模块的 C 和 C++ 源文件时这些标志都会被传给编译器。
            APP_CPPFLAGS:该变量列出了一些编译器标志,在编译任何模块的 C++ 源文件时这些标志都会被传给编译器。
            APP_BUILD_SCRIPT:默认情况下,Android NDK构建系统在项目的jni子目录下查找 Android.mk 构建文件。可以用该变量改变上述行为,并使用不同的生成文件。
            APP_ABI:默认情况下,Android NDK 构建系统为 armeabi  ABI 生成二进制文件。可以用该变量改变上述行为,并为其他ABI生成二进制文件,例如: 
                APP_ABI := mips  
          另外,可以设置多个 ABI:
                APP_ABI:=armeabi mips
         为所有支持的 ABI 生成二进制文件
                APP_ABI:= all
        APP_STL:默认情况下,Android NDK 构建系统使用最小 STL 运行库,也被称为 system 库。可以用该变量选择不同的 STL 实现。
                APP_STL :=stlport_shared
        APP_GNUSTL_FORCE_CPP_FEATURES:与 LOCAL_CPP_EXTENSIONS 变量相似,该变量表明所有模块都依赖于具体的 C++ 特性,如 RTTI 、exceptions 等。
        APP_SHORT_COMMANDS:与 LOCAL_SHORT_COMMANDS 变量相似,该变量使得构建系统在有大量源文件的情况下可以在项目中使用更短的命令。  

     




           Android jni编程浅入深出之-- 与原生代码通信      

           Android NDK编程浅入深出之--Android.mk 

           Android NDK编程浅入深出之--访问域

               Android native Socket实现

                    


1 0
原创粉丝点击