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

  • 相关阅读:
    时间复杂度为O(1)的Iveely搜索缓存策略
    数据挖掘十大算法决策树的实现
    编写有效的C# 代码(一)
    数据挖掘十大算法Kmeans之图像区域选择
    asp.net 导出 Excel
    使用XMLSpyDocEditPlugIn2.dll,页面加载失败
    多线程Thread的使用,并使用Thread传参
    ajaxpro.2.dll的使用
    论道WP(二):如何学习WP开发?
    IList<T> 转换成 DataSet
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/3374437.html
Copyright © 2011-2022 走看看