目前用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/'


做好这些,就可以开始编写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文件:


现在我们可以把.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. Android——开发环境简介
  2. 写一个自己的 Android(安卓)Hidl Service
  3. Android应用资源的使用方法(数组、颜色、尺寸、字符串、布尔、整
  4. 「Android」 APK瘦身探索
  5. 最火的Android开源项目(二)
  6. Android学习笔记(4)---模拟手机拨号器
  7. RSA公钥、私钥的生成详解,包含Java、PHP、Android、iOS端
  8. Android布局类型资源(二)---XML、drawable、layout
  9. Android(安卓)studio 制作aar 使用Gradle发布项目到JCenter仓库

随机推荐

  1. Activity四种启动模式(android:launchMode
  2. Java 集合类 List 的那些坑
  3. 【Android】布局
  4. Android两种不同的方法去实现图像的放大
  5. Android(安卓)-Intent -ACTION_
  6. Android(安卓)ListView 自定义背景滚动变
  7. [置顶] Android(安卓)adapter概括
  8. Android项目开发技术总结
  9. 如何获取android的相关信息,以及安装路径
  10. Android在onCreate()方法中动态获取TextV