JNI学习一(AndroidStudio NDK环境配置)
2016-03-28 12:46
567 查看
AndroidStudio版本:1.5.1
开篇不多说废话,本文主要分两部分:
ndk的安装与配置
jni在androidstudio的demo
2.配置ndk目录,选择File->Project Structure,下载后的ndk放在sdk的目录下,选择即可
3.还需在gradle.properties文件中配置
这是因为会产生一个错误
做了上面的三部后ndk就算配置好了。
1.编写相关代码
这个过程就是在Java代码中编写native方法,并在c代码中编写对应的方法
2.配置和引入库
在Moudule的build.gradle文件中配置库,并在java代码中引入库
详细如下:
1)新建一个Module,然后在MainActivity中编写如下代码
这时候会发现hello是红色的,这是因为编译器没能找到其对应的c/c++的实现
2)在src/main目录下,新建jni文件夹,并在其中新建一个c文件,比如这里我叫做hello.c
在其中写如下代码:
其中方法名是 Java_全类名_方法名,但包名之间的.改为下划线,如下Java_com_pngfi_jnidemo_MainActivity_hello
3)AndroidStudio简化了Android.mk文件的配置,会自动生成,我们只
在Module的build.gradle文件的defaultConfigs中配置如下
其中moduleName 就是我们要引用的c库的名字,abiFilters 配置为不同类型的cpu产生对应的.so文件
4)在java代码中引入库,在MainActivity中加入如下代码
这是一个静态代码块,这里的JniDemo即上一步配置的库名字,到此我们只需在MainActivity中添加一个TextView并调用
点击运行即可,结果如下所示
关于其他
上面我们说到AndroidStudio中简化Android.mk文件的配置,其实它会帮我们生成对应的文件,编译Module,即可在如下图的目录查找到
另外,上面在c代码写方法名的时候是不是太麻烦了呢,javah命令可以帮助我们生成头文件,从而我们只需拷贝过来实现方法体即可。
如果你是的jdk版本>=1.7那么只需,如下在控制台中进入java目录下,执行javah 全类名 即可生成.h文件
我们把头文件剪切掉,放入jni文件夹。
在.c文件中引入头文件,把对应的方法声明拷入源文件,实现即可,如下
开篇不多说废话,本文主要分两部分:
ndk的安装与配置
jni在androidstudio的demo
ndk的安装与配置
1.下载ndk,打开File->Setting,然后搜索sdk,如图所示,在System Settings 目录下选择Android SDK,然后选择SDK Tools,勾选上NDK并下载,这里我已经安装好了2.配置ndk目录,选择File->Project Structure,下载后的ndk放在sdk的目录下,选择即可
3.还需在gradle.properties文件中配置
android.useDeprecatedNdk=true
这是因为会产生一个错误
做了上面的三部后ndk就算配置好了。
JNI Demo
这个过程我概括为两步1.编写相关代码
这个过程就是在Java代码中编写native方法,并在c代码中编写对应的方法
2.配置和引入库
在Moudule的build.gradle文件中配置库,并在java代码中引入库
详细如下:
1)新建一个Module,然后在MainActivity中编写如下代码
这时候会发现hello是红色的,这是因为编译器没能找到其对应的c/c++的实现
2)在src/main目录下,新建jni文件夹,并在其中新建一个c文件,比如这里我叫做hello.c
在其中写如下代码:
其中方法名是 Java_全类名_方法名,但包名之间的.改为下划线,如下Java_com_pngfi_jnidemo_MainActivity_hello
#include<jni.h> jstring Java_com_pngfi_jnidemo_MainActivity_hello(JNIEnv* env,jobject obj){ return (*(*env)).NewStringUTF(env,"hello jni"); }
3)AndroidStudio简化了Android.mk文件的配置,会自动生成,我们只
在Module的build.gradle文件的defaultConfigs中配置如下
defaultConfig { applicationId "com.pngfi.jnidemo" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk { moduleName "JniDemo" ldLibs "log", "z", "m" abiFilters "armeabi", "armeabi-v7a", "x86" } }
其中moduleName 就是我们要引用的c库的名字,abiFilters 配置为不同类型的cpu产生对应的.so文件
4)在java代码中引入库,在MainActivity中加入如下代码
static { System.loadLibrary("JniDemo"); }
这是一个静态代码块,这里的JniDemo即上一步配置的库名字,到此我们只需在MainActivity中添加一个TextView并调用
textView.setText(hello());
点击运行即可,结果如下所示
关于其他
上面我们说到AndroidStudio中简化Android.mk文件的配置,其实它会帮我们生成对应的文件,编译Module,即可在如下图的目录查找到
另外,上面在c代码写方法名的时候是不是太麻烦了呢,javah命令可以帮助我们生成头文件,从而我们只需拷贝过来实现方法体即可。
如果你是的jdk版本>=1.7那么只需,如下在控制台中进入java目录下,执行javah 全类名 即可生成.h文件
我们把头文件剪切掉,放入jni文件夹。
在.c文件中引入头文件,把对应的方法声明拷入源文件,实现即可,如下
#include "com_pngfi_jnidemo_MainActivity.h" JNIEXPORT jstring Java_com_pngfi_jnidemo_MainActivity_hello(JNIEnv *env, jobject obj) { return (*(*env)).NewStringUTF(env, "hello jni"); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android NDK开发之:配置环境的详解
- Android开发的IDE、ADT、SDK、JDK、NDK等名词解释
- Android提高之使用NDK把彩图转换灰度图的方法
- Android使用Jni实现压力锅数据检测效果示例
- JAVA中JNI的简单使用分享
- c++ mk文件出错Jni调用产生java.lang.UnsatisfiedLinkError错误解决方法
- 解析Java的JNI编程中的对象引用与内存泄漏问题
- 探讨:如何在NDK中呼叫Java的class
- 安卓应用开发通过java调用c++ jni的图文使用方法
- Java调用c++库
- Android App 增量更新实例(Smart App Updates)
- 每周总结20130814——Android NDK环境的搭建和使用,YUV420SP格式图像的处理
- Mac下用Android Studio运行NDK samples
- Android NDK pthreads详细使用
- Android Studio中NDK开发傻瓜教程(CMake)
- JNI_Android项目中调用.so动态库实现详解