浅谈利用Android NDK编译C/C++文件的经历

来源:互联网 发布:网络直销 编辑:程序博客网 时间:2024/05/29 11:09

因为工作的需要,有幸经历了一次在linux下的eclipse中利用android的NDK编译C/C++代码成.so文件,然后在java层利用JNI的方式调用C/C++方法的过程。作为一个新手,在没有任何人帮助的,只能通过google查找资料的情况下,要走通这个过程还是很痛苦的。特别是C/C++代码中还存在不少语法错误。

首先要配好环境,Eclipse+CDT+gcc/g++,有的eclipse已经帮你把CDT装好了,你可以通过Help->About eclipse中的选项进行查看。

环境配好,你就可以新建一个Android Application Project了,建好后直接在工程名文件下新建一个jni的文件夹,例如我的工程名为sigcomp,jni的位置就是sigcomp->jni。然后在jni文件夹下创建Android.mk文件,位置一定要在jni->Android.mk下,否则build的时候会报错。然后你可以把C/C++代码直接放在jni文件夹下,也可以在jni下创建一个src的文件夹,将C/C++代码放在src中。当这些准备好后,你就可以开始通过NDK的方式将C/C++代码build成.so文件了,具体的方法可以参考下面这篇文章中的步骤。

http://blog.csdn.net/yangchang999/article/details/8082764

在build的过程NDK 会检查C/C++代码的语法错误,因此你最好是在之前先用一个C/C++ project 编译这些C/C++代码,确保语法正确。然而这也不能保证NDK build的过程中不会报语法错误,因为NDK中的编译器和我们在C/C++ project中的编译器不一样,NDK对C的支持度比较好,对C++的支持度稍微欠缺点。但在这样可以保证在NDK build的过程中不会出现过多的语法错误。

需要注意的是如果你的C++代码中出现了很多C++特有的库,例如<iostream>,<list>等,那么你还需要在jni的文件夹下添加一个Application.mk文件,文件内容为:

APP_STL := stlport_static

APP_STL := gnustl_static

另外还需要注意的是NDK只对.c和.cpp的后缀的文件识别,当然还有.h文件了,其他的就不大认识,例如.cxx后缀的文件,虽然有些编译器可以把.cxx当作.cpp编译,但是NDK中的编译器却不行。之前就是因为这个问题,耗费了我一个周末的时间。特别注意了。