6

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)));

出力

ここに画像の説明を入力

4

2 に答える 2

4

非静的メソッドを宣言しており、「jobject」への参照を渡していないため、戻り値にガベージが含まれています。

このバグを修正するには、ネイティブ コードの「env」引数の直後に「jobject」の引数を追加する必要があります。

于 2012-07-02T06:49:33.840 に答える
0

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 に改めて感謝します。

于 2014-10-21T08:56:13.470 に答える