これは私を夢中にさせています!私は ndk でライブラリを作成しています。リンクは問題ありませんでしたが、メソッドを呼び出すときに、対応する c 関数に渡される引数の値が正しくないことがわかりました。
私のJavaクラスは次のとおりです
package ccme.usernet.love;
class LovePlayerEngine {
static {
System.loadLibrary("loveplayer");
}
public static native void init(int id);
}
私のCファイルは次のとおりです。
#include <jni.h>
#include <android/log.h>
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "TEST", __VA_ARGS__))
JNIEXPORT void JNICALL Java_ccme_usernet_love_LovePlayerEngine_init(JNIEnv *env, jint id)
{
LOGI("INIT with id %d\n", id);
}
コンパイルとライブラリのリンクは問題なく、アプリは実行されていました。しかし、LovePlayerEngine.init(0);を呼び出したとき。私の Java コードのどこかで、1079062016のような安定しておらず、別の実行で変化するいくつかの悪い値を取得します。
定数の代わりに変数を渡す、文字列を渡すなどの他のテストはすべて、予期しない値を取得できませんでした。
問題がどこにあるのか、誰にも手がかりがありますか? これは私にはうんざりです。以前のndkプロジェクトでこれに遭遇したことはありません。