码迷,mamicode.com
首页 > 移动开发 > 详细

Android JNI之JAVA调用C/C++层

时间:2016-10-04 07:32:45      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

摘要: 转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5929996.html 

一、java调用本地函数的开发步骤:

1.编写本地方法的类(可以说是用来叙述本地方法的类):

技术分享

2.编译这个类,生成该类的.class文件

在Android Studio下有很多方法:

  • 点击Make Project

技术分享

  • Clean Project + Rebuild Project

技术分享

  • 运行或Debug  APP

技术分享

 

3.用javah命令生成该.class文件的.h头文件

在Android Studio中,可以打开命令终端并将目录切换到app/build/intermediates/classes/debug(编译生成的.class文件的存放路径)下:

技术分享

终端上的命令:

cd app/build/intermediates/classes/debug

点击回车,再输入要>javah -jni 该类所在的包+该类名称,示例如下:

javah -jni com.x.mp4player.TestNdk

技术分享

 

4.在src/main下建立jni文件夹、并将生成的.h文件复制到该目录下

技术分享   技术分享  技术分享

 

5.创建一个同名的.cpp文件(用来编写C/C++代码)

生成的.h文件代码:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_x_mp4player_TestNdk */

#ifndef _Included_com_x_mp4player_TestNdk
#define _Included_com_x_mp4player_TestNdk
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_x_mp4player_TestNdk
 * Method:    getStringFromNative
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_x_mp4player_TestNdk_getStringFromNative
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

编写的.cpp文件代码:

#include <jni.h>
#include <com_x_mp4player_TestNdk.h>

JNIEXPORT jint JNICALL Java_com_x_mp4player_TestNdk_getStringFromNative
        (JNIEnv *env, jclass cls)
{
    return 1;
}
  •   在.cpp文件下要导入生成的头文件  :   #include <com_x_mp4player_TestNdk.h>
  •   .h文件和.cpp文件的名称一致,另外,他们的方法名称也要一致

 

6.在build.gradle下加入ndk模块

技术分享  技术分享

  • 模块名称要与本地方法所在的类所导入的链接库文件名字相同,如下
    static {
        System.loadLibrary("MyJni");//导入生成的链接库文件
    }

 

7.编译运行

  • 如果出现错误,请试着在jni文件夹下创建一个空的util.c文件  或者自行调试

 

 

Android JNI之JAVA调用C/C++层

标签:

原文地址:http://www.cnblogs.com/xiezie/p/5929996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!