anroid ndk文档翻译之一:android ndk一览

Android NDK一览


介绍:



Android NDK是一套工具,允许程序开发人员把C和C++编译出来的机器代码嵌入到他们的应用程序包。


重要信息:



Android NDK 
只能够用在Android 1.5 或以后的平台上。


1.0 and 1.1系统不被支持,原因在于1.5的发行版在ABI和工具链上已经发生了一些细小的变化。





I.
Android NDK 目标:


--------------------------



Android VM 允许你的应用程序通过JNI调用在本地代码中实现的方法,简而言之,这意味着:





-
你的程序代码将使用native关键字来声明方法,以指明他们是在本地代码中实现的。例如:



native byte[]
loadFile(String
filePath);





-你必须提供一个本地共享库,来实现这些方法,这个共享库将被打包进你程序中的.apk文件,这个库必须使用标准的unix命名约定,象lib<something>.so这样,并且应该包含一个标准的jni入口(以后会有多个),例如:



libFileLoader.so



-你的程序必须显式地加载库,例如,要在启动时加载它,简单地添加下列代码:



static {



System.loadLibrary("FileLoader");



}


注意,你不应该使用’lib’前缀,和’.so’后缀。


Android NDK是Android SDK的补充,可以帮助你:





-
生成与JNI兼容的共享库,能够运行在Android 1.5 及以后使用ARM CPU的平台上。





-
复制共享库文件到你的应用程序项目的适当路径当中,这样他们就能被自动添加到你最终的.apks包中。


-
NDK的以后修订版中,我们打算提供帮助你通过gdb连接来调试原生代码的工具,并且提供尽可能多的符号信息。


此外,Android NDK还提供:


-
一套交叉工具链(编译器,链接器,等等),能够在linux,OS X,和windows等系统下,生成原生ARM的机器代码。



-
一套Android平台提供的稳定的原生API的系统头文件,这些头文件定义保证在以后的发行版本中获得支持。


重要信息:


记住:Android系统的多数原生系统库都不是静止不变的,在以后平台的发行版或升级版中,可能会发生剧烈的变化,甚至会被删除,


-一套编译系统,允许开发人员写很短的生成文件描述需要编译的源代码,编译系统处理所有的关于toolchain/platform/CPU/ABI等麻烦的细节问题。此外,NDK的以后升级版中,可能会添加许多关于


工具链,平台和系统接口的支持,这些支持并不需要开发人员改变生成文件(或以后生成的其他什么文件)




II. Android NDK 
不能达成的目标:


--------------------------


NDK并不是写在Android设备中运行的原生代码的一个好的方式,特别强调,你的应用程序仍然应该使用java语言写,适时地处理Android系统事件,避免出现程序没响应对话框,或者处理Android程序的生命周期。



注意,无论如何,用原生代码写一个复杂的程序,用一个小的程序包装器来恰当地启动/终止它,这是可能办到的。


因为许多环境中的操作要求有开发人员具体的指令,在写原生代码时,并不能做到通用,所以我们强烈推荐一种JNI的好的运用方式,这包括:


不能直接访问通过直接的原生指针去访问VM对象中的内容,例如,你不能安全地获取一个指向字符串对象的16位字符数组的指针,然后在循环中迭代。


在想要在原生代码当中保留VM对象的句柄时,要求显式的引用管理,




NDK只提供很有限的被Android平台支持的头文件和库,但是Android系统包含很多原生共享库,这些不被支持的库,应该被认为是可能在以后平台的发行版和升级版中,在实现细节上会发生激烈变化的部分。


如果一个Android系统裤没有被NDK头文件显式地支持,那么程序就不应当依赖它,否则就会有在以后升级版中受破坏的风险。已经选择的系统库将会被逐渐加入到稳定的NDK API中。

你可能感兴趣的:(android,jni,文档,工具,平台,程序开发)