Android:在Eclipe中使用NDK编译C/C++工程

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

就说明成功了!


1.) 在项目根目录下创建jni目录,下面是要放进去的第一个文件Android.mk LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main_jni #LOCAL_CFLAGS := LOCAL_SRC_FILES := main.cpp #LOCAL_LDLIBS := include $(BUILD_SHARED_LIBRARY) 2.) 在jni目录创建main.cpp #include using namespace std; #ifdef __cplusplus extern "C" { #endif class Test { public: Test(){}; ~Test(){}; int SomeFunc() { return 20140522; } }; jint Java_com_yxiaolv_testjni_MainActivity_SomeFunc(JNIEnv *env, jobject thiz) //红色部分必须和你java类包名一致 { Test *test = new Test(); return test->SomeFunc(); } #ifdef __cplusplus } #endif //将下面第3.)至第5.)步的代码片段放到eclipse创建android项目时自动产生的MainAcitivity.java就可以了 3.) 在Java Activity代码添加对这个jni的调用 (本例是MainActivity.java ): static { System.loadLibrary("main_jni"); } 4.) 在调用者Activity定义函数 native int SomeFunc(); 5.) 在activity调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = new TextView(this); int i = SomeFunc(); tv.setText( String.valueOf(i) ); setContentView(tv); } //下面的第6.)和第7.)步可以被集成的.cproject 和在.project添加plugin之后一键编译,不用单独起dos窗口了。由于没有找到生成.cproject的工具,只能手写,所以本文不使用该方法,以后找到了好的方法再补充。委屈 6.) 在dos窗口,cd到项目路径下,运行ndk-build 命令,该命令会自动搜索该路径子目录下的native项目,进行编译。 (Note: 编译完成后不要忘记了刷新项目)。 7.) 重新编译和部署项目,就可以看到已经包含了.so的apk运行在目标机上了。 摘自 http://stackoverflow.com/questions/13654678/how-compile-c-project-via-android-ndk 1). 如果不知道怎样安装和使用windows版的NDK,可以参考 http://blog.csdn.net/do_script/article/details/26478583
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值