AndroidStudio之NDK与JNI配置详解
2015-02-12 15:45
357 查看
AndroidStudio之NDK与JNI配置详解
1.几点说明
搭建环境是在Ubuntu或者Windows下,不同之处文章中会有说明开发平台是AndroidStudio,所以与eclipse可能会有些不同
在这里我们使用AndroidStudio1.0,NDK-r10d
2.NDK配置
首先下载NDK:ndk官方下载地址在Linux 或者 Mac OS X中:
1.进入ndk包所在目录打开终端
2.更改权限,命令如下
chmod a+x android-ndk-r10d-linux-x86_64.bin
3.运行安装,命令如下
./android-ndk-r10d-linux-x86_64.bin
在Windows中:
1.进入ndk包所在位置
2.双击ndk包,下载包会自动解压(Windows不需要安装)
(注:以下主要是在Windows环境下做演示,Linux类似)
3.创建Android项目
这一步的设置及命名可以使用默认配置,关于新建 jni 模块,有两种选择,一种是在我们创建的MyApp\app\src\main\下直接新建 jni 文件夹,然后进行相关配置。另一种是新建一个模块(module),以此为 jni 的单独模块来开发 jni 项目。笔者比较倾向于后者,因为 jni 的使用往往是可以独立于 java 代码的,所以分离出来不仅可以方便管理 C 代码,还便于移植。故下面我们就第二种方法进行详细描述。
4.创建JNI模块
如下图所示,右键MyApp,New->module注意选择 Android Module
library/module name 我们设置为ThisJni,然后选择 Add no Activity.
最后的目录结构如右
5.创建 jni 头文件
首先,在MyApp中的MainActivity.java中添加native方法,也即对jni中的函数进行声明其中,helloworld()为jni中函数的名称,我们现在这里定义好,下面会看的比较清楚.
打开AndroidStudio的终端,进入thisjni\src\main\目录,命令如下:
cd thisjni\src\main\
接着创建 jni 的头文件,命令如下:
javah -d jni -classpath C:\Users\lsh\AndroidStudioProjects\MyApp\app\src\main\java com.example.test.myapp.MainActivity
其中,-d 表示目标文件夹,即在哪个目录下生成.h文件,-classpath 表示源class所在路径,最后的com.example.test.myapp.MainActivity是包名。
执行后会在thisjni\src\main\jni\下生成一个.h文件,
6.创建 C 文件
在jni目录下,新建一个c文件,我们命名为hello.c,并写入下面的测试代码#include "com_example_test_myapp_MainActivity.h" JNIEXPORT jstring JNICALL Java_com_example_test_myapp_MainActivity_helloworld (JNIEnv *env, jobject obj) { return (*env)->NewStringUTF(env, "Hello World ! We made it !"); }
需要注意的是,对于jni,c与c++代码都是可以得,但是语法略有不同,具体jni中代码编写可参考Java Programming Tutorial (JNI)
7.配置NDK环境
找到MyApp下的 local.properties,添加ndk.dir=C:\\android-ndk-r10d,
其中 C:\android-ndk-r10d 为我的ndk包所在路径,你需要根据你的包位置来更改,注意路径中的特殊符号需要用 \ 转义。
8.编译thisjni模块
特别需要注意的是,在windows环境下,ndk有一个bug,需要在jni目录下新建一个空的 c 文件命名为util.c,否则编译会报错。在linux 或 Mac OS X 下则不需要。编译则十分简单,直接选择编译thisjni即可。9.在 app 中使用编译的jni
首先,我们需要在代码中添加loadLibrary部分,代码如下所示:然后,配置依赖,依次进行下述操作:
右键app -> open module settings,
再按照下图操作
添加thisjni模块,apply后AndroidStudio会自动同步gradle,同步完成后就大功告成啦!现在你可以在MainActivity.java中调用helloworld()方法,它会返回给你String类型的信息”Hello World ! We made it !”。
10.额外说明
有时候,我们需要生成某些类型的 .so 文件(上面生成的 .so 文件为默认,读者可在AndroidStudioProjects\MyApp\thisjni\build\intermediates\ndk\debug\lib下观察生成的 .so 文件)这就需要我们更改thisjni的build.gradle文件,具体可以参考stackoverflow上的帖子http://stackoverflow.com/questions/20674650/how-to-configure-ndk-with-android-gradle-plugin-0-7
相关文章推荐
- Android中JNI使用详解(1)---Eclipse中NDK配置So文件生成
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
- JNI配置+NDK自带DEMO详解
- AndroidStudio中NDK开发环境配置和jni的简单使用(HelloWord)
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio 进行 JNI / NDK 开发:初步配置及使用
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
- AndroidStudio配置NDK/JNI开发环境细节
- AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别(转载)
- Android中JNI使用详解(2)---Android Studio中NDK环境配置
- AndroidStudio上使用NDK(Jni)的配置
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio配置NDK/JNI,完成so动态链接库的调用
- JNI 之 Eclipse下NDK环境配置
- jni和ndk详解
- jni_ndk_cygwin安装及其环境变量的配置: