积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
JNI互调
error997 (error997)    2015-05-10 19:11:13      目标    课题
   本文有2个模块 :
   A 构建JNI环境
   *写JAVA本地方法

切换到: 纯代码  
   
public static native int sum(int a,int b);


   public static native int sum(int a,int b);
   *新增jni文件夹 写JNI粘合层 利用javah反编译出.h文件,复制.h至jni文件夹
   javah -jni packagename.classname

切换到: 纯代码  
   
/* DO NOT EDIT THIS FILE - it is machine generated */  
#include <jni.h>   
/* Header for class org_lean_base_Calculate */  
  
#ifndef _Included_org_lean_base_Calculate   
#define _Included_org_lean_base_Calculate   
#ifdef __cplusplus   
extern "C" {  
#endif   
/* 
 * Class:     org_lean_base_Calculate 
 * Method:    sum 
 * Signature: (II)I 
 */  
JNIEXPORT jint JNICALL Java_org_lean_base_Calculate_sum  
  (JNIEnv *, jclass, jint, jint);  
  
#ifdef __cplusplus   
}  
#endif   
#endif


   /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_lean_base_Calculate */

#ifndef _Included_org_lean_base_Calculate
#define _Included_org_lean_base_Calculate
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     org_lean_base_Calculate
 * Method:    sum
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_org_lean_base_Calculate_sum
  (JNIEnv *, jclass, jint, jint);

#ifdef __cplusplus
}
#endif
#endif
   *复制.h文件,修改成.c代码

切换到: 纯代码  
   
#include <stdint.h>   
#include <jni.h>   
#include "org_lean_base_Calculate.h"   
  
  
/* Header for class org_lean_base_Calculate */  
  
/* 
 * Class:     org_lean_base_Calculate 
 * Method:    sum 
 * Signature: (II)I 
 */  
jint JNICALL Java_org_lean_base_Calculate_sum  
  (JNIEnv *env, jclass clazz, jint a, jint b)  
{  
      
}


   #include <stdint.h>
#include <jni.h>
#include "org_lean_base_Calculate.h"


/* Header for class org_lean_base_Calculate */

/*
 * Class:     org_lean_base_Calculate
 * Method:    sum
 * Signature: (II)I
 */
jint JNICALL Java_org_lean_base_Calculate_sum
  (JNIEnv *env, jclass clazz, jint a, jint b)
{
   
}
   *创建C/C++实现的 .h .c文件 并通过JNI粘合层调用.

切换到: 纯代码  
   
#include <stdint.h>   
  
extern uint64_t sum(unsigned int a,unsigned int b);


   #include <stdint.h>

extern uint64_t sum(unsigned int a,unsigned int b);

切换到: 纯代码  
   
jint JNICALL Java_org_lean_base_Calculate_sum  
  (JNIEnv *env, jclass clazz, jint a, jint b)  
{  
      
    return sum(a,b);  
}


   jint JNICALL Java_org_lean_base_Calculate_sum
  (JNIEnv *env, jclass clazz, jint a, jint b)
{
   
   return sum(a,b);
}

切换到: 纯代码  
   
LOCAL_MODULE    := LeanBase (System.loadLibrary("LeanBase");)  
LOCAL_SRC_FILES := org_lean_base_Calculate.c  \  
            calculate.c   (多个c文件由\分开)


   LOCAL_MODULE    := LeanBase (System.loadLibrary("LeanBase");)
LOCAL_SRC_FILES := org_lean_base_Calculate.c  \
         calculate.c   (多个c文件由\分开)
   B 让JNI粘合层调用JAVA
   *写被调用的一个方法,通过id类反射调用

切换到: 纯代码  
   
public static void say(){  
        Log.v("Lean","Calculate was called !");  
    }


   public static void say(){
      Log.v("Lean","Calculate was called !");
   }

切换到: 纯代码  
   
jint JNICALL Java_org_lean_base_Calculate_sum  
  (JNIEnv *env, jclass clazz, jint a, jint b)  
{  
    jmethodID say_id=(*env)->GetStaticMethodID(env,clazz,"say","()V");  
        (*env)->CallStaticVoidMethod(env,clazz,say_id);  
    return sum(a,b);  
}


   jint JNICALL Java_org_lean_base_Calculate_sum
  (JNIEnv *env, jclass clazz, jint a, jint b)
{
   jmethodID say_id=(*env)->GetStaticMethodID(env,clazz,"say","()V");
      (*env)->CallStaticVoidMethod(env,clazz,say_id);
   return sum(a,b);
}

转自 http://blog.csdn.net/qq285016127/article/details/45029059
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累