JNI CALL изменить параметр jclass или как получить объект задания из параметра jclass - PullRequest
3 голосов
/ 19 ноября 2010

Я тестирую некоторые функции с Android, JNI и NDK.

У меня есть следующий класс JAVA:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class JNITest extends Activity {
    private int contador;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        contador = 0;
        TextView label = (TextView)findViewById(R.id.Text);
        label.setText(Integer.toString(contador));
    }

    public void addClick(View addButton) {
        nativeAdd(1);
        TextView label = (TextView)findViewById(R.id.Text);
        label.setText(Integer.toString(contador));
    }

    private static native void nativeAdd(int value);

    static {
        System.loadLibrary("JNITest01");
    }
}

Я использовал javah -jni для создания заголовочного файла:

#include <jni.h>
/* Header for class es_xxxxx_pruebas_JNITest */

#ifndef _JNITestNative
#define _JNITestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_xxxxx_tests_JNITest
 * Method:    nativeAdd
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_xxxxx_tests_JNITest_nativeAdd
(JNIEnv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif

Как видите, второй параметр имеет тип jclass .

Мне интересно, как я могу изменить jclass для параметра jobject .

Мне нужен параметр задания для получения значения из поля класса, вызывающего эту нативную функцию.

Как я могу изменить подпись метода? или как я могу получить задание из jclass paremeter?

Спасибо.

1 Ответ

8 голосов
/ 19 ноября 2010

Статические методы не имеют доступа к объекту (неявный параметр this), только доступ к другим статическим методам / свойствам этого класса. Вот почему ваш родной метод имеет jclass вместо jobject.

Так что измените ваш Java-метод на нестатический и восстановите заголовочный файл.

Кроме того, вы можете создавать объекты Java из JNI, но в этом случае я думаю, что вы хотите изменить значение переменной-члена contador, чтобы это не помогло вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...