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库》
- eclipse配合Android Studio部署Android NDK开发环境
- NDK开发-简介&环境搭建(Eclipse,Android Studio)
- Android开发环境部署—— Eclipse+NDK for Android JNI 的开发环境(linux 环境)
- 【Android】Android Studio配置ndk开发环境
- eclipse部署android开发环境
- Eclipse转Android Studio-NDK开发
- Android Studio开发配置NDK环境
- android-studio(1):配置NDK开发环境
- Android studio之配置NDK开发环境
- Android Studio NDK 开发环境搭建
- Android Studio 2.0 NDK开发环境搭建
- Android Studio NDK开发环境配置
- android studio配置ndk开发环境
- android studio NDK开发环境配置
- 环境配置之Android Studio开发NDK
- Android Studio 2.2 NDK开发环境搭建
- NDK开发 Android Studio环境搭建
- Android Studio 2.2 NDK开发环境搭建
- 使用Xcode和Instruments调试解决iOS内存泄露
- 获取蓝牙MAC地址
- 内存溢出
- 百度静态资源库
- byte bit kb mb g
- eclipse配合Android Studio部署Android NDK开发环境
- eclipse export runnable jar- launch configuration 是空的|没有自己的main类
- 子网掩码与子网划分
- Linux硬链接与软链接的区别
- 使用pl/sql连接64位oracle
- [LeetCode]3Sum
- 二维码app扫码后登录其它形态系统
- [LeetCode]First Missing Positive
- 列式存储与行式存储