zoukankan      html  css  js  c++  java
  • 韦东山视频第3课第1节_JNI_P【学习笔记】

    一、android系统java调用C方法的大概的流程图如下:

    二、下面写一个JNI的程序,java的hello方法在加载native库之后能够调用C方法.

    2.1 JNIDemo.java 文件内容如下

     1 public class JNIDemo{
     2 
     3     static {
     4         System.loadLibrary("native");
     5     }
     6 
     7     public native void hello();
     8     
     9     public static void main(String args[]){
    10         JNIDemo d = new JNIDemo();
    11         d.hello();
    12     }
    13 } 

    2.2 native.c 文件内容如下

     1 #include <jni.h>
     2 #include <stdio.h>
     3 
     4 void c_hello(JNIEnv *env, jobject cls)
     5 {
     6     printf("Hello World!
    ");
     7 }
     8 
     9 
    10 static const JNINativeMethod methods[]={
    11     {"hello","()V",c_hello}
    12 };
    13 
    14 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserved)
    15 {
    16     JNIEnv *env;
    17     jclass cls;
    18     if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_4)) {
    19         return JNI_ERR; 
    20     }
    21     cls = (*env)->FindClass(env, "JNIDemo");
    22     if (cls == NULL) {
    23         return JNI_ERR;
    24     }
    25     
    26     if ((*env)->RegisterNatives(env,cls,methods,sizeof(methods)/sizeof(methods[0]))<0)
    27         return JNI_ERR;
    28     
    29     return JNI_VERSION_1_4;
    30 }

    编译过程

    编译JNIDemo.java 文件

    编译native.c 文件(gcc -I/usr/lib/jvm/java-7-openjdk-amd64/include  -fPIC -shared -o libnative.so native.c):

    执行需要将本地的动态库添加到环境变量export LD_LIBRARY_PATH=.:

     三、JNI的字段描述符

    如下代码的第二项就是JNI的字段描述符,这个描述符描述的是hello的参数还有返回值,

    1 static const JNINativeMethod methods[]={
    2     {"hello","()V",c_hello}
    3 };

    自动生成字段描述符,命令javah -jni JNIDemo ,之后查看生成的JNIDemo.h文件

     相关的参考代码可以在这里下载

     https://github.com/zzb2760715357/100ask/tree/master/java

     

  • 相关阅读:
    POJ 3084 Panic Room
    HDU 4111 Alice and Bob
    POJ 2125 Destroying The Graph
    HDU 1517 A Multiplication Game
    Codeforces 258B Little Elephant and Elections
    HDU 2448 Mining Station on the Sea
    ACM MST 畅通工程再续
    ACM DS 畅通工程
    ACM DS 还是畅通工程
    ACM DS Constructing Roads
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/11145951.html
Copyright © 2011-2022 走看看