Android JNI入门第五篇——基本数据类型使用
前面讲到了java和native数据类型,这里就开始做一下使用:
第一步:新建工程
第二部:书写 java方法:
- public class NativeMethod {
- static {
- System.loadLibrary("com_nedu_jni_jnidemo5-jni");
- }
- public native boolean getBoolean(boolean b);
- public native byte getByte(byte b);
- public native char getChar(char c);
- public native short getShort(short s);
- public native int getInt(int i);
- public native long getLong(long l);
- public native float getFloat(float f);
- public native double getDouble(double d);
- }
第三部:调用javac、javah命令生成h文件。
第四部:补充native方法,如下:
- #include<stdio.h>
- #include <stdlib.h>
- #include "com_nedu_jni_jnidemo5_NativeMethod.h"
- /*
- * Class: com_nedu_jni_jnidemo5_NativeMethod
- * Method: getBoolean
- * Signature: (Z)Z
- */
- JNIEXPORT jboolean JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getBoolean
- (JNIEnv *e, jobject thiz, jboolean b){
- return b;
- }
- /*
- * Class: com_nedu_jni_jnidemo5_NativeMethod
- * Method: getByte
- * Signature: (B)B
- */
- JNIEXPORT jbyte JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getByte
- (JNIEnv *e, jobject thiz, jbyte by){
- return by;
- }
- /*
- * Class: com_nedu_jni_jnidemo5_NativeMethod
- * Method: getChar
- * Signature: (C)C
- */
- JNIEXPORT jchar JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getChar
- (JNIEnv *e, jobject thiz, jchar c){
- return c;
- }
- /*
- * Class: com_nedu_jni_jnidemo5_NativeMethod
- * Method: getShort
- * Signature: (S)S
- */
- JNIEXPORT jshort JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getShort
- (JNIEnv *e, jobject thiz, jshort s){
- return s;
- }
- /*
- * Class: com_nedu_jni_jnidemo5_NativeMethod
- * Method: getInt
- * Signature: (I)I
- */
- JNIEXPORT jint JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getInt
- (JNIEnv *e, jobject thiz, jint i){
- return i;
- }
- /*
- * Class: com_nedu_jni_jnidemo5_NativeMethod
- * Method: getLong
- * Signature: (J)J
- */
- JNIEXPORT jlong JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getLong
- (JNIEnv *e, jobject thiz, jlong l){
- return l;
- }
- /*
- * Class: com_nedu_jni_jnidemo5_NativeMethod
- * Method: getFloat
- * Signature: (F)F
- */
- JNIEXPORT jfloat JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getFloat
- (JNIEnv *e, jobject thiz, jfloat f){
- return f;
- }
- /*
- * Class: com_nedu_jni_jnidemo5_NativeMethod
- * Method: getDouble
- * Signature: (D)D
- */
- JNIEXPORT jdouble JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getDouble
- (JNIEnv *e, jobject thiz, jdouble d){
- return d;
- }
第五步:制作mk文件
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := com_nedu_jni_jnidemo5-jni
- LOCAL_SRC_FILES :=NativeMethod.c
- include $(BUILD_SHARED_LIBRARY)
第六步:调用native方法
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- TextView text=(TextView)findViewById(R.id.text);
- NativeMethod method=new NativeMethod();
- text.setText("返回boolean:"+method.getBoolean(true)+"\n"+
- "返回byte:"+method.getByte((byte) 0)+"\n"+
- "返回char:"+method.getChar('c')+"\n"+
- "返回short:"+method.getShort((short) 1)+"\n"+
- "返回int:"+method.getInt(1)+"\n"+
- "返回long:"+method.getLong(9)+"\n"+
- "返回float:"+method.getFloat((float) 1.0)+"\n"+
- "返回double:"+method.getDouble(2.0)+"\n");
- }
运行截图:

总结:JNI中传过来的java基本类型可以直接使用。
/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/
Android JNI入门第五篇——基本数据类型使用的更多相关文章
- Android JNI入门第六篇——C调用Java
本篇将介绍在JNI编程中C调用Java实现. 源码下载地址:http://download.csdn.net/detail/xyz_lmn/4868265 关键代码: java: public cla ...
- Android JNI入门第三篇——jni头文件分析
一. 首先写了java文件: public class HeaderFile { private native void doVoid(); native int doShort(); native ...
- Android JNI入门第四篇——Android.mk文件分析
ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...
- JavaMail入门第五篇 解析邮件
上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...
- Hadoop入门第五篇:Hive简介以及部署
标签(空格分隔): Hadoop Hive hwi 1.Hive简介 之前我一直在Maxcompute上进行大数据开发,所以对数仓这块还算比较了解,在接受Hive的时候基本上没什么大的障碍.所以, ...
- Visualforce入门第五篇_2017.3.1
Visualforce添加过滤器,实现数据的筛选 参考原文:https://trailhead.salesforce.com/modules/visualforce_fundamentals/unit ...
- JavaMail入门第四篇 接收邮件
上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...
- JavaMail入门第三篇 发送邮件
JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...
- java入门第五步之数据库项目实战【转】
在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...
随机推荐
- BZOJ 2594: [Wc2006]水管局长数据加强版( LCT )
离线然后就是维护加边的动态MST, Link cut tree秒掉..不过我写+调了好久...时间复杂度O(NlogN + MlogM) ------------------------------- ...
- 全局变量,extern和static以及命名空间的区别
全局变量,extern和static以及命名空间的区别 全局变量只是在声明它的文件中有效,假如在另一个文件中声明定义了一个相同名称的全局变量,则在后续使用这两个变量的时候会产生名字上的冲 ...
- 安卓2D游戏开发设置
http://www.cnblogs.com/xiaominghimi/archive/2010/12/23/1921402.html
- 14-C语言宏
目录: 一.宏定义 二.#x,##x使用和预定义宏 三.宏的高级使用(条件编译) 回到顶部 一.宏定义 1 宏是常用的预处理功能之一,是在编译之前进行宏替换,即将宏名替换成所定义的宏体. 2 优点:可 ...
- 多线程编程之二 ---MFC中的多线程开发
下载源代码 五.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消 ...
- 51nod 1244 莫比乌斯函数之和(杜教筛)
[题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...
- Codeforces 700B Connecting Universities(树形DP)
[题目链接] http://codeforces.com/problemset/problem/700/B [题目大意] 给出 一棵n个节点的树, 现在在这棵树上选取2*k个点,两两配对,使得其配对的 ...
- 【转载】Android Studio jar、so、library项目依赖,原文链接http://zhengxiaopeng.com/2014/12/13/Android-Studio-jar、so、library项目依赖/
前言 Android Studio(以下简称AS)在13年I/O大会后放出预览版到现在放出的正式版1.0(PS.今天又更新到1.0.1了)历时一年多了,虽然Google官方推出的Android开发者的 ...
- 网页在Safari快速滚动和回弹的原理: -webkit-overflow-scrolling : touch;的实现
现在很多for Mobile的H5网页内都有快速滚动和回弹的效果,看上去和原生app的效率都有得一拼. 要实现这个效果很简单,只需要加一行css代码即可: -webkit-overflow-scrol ...
- 某IT校招笔试
前言 博主明天上午9点还有面试,今天突然看到某大牌IT公司笔试题目,必须做一下了 题目 1.假设把整数关键码K散列到N个槽列表,以下哪些散列函数是好的散列函数 A: h(K)=K/N; B: h(K) ...