最近在学习JNI Java基础,不了解基本开发流程的同学请参考JNI Java入门篇——HelloWorld.
下面直接上主要代码:
1.PrimaryJNI.java
package com.example.jni;
public class PrimaryJNI {
static {
System.loadLibrary("primaryjni");
}
public native String echo(String content, boolean flag);
public native int calculateSqr(int x, int y);
public native double calculateSum(double x, double y);
public native float calculateSum(float x, float y);
public static void main(String[] args) {
PrimaryJNI item = new PrimaryJNI();
int sqr = item.calculateSqr(3, 4);
String content = item.echo("Hello World", true);
double doubleSum = item.calculateSum(2, 3);
float floatSum = item.calculateSum(2.0f, 3.0f);
System.out.println("sqr : " + sqr);
System.out.println("Java Content : " + content);
System.out.println("double sum result : " + doubleSum);
System.out.println("float sum result : " + floatSum);
}
}
2.primaryjni.cpp
// primaryjni.cpp : Defines the exported functions for the DLL application.
//
//be careful ,follow must be first line
#include "stdafx.h"
#include "com_example_jni_PrimaryJNI.h"
#include <math.h>
/*
* Class: com_example_jni_PrimaryJNI
* Method: echo
* Signature: (Ljava/lang/String;Z)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_jni_PrimaryJNI_echo
(JNIEnv * env, jobject obj, jstring param1, jboolean flag) {
const char* content = env->GetStringUTFChars(param1, 0);
printf("(C++)received Java Conent:%s", content);
env->ReleaseStringUTFChars(param1, content);
char* return_content = "c++ returned echo msg";
return env->NewStringUTF(return_content);
}
/*
* Class: com_example_jni_PrimaryJNI
* Method: calculateSqr
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_example_jni_PrimaryJNI_calculateSqr
(JNIEnv * env, jobject obj, jint param1, jint param2) {
int x = param1;
int y = param2;
return (int)sqrt(x*x + y*y);
}
/*
* Class: com_example_jni_PrimaryJNI
* Method: calculateSum
* Signature: (DD)D
*/
JNIEXPORT jdouble JNICALL Java_com_example_jni_PrimaryJNI_calculateSum__DD
(JNIEnv * env, jobject obj, jdouble param1, jdouble param2) {
return param1 + param2;
}
/*
* Class: com_example_jni_PrimaryJNI
* Method: calculateSum
* Signature: (FF)F
*/
JNIEXPORT jfloat JNICALL Java_com_example_jni_PrimaryJNI_calculateSum__FF
(JNIEnv * env, jobject obj, jfloat param1, jfloat param2) {
return param1 + param2;
}
ok!