eclipse配合Android(安卓)Studio部署Android(安卓)NDK开发环境
目前用ndk做开发已经比较流行了,不管是为了提升性能还是为了加密,使用ndk都可以获得很好的体验
Android Studio目前已经出2.1版,不过对c/c++编辑支持还不是很好,没有语法纠错和自动提示等功能,但是eclipse在这方面就做的不错,可以灵活的生成.so文件
虽然Android Studio可以直接将c源码编译打包进apk,但是目前我还没找到Android Studio生成的.so文件在哪,这样不利于代码的分离和耦合
于是不妨这样做,使用已经过气的eclipse搭建c/c++开发环境,生成.so交给Android Studio使用,更高效的实现NDK开发,现在我们开始配置eclipse开发环境吧。
首先去网上下载android-ndk-r10d-windows-x86_64.exe,在谷歌那边可以下载到最新版的
第二步,双击运行,它会自己解压缩到当前文件夹,注意当前文件夹及其路径不要含有中文
第三步,配置环境变量,在Path中加入刚刚解压的文件夹
下面就可以进入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
按上面的配置输入,其实就是调用sdk生成.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
除了头文件让eclipse自动帮我们生成,c文件的编译也交给ecplise这样就不用再开cmd了,此时需要新建一个编译.c文件的自动编译器,
打开eclipse的project-properties,在左边找到builders,点击new 选择programs如下
按照如上输入,第一个文本框填入的应该是ndk文件夹下的命令台工具的地址,第二个不要忘了填,否则编译的时候会报一个异常AndroidNDK:YourAndroidapplicationprojectpathcontainsspaces: 'C:/ ./ Sett ings/'
首先将之前自动生成的“项目名.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文件:
现在我们可以把.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库》
更多相关文章
- Android——开发环境简介
- 写一个自己的 Android(安卓)Hidl Service
- Android应用资源的使用方法(数组、颜色、尺寸、字符串、布尔、整
- 「Android」 APK瘦身探索
- 最火的Android开源项目(二)
- Android学习笔记(4)---模拟手机拨号器
- RSA公钥、私钥的生成详解,包含Java、PHP、Android、iOS端
- Android布局类型资源(二)---XML、drawable、layout
- Android(安卓)studio 制作aar 使用Gradle发布项目到JCenter仓库