【问题标题】:Android: Getting random number from JNI methodAndroid:从 JNI 方法中获取随机数
【发布时间】:2012-06-30 06:48:58
【问题描述】:

我正在使用 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)));

输出

【问题讨论】:

标签: android c++ c android-ndk


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这是 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!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-30
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多