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

Android 学习JNI,用JAVA调用C

时间:2015-08-18 16:22:34      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:使用jni   调用c语言   

首先必须知道JNI是什么东东?

JNI(Java Native Interface)是java本地语言接口,也就是提供一种方法可以用JAVA调用底层语言(C/C++)。一般如果项目必须使用C语言操作底层的硬件,那就必须用到JNI技术。


那既然要使用JAVA调用C语言,那必须要解决几个问题?

1:JAVA是面向对象的语言,而C是面向过程的语言

2:JAVA中的Object,String类型,Boolean类型,在C中都是没有的,那C语言是如何识别的?


其实这些JNI都给我们做好了,在JNI的头文件#include <jni.h>中就有

typedef unsigned char   jboolean;       /* unsigned 8 bits */
typedef signed char     jbyte;          /* signed 8 bits */
typedef unsigned short  jchar;          /* unsigned 16 bits */
typedef short           jshort;         /* signed 16 bits */
typedef int             jint;           /* signed 32 bits */
typedef long long       jlong;          /* signed 64 bits */
typedef float           jfloat;         /* 32-bit IEEE 754 */
typedef double          jdouble;        /* 64-bit IEEE 754 */

/*
 * Reference types, in C.
 */
typedef void*           jobject;
typedef jobject         jclass;
typedef jobject         jstring;
typedef jobject         jarray;
typedef jarray          jobjectArray;
typedef jarray          jbooleanArray;
typedef jarray          jbyteArray;
typedef jarray          jcharArray;
typedef jarray          jshortArray;
typedef jarray          jintArray;
typedef jarray          jlongArray;
typedef jarray          jfloatArray;
typedef jarray          jdoubleArray;
typedef jobject         jthrowable;
typedef jobject         jweak;

可以看到JAVA中的object对象在void* ,这个学过C语言的大家都知道。

注意:在学习JNI之前,需要在Google官网下载NDK安装,并且配置环境变量。


本次我们学习如何使用JAVA语言调用C语言,然后打印Hello World!

第一步: 建立一个Android Application工程

第二步:在项目根目录下建议一个文件夹,命名为jni

技术分享

第三步:在jni文件夹中,创建一个C文件

技术分享

第四步:在Java代码,创建一个本地方法: helloFromC

技术分享

第五步:在hello.c中实现第四步定义的本地函数,但是函数名必须为:Java+包名+Java文件+本地方法名

如: Java_com_demo_helloworld_MainActivity_helloFromC(JNIEnv* env, jobject obj)

技术分享

第六步:把c的字符串转化为Java的字符串返回

技术分享

第七步:在jni文件夹中创建Android.mk文件,这个类似与MakeFile文件

技术分享

第八步:在jni文件夹下执行ndk-build.cmd指令

技术分享

第九步:在Java中加载动态库,调用本地方法

技术分享

第十步:部署,如果出现以下错误

技术分享

说明CPU平台是补对的,默认是ARM的架构CPU,而我模拟器用的X86的,难道我要新建一个ARM的模拟器,不用那么麻烦

第十一步:编译支持X86的平台,在jni文件夹下新建Application.mk文件

技术分享

可以发现再次编译,出现了x86的库

技术分享

再次部署运行:

技术分享


可以看到C语言返回的Hello_World可以正常打印出来了。说明JAVA调用C语言成功。



版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 学习JNI,用JAVA调用C

标签:使用jni   调用c语言   

原文地址:http://blog.csdn.net/longwang155069/article/details/47751643

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