Android JNI之JAVA调用C/C++层
转载请声明:原文转自: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 ;
}
- 在.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++层的更多相关文章
- Android JNI c/c++调用java 无需新建虚拟机
近期通过研究SDL源码 得出android JNI c/c++调用java 无需新建虚拟机: 具体步骤如下 第一步获得:两个参数 JNIEnv和jclass void Java_com_Test_A ...
- Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)
转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html Android JNI之JAVA与C++对象建立对称关联 1.JAVA对象持有C++对象 ...
- [转]ANDROID JNI之JAVA域与c域的互操作
本文讲述AndroidJava域与C域互操作:Java域调用c域的函数:c域访问Java域的属性和方法:c域生成的对象的保存与使用.重点讲解c域如何访问Java域. 虽然AndroidJNI实现中,c ...
- Android与JNI(二) ---- Java调用C++ 动态调用
目录: 1. 简介 2. JNI 组件的入口函数 3. 使用 registerNativeMethods 方法 4. 测试 5. JNI 帮助方法 6. 参考资料 1. 简介 Android与JNI( ...
- 【转】 Android的NDK开发(1)————Android JNI简介与调用流程
原文网址:http://blog.csdn.net/conowen/article/details/7521340 ****************************************** ...
- Android的NDK开发(1)————Android JNI简介与调用流程
1.JNI简介 JNI全称为Java Native Interface(Java本地调用).从Java1.1开始,JNI成为java平台的一部分,它允许Java代码和其他语言写的代码(如C&C ...
- Android JNI访问Java成员
在 JNI 调用中,不仅仅 Java 可以调用本地方法,本地方法也可以调用 Java 中的方法和成员变量. Java 中的类封装了属性和方法,想要访问 Java 中的属性和方法,首先要获得 Java ...
- JNI之JAVA调用C++接口
1.JNI定义(来自百度百科) JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java1.1开始,Java Native Interface(JNI)标准成为ja ...
- 通过JNI实现java调用C代码和C代码调用java的代码
一.java调用C代码 1)java中需要声明调用的函数,也就是native方法,并通过System.LoadLibrary来调用dll或者so(C代码).实例代码如下: public class H ...
随机推荐
- 【HDOJ】4080 Stammering Aliens
1. 题目描述给定一个长为$n \in [1, 4000]$的字符串,求其中长度最长的子串,并且该子串在原串中出现至少$m$次,并求最右起始位置. 2. 基本思路两种方法:二分+后缀数组,或者二分+哈 ...
- Android开发之创建App Widget和更新Widget内容
App WidgetsApp Widgets are miniature application views that can be embedded in other applications (s ...
- JavaScript constructor 属性
定义和用法 constructor 属性返回对创建此对象的数组函数的引用. 语法 object.constructor 实例 例子 1 在本例中,我们将展示如何使用 constructor 属性: & ...
- UVa 11330 (置换 循环的分解) Andy's Shoes
和UVa11077的分析很类似. 我们固定左脚的鞋子不动,然后将右脚的鞋子看做一个置换分解. 对于一个长度为l的循环节,要交换到正确位置至少要交换l-1次. #include <cstdio&g ...
- RecyclerView 结合 CardView 使用
准备工作:导入 1.activity_mian.xml <android.support.v7.widget.RecyclerView android:id="@+id/recycle ...
- windows安装TortoiseGit详细使用教程【基础篇】
标签:tortoisegit 环境:win8.1 64bit 安装准备: 首先你得安装windows下的git msysgit1.9.5 安装版本控制器客户端tortoisegit tortoise ...
- HDU 5289 Assignment (数字序列,ST算法)
题意: 给一个整数序列,多达10万个,问:有多少个区间满足“区间最大元素与最小元素之差不超过k”.k是给定的. 思路: 如果穷举,有O(n*n)复杂度.可以用ST算法先预处理每个区间最大和最小,O(n ...
- angularjs指令中的compile与link函数详解(转)
http://www.jb51.net/article/58229.htm 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link, ...
- 结合daterangepicker实现Datatables表格带参数查询
http://dt.thxopen.com/example/user_share/send_extra_param.html#@一颗树 http://www.guoxk.com/node/jquery ...
- 【C#学习笔记】检测进程是否存在并关闭
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...