Android studio 简单方便的使用JNI调用c语言中的方法
2017-04-11 17:39
615 查看
今天尝试了在Android studio中调用JNI,历尽千辛万苦终于成功了。不说废话,只谈步骤:
第一步:在gradle.properties文件中添加 Android.useDeprecatedNdk = true
第二步:将鼠标光标移到你的项目上按f4,选中SDK Location,这一步的是添加NDK,一般来说在最下面的NDK location是没有的,点击旁边的下载就可以等他下载安装。
第三步:NDK环境配置(自行百度),配置成功后,如下图所示,只要不是提示“未知命令”就说明配置成功了
第四步:写一个native方法,等下要用到的,然后rebuild project在java目录下面就会有一个.h文件生成。
第五步:build的配置,注意这里的moduleName要和MainActivity里面的一致,这个是等下生成的so文件的名字
第六步:在main目录下新建jni目录,把第四步生成的.h文件剪切到这里来,同时也创建下面的一些文件
Android.mk代码如下:
Application.mk代码如下:
.h文件如下:红色字体改成自己的就可以,格式是:java_包名—类—方法名(注意:这个.h文件是自动生成的,我的自动生成的java的j是大写,但是出错了,改成小写就可以了,不行的话照着这个来吧)
.c文件如下:下面的红色地方开头必须大写,注意了。这里的方法是和.h里一样的(不行照着来)
到这里准备工作做完了,接下来就是重点了:拿到我们的so文件,
第七步:生成so文件,到你的项目目录下,执行 ndk-build,就会出现下面的
然后在你的目录工程结构下就会出现一个Libs,如下图:
这个时候你在main目录下新建一个jniLibs文件夹,把lib下面的文件整个复制到jniLibs下面,这个时候编译运行就OK了,有一点需要特别注意,如果你想改变输出的值,你就的重新在生成so文件,覆盖之前jniLibs下面的,在编译运行,就会得到你想要的结果了。
以上是我的JNI学习过程,有什么问题或者指点,可以随时在下面评论或者私聊我,谢谢。
第一步:在gradle.properties文件中添加 Android.useDeprecatedNdk = true
第二步:将鼠标光标移到你的项目上按f4,选中SDK Location,这一步的是添加NDK,一般来说在最下面的NDK location是没有的,点击旁边的下载就可以等他下载安装。
第三步:NDK环境配置(自行百度),配置成功后,如下图所示,只要不是提示“未知命令”就说明配置成功了
第四步:写一个native方法,等下要用到的,然后rebuild project在java目录下面就会有一个.h文件生成。
第五步:build的配置,注意这里的moduleName要和MainActivity里面的一致,这个是等下生成的so文件的名字
第六步:在main目录下新建jni目录,把第四步生成的.h文件剪切到这里来,同时也创建下面的一些文件
Android.mk代码如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := JniTest 和build.gradle里面的一致 LOCAL_SRC_FILES := main.c 你需要调用的c文件 include $(BUILD_SHARED_LIBRARY)
Application.mk代码如下:
APP_CFLAGS += -Wno-error=format-security APP_ABI := armeabi 规定只生成这样的文件
.h文件如下:红色字体改成自己的就可以,格式是:java_包名—类—方法名(注意:这个.h文件是自动生成的,我的自动生成的java的j是大写,但是出错了,改成小写就可以了,不行的话照着这个来吧)
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_example_jnic_MainActivity */ #ifndef _Included_com_example_jnic_MainActivity #define _Included_com_example_jnic_MainActivity #ifdef __cplusplus extern "C" { #endif /* * Class: com_example_jnic_MainActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL java_com_example_jnic_MainActivity_getStringFromNative (JNIEnv * env, jobject* obj){ return (*env)->NewStringUTF(env,"终于可以了!"); } #ifdef __cplusplus } #endif #endif
.c文件如下:下面的红色地方开头必须大写,注意了。这里的方法是和.h里一样的(不行照着来)
#include "com_example_jnic_MainActivity.h" JNIEXPORT jstring JNICALL Java_com_example_jnic_MainActivity_getStringFromNative (JNIEnv * env, jobject obj){ return (*env)->NewStringUTF(env,"终于可以了"); }
到这里准备工作做完了,接下来就是重点了:拿到我们的so文件,
第七步:生成so文件,到你的项目目录下,执行 ndk-build,就会出现下面的
然后在你的目录工程结构下就会出现一个Libs,如下图:
这个时候你在main目录下新建一个jniLibs文件夹,把lib下面的文件整个复制到jniLibs下面,这个时候编译运行就OK了,有一点需要特别注意,如果你想改变输出的值,你就的重新在生成so文件,覆盖之前jniLibs下面的,在编译运行,就会得到你想要的结果了。
以上是我的JNI学习过程,有什么问题或者指点,可以随时在下面评论或者私聊我,谢谢。
相关文章推荐
- 简单的使用jni调用java方法
- 简单的使用jni调用java方法
- jni使用c语言调用android shell命令方法
- 简单的使用jni调用java方法
- Android jni 使用C语言调用java中的log方法
- Android studio使用JNI调用C语言实例详细解析
- 简单的使用jni调用java方法
- 使用jni实现在C语言中调用Java的方法
- 简单的使用jni调用java方法
- 一种简单方便的用户权限管理方法--使用菜单来管理用户
- Java通过JNI调用C语言的方法
- Java通过JNI调用C语言的方法
- JNA—JNI终结者,java调用dll、ocx、so最简单的方法
- Javascript prototype属性使用(给内置对象添加新的方法,方便调用)
- jni使用基础(八)之jni使用流程及C调用java简单说明
- Java通过JNI调用C语言的方法
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- 简单JNI的使用--在Java中调用C库函数
- 方便调用/设置的google地图图片使用方法
- Android绕过JNi 调用C语言的方法