NDK环境搭建和JNI示例详解
2017-07-21 10:02
656 查看
一、概述
JNI是Java Native Interface的缩写,提供一些API实现了Java和C&C++语言的通信。以下示例开发用的工具是android stduio。
二、NDK环境配置
1.配置gradle.properties文件
2.下载NDK文件配置local.properties文件。如果NDK已经下载,直接配置使用就可以
3.配置gradle
二、Jni示例
1、新建一个工程,创建JniUtils.class,在内部声明native方法。
2、在MainActivity文件中调用声明JNI的方法。
3、编译运行代码。得到.class文件。
4、生成.h文件
5、查看.h文件
1.执行完生成.h指令后,可以在JniDemo\app\build\intermediates\classes\debug 目录下看到该文件
.h文件内容
6.在app/src/main目录下创建jni文件夹。把.h文件拷贝进来。
7.在jni目录下新建jni.c文件。文件名称可以自定义。.c文件实现我们需要的方法
查看.c文件
8.在JniUtils中添加loadLibrary方法。
9.运行
JNI是Java Native Interface的缩写,提供一些API实现了Java和C&C++语言的通信。以下示例开发用的工具是android stduio。
二、NDK环境配置
1.配置gradle.properties文件
android.useDeprecatedNdk=true
2.下载NDK文件配置local.properties文件。如果NDK已经下载,直接配置使用就可以
sdk.dir=/Users/Desktop/sdk/sdk ndk.dir=/Users/Desktop/android-ndk-r11b
3.配置gradle
二、Jni示例
1、新建一个工程,创建JniUtils.class,在内部声明native方法。
public class JniUtils { public native String getCLassString(); public native int getInt(int i,int y); }
2、在MainActivity文件中调用声明JNI的方法。
public class MainActivity extends AppCompatActivity { private TextView mJinText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init() } public void init(){ mJinText = (TextView)findViewById(R.id.jni_tv); JniUtils ndkJniUtils = new JniUtils(); mJinText.setText(ndkJniUtils.getCLassString());//ndkJniUtils.getInt(1,2)也可以调用此方法 } }
3、编译运行代码。得到.class文件。
JniDemo\app\build\intermediates\classes\debug
4、生成.h文件
1.从命令行或android studio自带的Terminal进入项目目录debug根目录下。 >cd JniDemo\app\build\intermediates\classes\debug 2.在debug目录下执行javah命令生成h文件 debug> javah -jni demo.jni.cn_jnidemo.JniUtils
5、查看.h文件
1.执行完生成.h指令后,可以在JniDemo\app\build\intermediates\classes\debug 目录下看到该文件
.h文件内容
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class demo_jni_cn_jnidemo_JniUtils */ #ifndef _Included_demo_jni_cn_jnidemo_JniUtils #define _Included_demo_jni_cn_jnidemo_JniUtils #ifdef __cplusplus extern "C" { #endif /* * Class: demo_jni_cn_jnidemo_JniUtils * Method: getClassString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_demo_jni_cn_jnidemo_JniUtils_getClassString (JNIEnv *, jobject); /* * Class: demo_jni_cn_jnidemo_JniUtils * Method: getInt * Signature: (I)I */ JNIEXPORT jint JNICALL Java_demo_jni_cn_jnidemo_JniUtils_getInt (JNIEnv *, jobject, jint); #ifdef __cplusplus } #endif #endif
6.在app/src/main目录下创建jni文件夹。把.h文件拷贝进来。
7.在jni目录下新建jni.c文件。文件名称可以自定义。.c文件实现我们需要的方法
查看.c文件
#include "demo_jni_cn_jnidemo_JniUtils.h" JNIEXPORT jstring JNICALL Java_demo_jni_cn_jnidemo_JniUtils_getClassString (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"Android!"); } JNIEXPORT jint JNICALL Java_demo_jni_cn_jnidemo_JniUtils_getInt (JNIEnv *env, jobject obj, jint x, jint y) { int res = x + y; return res; }
8.在JniUtils中添加loadLibrary方法。
public class JniUtils { static { System.loadLibrary("JniLib"); } public native String getClassString(); public native int getInt(int i, int y); }
9.运行
相关文章推荐
- Android—NDK环境搭建及JNI使用详解
- 史上最易懂的Android jni开发资料--NDK环境搭建
- Android原生(Native)C(JNI/NDK)开发之一:环境搭建篇
- 【NDK编程】jni基础环境搭建
- 手把手教你搭建NDK开发环境以及基于JNI开发的简单DEMO
- Android:Windows 下搭建NDK-JNI开发环境
- Android JNI(NDK)简单学习(环境搭建,创建一个JNI项目的基本流程)
- Android NDK+JNI开发环境搭建
- 史上最易懂的Android jni开发资料--NDK环境搭建
- 史上最易懂的Android jni开发资料--NDK环境搭建
- 史上最易懂的Android jni开发资料--NDK环境搭建
- 史上最易懂的Android jni开发资料--NDK环境搭建
- [Android NDK/JNI-1A]-开发环境搭建
- 史上最易懂的Android jni开发资料--NDK环境搭建
- Eclipse NDK+JNI环境搭建
- JNI开发详解(环境搭建,第一个小例子,Eclipse),踩坑之旅
- Android NDK开发之旅(1): Eclipse中NDK环境搭建与JNI开发流程
- android Jni NDK开发环境搭建及其简单实例的编写
- Ubuntu下搭建 Eclipse+NDK for Android JNI 的开发环境
- NDK学习笔记<一> 初步认识JNI|成功搭建NDK开发环境