安卓开发工具:安卓已经和我们的生活密不可分,一些APP极大的改善了我们的生活,越来越多的人...
Android NDK是安卓原生开发工具集合。帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器,并提供了相应的mk文件隔离平台、CPU、API等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
NDK是用来给安卓手机开发软件用的,但是和SDK不同的是它用的是C语言,而SDK用的是Java语言。
NDK开发的软件在安卓的环境里是直接运行的,一般只能在特定的CPU指令集的机器上运行,而且C语言可以直接和硬件对话,因此一般用它开给手机开发驱动或底层应用;而SDK开发出的软件在安卓上靠Dalvik虚拟机来运行,所以如果没有特殊的需要或署专门针对某个硬件去开发,那就一般用SDK
Android NDK 特点
使用原生SDK编程相比Dalvik虚拟机也有一些劣势,比如程序更加复杂,兼容性难以保障,无法访问Framework API,Debug难度更大等。开发者需要自行斟酌使用。
众所周知,Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序。
NDK包括了:
从C / C++生成原生代码库所需要的工具和build files。
将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中。
支持所有未来Android平台的一些列原生系统头文件和库。
在Linux上,尤其是Debian/Ubuntu上进行安装,非常顺利,不会有什么问题。但是在Windows平台进行安装,就不那么轻松了,根据Google的建议,我们需要安装cygwin,而且特别提醒一定在安装时,注意把make和gcc包含进去。
首次安装时,会遇到的问题。由于没有经验,第一次安装,统统采用默认设置,由此遇到的第一个问题:
your C compiler doesn't seem to work:
gcc.exe:/temp/android-4068-test.c: No such file or directory
gcc.exe: no input files
根据错误信息,可以推定应该是安装cygwin时没有进行正确的设置,要选择上make和gcc的 包选项,
为了以防万一,遗漏掉依赖的包,干脆把Devel包从default变为install,这样这个包下所有内容一律安装。
安装好NDK之后,最好花上几分钟读一读/docs目录下文档。特别是要完整阅读OVERVIEW.TXT,读完以后你就可以明白NDK的初衷以及如何使用它了。
把native source放在/sources/,当然也可以建立链接。
创建/sources//Android.mk,描述native sources。
创建/apps//Application.mk,描述Android applicaiton和navite sources。
在NDK路径的最顶极目录里执行make命令来build native code : make APP
最后,使用SDK工具,以通常的方式编译应用,SDK的build工具会将共享库打包进apk的文件。
旦安装完NDK之后,就可以使用这些命令,从NDK的根目录下build共享库了:make APP=hello-jni 这将会编译/sources/samples/hello-jni/hello-jni.c,并输出共享库到/apps/hello-jni /project/libs/armeabi/libhello-jni.so.由于实际工作中,我们很少会把工程放在/apps下,因此下面将尝试如何 将应用和ndk分开来放置。
拷贝/apps/hello-jni/project,重命名为my-hello-jni,然后使用”Import from Existing Source”,创建名称为my-hello-jni的android工程。在/apps下新建文件夹my-hello-jni,并从hello-jni 下拷贝Application.mk到新文件夹下,打开该文件,修改APP_PROJECT_PATH为正确的路径,注意这里的路径应该是cygwin下 的路径,例如我的路径是:/cygdrive/e/workspace/my-hello-jni。
完成之后,到ndk的根路径下,执行make APP=my-hello-jni,然后即可成功看到结果:
Android NDK: Building for application 'my-hello-jni'
Compile thumb : hello-jni <= sources/samples/hello-jni/hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => /cygdrive/e/worskspace/my-hello-jni/libs/armeabi