前面讲到了java和native数据类型,这里就开始做一下使用:

第一步:新建工程

第二部:书写 java方法:

  1. public class NativeMethod {
  2. static {
  3. System.loadLibrary("com_nedu_jni_jnidemo5-jni");
  4. }
  5. public native boolean getBoolean(boolean b);
  6. public native byte getByte(byte b);
  7. public native char getChar(char c);
  8. public native short getShort(short s);
  9. public native int getInt(int i);
  10. public native long getLong(long l);
  11. public native float getFloat(float f);
  12. public native double getDouble(double d);
  13. }

第三部:调用javac、javah命令生成h文件。

第四部:补充native方法,如下:

  1. #include<stdio.h>
  2. #include <stdlib.h>
  3. #include "com_nedu_jni_jnidemo5_NativeMethod.h"
  4. /*
  5. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  6. * Method:    getBoolean
  7. * Signature: (Z)Z
  8. */
  9. JNIEXPORT jboolean JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getBoolean
  10. (JNIEnv *e, jobject thiz, jboolean b){
  11. return b;
  12. }
  13. /*
  14. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  15. * Method:    getByte
  16. * Signature: (B)B
  17. */
  18. JNIEXPORT jbyte JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getByte
  19. (JNIEnv *e, jobject thiz, jbyte by){
  20. return by;
  21. }
  22. /*
  23. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  24. * Method:    getChar
  25. * Signature: (C)C
  26. */
  27. JNIEXPORT jchar JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getChar
  28. (JNIEnv *e, jobject thiz, jchar c){
  29. return c;
  30. }
  31. /*
  32. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  33. * Method:    getShort
  34. * Signature: (S)S
  35. */
  36. JNIEXPORT jshort JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getShort
  37. (JNIEnv *e, jobject thiz, jshort s){
  38. return s;
  39. }
  40. /*
  41. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  42. * Method:    getInt
  43. * Signature: (I)I
  44. */
  45. JNIEXPORT jint JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getInt
  46. (JNIEnv *e, jobject thiz, jint i){
  47. return i;
  48. }
  49. /*
  50. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  51. * Method:    getLong
  52. * Signature: (J)J
  53. */
  54. JNIEXPORT jlong JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getLong
  55. (JNIEnv *e, jobject thiz, jlong l){
  56. return l;
  57. }
  58. /*
  59. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  60. * Method:    getFloat
  61. * Signature: (F)F
  62. */
  63. JNIEXPORT jfloat JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getFloat
  64. (JNIEnv *e, jobject thiz, jfloat f){
  65. return f;
  66. }
  67. /*
  68. * Class:     com_nedu_jni_jnidemo5_NativeMethod
  69. * Method:    getDouble
  70. * Signature: (D)D
  71. */
  72. JNIEXPORT jdouble JNICALL Java_com_nedu_jni_jnidemo5_NativeMethod_getDouble
  73. (JNIEnv *e, jobject thiz, jdouble d){
  74. return d;
  75. }

第五步:制作mk文件

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE    := com_nedu_jni_jnidemo5-jni
  4. LOCAL_SRC_FILES :=NativeMethod.c
  5. include $(BUILD_SHARED_LIBRARY)

第六步:调用native方法

  1. public void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.main);
  4. TextView text=(TextView)findViewById(R.id.text);
  5. NativeMethod method=new NativeMethod();
  6. text.setText("返回boolean:"+method.getBoolean(true)+"\n"+
  7. "返回byte:"+method.getByte((byte) 0)+"\n"+
  8. "返回char:"+method.getChar('c')+"\n"+
  9. "返回short:"+method.getShort((short) 1)+"\n"+
  10. "返回int:"+method.getInt(1)+"\n"+
  11. "返回long:"+method.getLong(9)+"\n"+
  12. "返回float:"+method.getFloat((float) 1.0)+"\n"+
  13. "返回double:"+method.getDouble(2.0)+"\n");
  14. }

运行截图:

总结:JNI中传过来的java基本类型可以直接使用。

/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/

Android JNI入门第五篇——基本数据类型使用的更多相关文章

  1. Android JNI入门第六篇——C调用Java

    本篇将介绍在JNI编程中C调用Java实现. 源码下载地址:http://download.csdn.net/detail/xyz_lmn/4868265 关键代码: java: public cla ...

  2. Android JNI入门第三篇——jni头文件分析

    一. 首先写了java文件: public class HeaderFile { private native void  doVoid(); native int doShort(); native ...

  3. Android JNI入门第四篇——Android.mk文件分析

    ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...

  4. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  5. Hadoop入门第五篇:Hive简介以及部署

    标签(空格分隔): Hadoop Hive hwi 1.Hive简介   之前我一直在Maxcompute上进行大数据开发,所以对数仓这块还算比较了解,在接受Hive的时候基本上没什么大的障碍.所以, ...

  6. Visualforce入门第五篇_2017.3.1

    Visualforce添加过滤器,实现数据的筛选 参考原文:https://trailhead.salesforce.com/modules/visualforce_fundamentals/unit ...

  7. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  8. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  9. java入门第五步之数据库项目实战【转】

    在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...

随机推荐

  1. codeforces 633C. Spy Syndrome 2 hash

    题目链接 C. Spy Syndrome 2 time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  2. php错误 mysql_query():supplied argument is not a valid MySQL result resource

    出现这种错误,原因是出现该错误的函数的参数出现了问题 参数出现问题有多种情况: 1.sql查询语句有问题,可能多了一个逗号,少了一个逗号,多了括号之类的: 2.与数据库连接的参数有问题,用户名.密码. ...

  3. [转]printf 函数实现的深入剖析

    研究printf的实现,首先来看看printf函数的函数体 int printf(const char *fmt, ...) { int i; char buf[256];          va_l ...

  4. 关于BFC

    参考  http://www.html-js.com/article/1866(很棒! 还有栗子) http://www.cnblogs.com/lhb25/p/inside-block-format ...

  5. 转: html5 history api详解~很好的文章

    从Ajax翻页的问题说起 请想象你正在看一个视频下面的评论,在翻到十几页的时候,你发现一个写得稍长,但非常有趣的评论.正当你想要停下滚轮细看的时候,手残按到了F5.然后,页面刷新了,评论又回到了第一页 ...

  6. openStack openSource CloudComputing

    <一,> ,OpenStack a few Core Compontents integration with openStack-keystone Identity service1.1 ...

  7. CATransition类动画

    - (void)leftClick { [UIView beginAnimations:nil context:nil]; //display mode, slow at beginning and  ...

  8. [置顶] fmt日期格式化

    jstl中的日期格式化 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> & ...

  9. zoom和transform:scale()的区别

    zoom和transform:scale()都可以用于缩放,目前移动端存在各种各样不同屏幕大小的手机,为了兼容不同宽度的屏幕,我们可以基于某一屏幕宽度大小(比如iPhone5的320,这个根据设计稿来 ...

  10. AOP annotation

    1.xml文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http ...