Android:从JNI方法获取随机数
我使用NDK创建了数学运算的演示,如加法,减法,乘法和除法。
我能够制作库并从本地代码获取响应,但结果不正确我的意思是它是随机静态值。
Calculator.c类
#include <stdio.h>
#include <jni.h>
jint
Java_com_example_jni_calculator_Calculator_add(JNIEnv* env, jint a, jint b) {
return (jint)(a + b);
}
jint
Java_com_example_jni_calculator_Calculator_substract(JNIEnv* env, jint a, jint b) {
return (jint)(a - b);
}
jint
Java_com_example_jni_calculator_Calculator_multiply(JNIEnv* env, jint a, jint b) {
return (jint)(a * b);
}
jint
Java_com_example_jni_calculator_Calculator_devide(JNIEnv* env, jint a, jint b) {
return (jint)(a / b);
}
Calculator.java类用于加载库并启动本地方法。
public class Calculator {
static {
System.loadLibrary("Calculator");
}
public native int add(int a, int b);
public native int substract(int a, int b);
public native int multiply(int a, int b);
public native int devide(int a, int b);
}
我使用下面的代码来显示结果:
int num1 = Integer.parseInt(txtNumber1.getText().toString().trim());
int num2 = Integer.parseInt(txtNumber2.getText().toString().trim());
tvResult.setText(String.format("%1$d + %2$d is equals to %3$d", num1, num2, mCalculator.add(num1, num2)));
产量
您正在声明非静态方法,并且不会将引用传递给“jobject” - 这就是为什么您要在返回值中获取垃圾的原因。
为了解决这个bug,你必须在本地代码中为“jobject”添加一个额外的参数,就在“env”参数之后。
以下是Sergey的回答的一些补充示例代码:
C / C ++端:
JNIEXPORT jint JNICALL Java_com_marakana_NativeLib_add
(JNIEnv *, jobject, jint, jint);
Java方面:
public native int add( int v1, int v2 );
来源:https://thenewcircle.com/s/post/49/using_ndk_to_call_c_code_from_android_apps
再次感谢Sergey K.,RobinHood和Dharmendra!
链接地址: http://www.djcxy.com/p/61009.html上一篇: Android: Getting random number from JNI method
下一篇: arithmetic exception, numeric overflow, or string truncation