После обновления моего проекта для поддержки Android 10, cra sh, созданный на уровне JNI, связан с ограничениями интерфейса не-SDK в Android 10:
JNI DETECTED ERROR IN APPLICATION: JNI SetIntField called with pending exception java.lang.NoSuchFieldError: no "I" field "value" in class "Ljava/lang/Integer;" or its superclasses
, которые происходят из этого часть кода:
jclass clazz = (*env)->GetObjectClass(env, outputObj);
jfieldID mi = (*env)->GetFieldID(env, clazz, "value", "I");
(*env)->SetIntField(env, outputObj, mi, pListLen);
Чтобы исправить это, я заменяю его на:
jclass clazz = (*env)->GetObjectClass(env, outputObj);
jmethodID intValueMethod = (*env)->GetMethodID(env, clazz, "intValue", "()I");
jint result = (*env)->CallIntMethod(env, outputObj,intValueMethod,pListLen);
После этого мое приложение не обрабатывает sh и правильно находит целое значение, но я хотите установить целое число результата в коде Java, используя тот же метод SetIntField.
Не могли бы вы дать мне способ или метод для установки результата в части Java.