eclipse配合Android Studio部署Android NDK开发环境

来源:互联网 发布:linux命令行删除字符 编辑:程序博客网 时间:2024/06/05 10:48

Android Studio目前已经出2.1版,不过对c/c++编辑支持还不是很好,没有语法纠错和自动提示等功能,但是eclipse在这方面就做的不错,可以灵活的生成.so文件

虽然Android Studio可以直接将c源码编译打包进apk,但是目前我还没找到Android Studio生成的.so文件在哪,这样不利于代码的分离和耦合

于是不妨这样做,使用已经过气的eclipse搭建c/c++开发环境,生成.so交给Android Studio使用,更高效的实现NDK开发,现在我们开始配置eclipse开发环境吧。

配置NDK环境变量:

首先去网上下载android-ndk-r11b-windows-x86_64.exe,以上版本在谷歌那边可以下载到最新版的,翻墙地址:点击打开链接

第二步,双击运行,它会自己解压缩到当前文件夹,注意当前文件夹及其路径不要含有中文

第三步,配置环境变量,在Path中加入刚刚解压的文件夹


然后需要配置一下Eclipse的环境变量,方法是点击windows-Preference,在左边的目录中选择Android中的NDK,然后选择NDK目录的build目录,如下图


下面就可以进入eclipse开发了

建立基于NDK的eclipse项目:

首先新建一个项目,并给这个项目添加jni支持。


在右侧文件管理器中点击右键,Android tools-add native support



点击之后项目的目录结构会发生一些变化,多出一个 “项目名.cpp”,Android.mk文件,这两个文件将是很重要的两个文件




添加代码提示和相关头文件:

然后为项目添加c++库文件支持,主要是增加c/c++编辑的时候的代码提示,还是右键项目->properties->C/C++ General ->Paths and Symbols,点击右侧add,会弹出一个对话框

在弹出的对话框选择file system,寻找ndk目录下的\platforms/android-最低支持版本号/arch-arm/usr/include文件夹,点ok

对话框关闭后点apply

这时项目的目录又会发生一些变化,会多出一个Includes,这里面是NDK开发要用到的一些头文件



做完这一步之后,进行cpp文件编辑就会有熟悉的代码提示和纠错功能了


自动生成头文件:

现在可以添加头文件自动生成器,如果不填加这个,需要使用cmd 手动书写指令来生成.h头文件,比较费时间,好在eclipse可以获取到项目路径并调用cmd来帮我们自动完成这些,首先点击如下按钮,点击External Tools Configurations


在弹出的配置对话框中新建一个builder

按上面的配置输入,其实就是使用命令行调用NDK生成.h头文件的过程




${system_path:javah}${project_loc}\jni-classpath ${project_loc}\bin\classes;d:\sdk\platforms\android-14\android.jar -d ${project_loc}\jni -jni ${java_type_name}
这里的最后一句其实就是使用命令行生产头文件的指令

注意这里的android-14要取你的sdk文件夹里找找最小的,比项目的minSdk小就可以

现在我们开始生成.h头文件:首先选中要生成头文件的.java文件,里面事先写好native方法,然后点击刚刚生成的编译器,如下


马上就生成了一个以包_类名.h的头文件,内容一般如下

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_ndkexcersise_JNIUtils */#ifndef _Included_com_example_ndkexcersise_JNIUtils#define _Included_com_example_ndkexcersise_JNIUtils#ifdef __cplusplusextern "C" {#endif/* * Class:     com_example_ndkexcersise_JNIUtils * Method:    getStringFromC * Signature: (II)I */JNIEXPORT jint JNICALL Java_com_example_ndkexcersise_JNIUtils_getStringFromC  (JNIEnv *, jclass, jint, jint);#ifdef __cplusplus}#endif#endif

自动编译c/c++文件为so库:

除了头文件让eclipse自动帮我们生成,c文件的编译也交给ecplise这样就不用再开cmd了,此时需要新建一个编译.c文件的自动编译器,

打开eclipse的project-properties,在左边找到builders,点击new 选择programs如下


按照如上输入,第一个文本框填入的应该是ndk文件夹下的命令台工具的地址,第二个不要忘了填,否则编译的时候会报一个异常 Android NDK: Your Android applicationproject path contains spaces: 'C:/ ./ Sett ings/'

注:如果不只想要生成armeabi库,还想要armeabi-v8a,x86,x86-64,mips等cpu的支持,可以在Application.mk中添加

APP_ABI := armeabi x86 mips

APP_ABI := All

注意:想要编译64位的so库请使用NDK r11以上版本

开始编写c/c++源文件:

做好这些,就可以开始编写C/C++

首先将之前自动生成的“项目名.cpp”文件include 刚刚自动生成的头文件,并实现相应的方法,如下

#include <com_example_ndkexcersise_JNIUtils.h>JNIEXPORT jint JNICALL Java_com_example_ndkexcersise_JNIUtils_getStringFromC  (JNIEnv * env, jclass cls, jint a, jint b){    int sum = a*100+b*100;    return sum;}

然后点击eclipse的run按钮,eclipse就会自动帮我们编译项目里的c文件,并打包成.so文件放在libs/armeabi/目录中,并且命令台输出如下


如果你控制台出现了上面的语句,说你的NDK版本比app的min SDK要大的话

可以在该工程的jni文件夹下,创建(若不存在,才创建)一个名为Application.mk的文件

里面添加这样一句

APP_PLATFORM := android-8 
正常的编译结果是



编译好的.so文件:


将JAVA代码和so库移植到AndroidStudio:

现在我们可以把.so文件转移到Andorid studio中进行使用了,因为包名和类名在.h文件中已经写死,所以我们需要把这个eclipse项目中带有native方法的JNIUtils.java文件打包成jar,然后让Android Studio加载就好了,这样就可以实现c项目和Android项目的分离

那么我们开始打包吧!!!

用eclipse帮我们打包就可以,首先右击项目名,选export


点击jar file,,点next


在对话框中选择要输出的带native方法的.java文件,别的都不要选


点击finish

这样我们就有一个jar包准备导入Android Studio了

那么现在有一个关键问题了,如何把.so文件和.jar文件引入Android Studio呢

可以看我另一篇博文《Android Studio 引入编写好的.so库》


1 0
原创粉丝点击