Android开发中,如果使用C/C++开发JNI,必须使用Andriod NDK编译成*.so文件,这样Android的java应用层才能调用。
使用NDK编译C/C++代码,网上的通常做法是使用命令行(或者终端)输入编译命令:NDK-build来实现的。这种做法对初学者理解NDK很有帮助,但是当我们熟悉NDK之后,还每次都用命令行编译就显得有点繁琐了。
鉴于大多数Android开发都使用Eclipe IDE,所以如果能在Eclipe中使用NDK编译C/C++代码,能给我们开发人员带来很多方便。下面就介绍下如在Eclipe中使用NDK编译C/C++代码。
1, 新建C/C++工程
通过菜单创建一个新的C工程,输入工程名为ndk_hello,工程类型选择Shared Library,如下图:
2, 创建工程目录结构
通过系统资源管理器,在文件夹ndk_hello目录下创建一个子目录,名字一定要为jni。再在jni目录下创建一个源代码目录,名字取为:hello。回到Eclipse中,右键点击工程ndk_hello,选择refresh,这样就能看到刚才新建的目录结构了。再右键选中目录hello,通过New->Source file,创建源代码文件hello.c,确定之后整个工程目录结构如下:
注意:那个Includes是系统的目录,不属于我们工程的代码,所以不用关注。
3,添加源代码
在原文件hello.c中添加函数和代码,整个文件内容如下:
4,创建NDK Builder
通过右键菜单,打开工程属性对话框。在左侧选择Builders,这样右侧会列出已有的Builders,一般默认的有CDT Builder和Scanner Configuration Builder。点击New,
弹出configuration对话框,在列表中双击Program,在编辑窗口输入我们想要的内容。
在Main page上,Location栏为ndk-build文件的位置(如果是Windows系统,为ndk-build.cmd文件),该文件一般在NDK安装目录的根目录下,我们可以通过Browse File System...来查找NDK安装目录;Working Directory栏为工程目录,可以通过Browse Workspace...选取当前工程的从目录。具体如下图:
在Build Options page上, 先点选Specify working set of relevant resources,然后点击按钮Specify Resources。在工程目录列表中,勾选目录jni,如下图:
5,创建Android.mk
用NDK命令行编译过代码的同学都清楚文件Android.mk是用来干什么的,在此不在多说。首先在目录jni下创建文件Android.mk,其内容为:
include $(all-subdir-makefiles)
然后在目录hello下在创建文件Anroid.mk,其内容为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libhello
LOCAL_SRC_FILES:= \
hello.c
LOCAL_CFLAGS := \
-DHAVE_CONFIG_H \
-DFPM_DEFAULT
include $(BUILD_SHARED_LIBRARY)
6,编译
好了,所有准备工作都做好了!在Eclipse中,选中工程,然后选择Build Project,在输出窗口中看到:
Compile thumb : hello <= hello.c
SharedLibrary : libhello.so
Install : libhello.so => libs/armeabi/libhello.so
就说明成功了!