Android 4.0 Ice Cream Sandwich JNI JClass Arg имеет неправильный тип - PullRequest
2 голосов
/ 29 февраля 2012

JNI ПРЕДУПРЕЖДЕНИЕ: у jclass arg неправильный тип (ожидается Ljava / lang / Class ;, получил Lcom / my / app / MyClass;) в Lcom / my / app / MyClass; .myMethod :() V (SetStaticIntField)

Это мой код

static jclass   myObject = NULL;

static BOOL init(JNIEnv *env)
{
     jclass* localClass = (*env)->FindClass(env, "com/my/app/MyClass");
     myObject = (jclass*)(*env)->NewGlobalRef(env, localClass);
}

JNIEXPORT void JNICALL Java_com_my_app_MyClass_myMethod(JNIEnv *env, jobject obj)
{
        int position = getPosition(); /* the value is set at 1*/
    (*env)->SetStaticIntField(env, obj, position_field_id, position);
}

Мое приложение отлично работает в Android 2.1, 2.1, 2.3.x; но когда я использую его на Android 4.0, он падает и показывает предупреждение, о котором я упоминал в начале.

Когда я закомментирую строку, приложение запускается, но оно, вероятно, сломает что-то еще.

Попытка изменить задание на jclass, но не работает.

Спасибо за любую помощь

1 Ответ

3 голосов
/ 29 февраля 2012

Мне нужно было передать класс вместо объекта в SetStaticField

jclass cls = (* env) -> GetObjectClass (env, obj);

Кажется, Android 4 не нравитсяjni предупреждения

...