android java调用c_Android JNI之JAVA调用C/C++层

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

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

9bedf2fe778e6a657800e66b1d4b9bb5.png

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

在Android Studio下有很多方法:

点击Make Project

a4a0bc6401c5ce81bc73d0e28f31c442.png

Clean Project + Rebuild Project

3952f094d1e95b9278bc7471e8b427ca.png

运行或Debug  APP

eb47c4325b5d3145e8a6ff34b55fc3dd.png

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

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

2f6f484307fc8dfcc3a96457bd39391d.png

终端上的命令:

cd app/build/intermediates/classes/debug

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

javah -jni com.x.mp4player.TestNdk

03f73cb6cda9e9d385b7f3acced6c8a3.png

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

0d26718c8893c749031ea0038eef6f77.png   

3f7eb63ee63ef31a2a312cd3dc95d7c0.png  

5f3271cf92351162f2857f95d68fb204.png

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

生成的.h文件代码:

/*DO NOT EDIT THIS FILE - it is machine generated*/#include

/*Header for class com_x_mp4player_TestNdk*/#ifndef _Included_com_x_mp4player_TestNdk#define _Included_com_x_mp4player_TestNdk#ifdef __cplusplusextern "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 #includeJNIEXPORT jint JNICALL Java_com_x_mp4player_TestNdk_getStringFromNative

(JNIEnv*env, jclass cls)

{return 1;

}

在.cpp文件下要导入生成的头文件  :   #include

.h文件和.cpp文件的名称一致,另外,他们的方法名称也要一致

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

74f84646ece63052ca6651911605bf7a.png  

733e7a071296a5c27e5c38599be4eefb.png

模块名称要与本地方法所在的类所导入的链接库文件名字相同,如下

static{

System.loadLibrary("MyJni");//导入生成的链接库文件

}

7.编译运行

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值