Android:从JNI方法获取随机数

Dha*_*dra 7 c c++ android android-ndk

我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

我使用下面的代码来显示结果:

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)));
Run Code Online (Sandbox Code Playgroud)

产量

在此输入图像描述

Ser*_* K. 4

您正在声明非静态方法并且不传递对“jobobject”的引用 - 这就是您在返回值中得到垃圾的原因。

要修复该错误,您必须在本机代码中的“env”参数之后添加一个额外的“jobobject”参数。