zoukankan      html  css  js  c++  java
  • android JNI

     

    Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。

    例:

    A:调用层。

    package com.hello.jnitest

    publicclass Nadd {

    static {
    System.loadLibrary("jni_mytest");
    }

    public native void nativeTest();//无参

    public native int nadd(int a, int b);//有参

    }

    B:实现层

    Android.mk文件定义

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    LOCAL_MODULE := libjni_mytest //最后生成库时的名字
    LOCAL_SRC_FILES := myjni.c //指明要被编译的源文件的文件名
    include $(BUILD_SHARED_LIBRARY)//指明NDK编译时将生成一些共享库

    //_______________ 

    myjni.h

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

    #include <jni.h>

    /* Header for class com_hello_jnitest_Nadd */

    #ifndef _Included_com_hello_jnitest_Nadd

    #define _Included_com_hello_jnitest_Nadd

    #ifdef __cplusplus

    extern "C" {

    #endif

    JNIEXPORT void JNICALL Java_com_hello_jnitest_Nadd_nativeTest (JNIEnv *, jobject);

    JNIEXPORT jint JNICALL Java_com_hello_jnitest_Nadd_nadd (JNIEnv *, jobject, jint, jint);

    #ifdef __cplusplus

    }

    #endif

    #endif

    myjni.c

    #include <stdlib.h>

    #include "myjni.h"

    JNIEXPORT void JNICALL Java_com_hello_jnitest_Nadd_nativeTest(JNIEnv * env, jobject c, jint a, jint b)

    {

    ..........

    }

    JNIEXPORT jint JNICALL Java_com_hello_jnitest_Nadd_nadd(JNIEnv * env, jobject c, jint a, jint b)

    {

    return (a+b);

    }

    A:调用层。

    1:通过System.loadLibrary()来加载JNI库。

    2:声明Java中的native函数。

    System.loadLibrary("jni_mytest");

    声明native函数

    public native int nativeTest();//关键字:native 

    B:实现层

    实现访问的接口

    接口声明

    C方法名:Java_pacakege_class_method 

    JNI的数据类型

    在Java中的函数类型有基本数据类型和引用数据类型。那么这些类型在JNI层中会变成什么呢?下表是JNI层数据转换:

    引用数据类型转换:

    Java引用类型

    Native类型

    Java引用类型

    Native类型

    All objects

    jobjects

    char[]

    jcharArray

    Java.long.Class

    jclass

    short[]

    jshortArray

    Java.lang.String

    Jstring

    int[]

    jintArray

    Object[]

    jobjectArray

    long[]

    jlongArray

    boolean[]

    jbooleanArray

    float[]

    floatArray

    byte[]

    jbyteArray

    double[]

    jdoubleArray

    java.lang.Throwable

    jthrowable

     

     

    基本数据类型

    Java

    boolean

    byte

    char

    short

    int

    long

    float

    double

    Native

    jboolean

    jbyte

    jchar

    jshort

    jint

    jlong

    jfloat

    jdouble

  • 相关阅读:
    【Struts 动态表单】DynaActionForm
    【Struts 分派Action】DispatchAction
    【struts 报错】 No action config found for the specified url
    【Struts APP_PATH】StartSystemListener
    【Struts 编码】
    【Struts 基础案例】
    28. 实现 strStr()
    14. 最长公共前缀
    2. 两数相加
    15. 三数之和
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/3374437.html
Copyright © 2011-2022 走看看