Java — работает до Android KitKat. Я должен запустить его на Lollipop и выше

Импортировано из https://github.com/katchsvartanian/voiceRecognition. Всякий раз, когда я запускаю проект на Android-версии выше, Kitkat LogCat отображается ниже ошибка:

    JNI DETECTED ERROR IN APPLICATION: illegal class   name 'com.example.jni.FLACStreamEncoder'
(should be of the form 'package/Class', [Lpackage/Class;' or '[[B')
in call to FindClass
from void com.example.jni.FLACStreamEncoder.init(java.lang.String, int, int, int)

Появляется ошибка в нижней строке:

    init(outfile, sample_rate, channels,  bits_per_sample)

в FLACStreamEncoder.java в функции ниже.

public FLACStreamEncoder(String outfile, int sample_rate, int channels,int bits_per_sample)
{
init(outfile, sample_rate, channels, bits_per_sample);
}

и в FLACRecorder.java:

mEncoder = new FLACStreamEncoder (mPath, sample_rate, mapped_channels,  mapped_format)

Мой FLACStreamEncoder.cpp содержит приведенный ниже код, и я изменился:

    static char const * const FLACStreamEncoder_classname="com.example.jni.FLACStreamEncoder";

в

    static char const * const FLACStreamEncoder_classname="com/example/jni/FLACStreamEncoder";

Когда я запускаю код после внесения вышеуказанных изменений и когда наведу курсор на ошибку:

    jclass cls = env->FindClass(FLACStreamEncoder_classname);

он показывает подсказку как «jclass и jclass не совместимы». Я не очень хорош в C ++. Мой FLACStreamEncoder.cpp содержит приведенный ниже код.

    ...
static FLACStreamEncoder * get_encoder(JNIEnv * env, jobject obj)
{
assert(sizeof(jlong) >= sizeof(FLACStreamEncoder *));
// Do the JNI dance for getting the mObject field
jclass cls = env->FindClass(FLACStreamEncoder_classname);
jfieldID object_field = env->GetFieldID(cls, FLACStreamEncoder_mObject,"J");
jlong encoder_value = env->GetLongField(obj, object_field);

env->DeleteLocalRef(cls);

return reinterpret_cast<FLACStreamEncoder *>(encoder_value);
}

static void set_encoder(JNIEnv * env, jobject obj, FLACStreamEncoder *   encoder)
{
assert(sizeof(jlong) >= sizeof(FLACStreamEncoder *));

// Do the JNI dance for setting the mObject field
jlong encoder_value = reinterpret_cast<jlong>(encoder);
jclass cls = env->FindClass(FLACStreamEncoder_classname);
jfieldID object_field = env->GetFieldID(cls, FLACStreamEncoder_mObject,   "J");
env->SetLongField(obj, object_field, encoder_value);
env->DeleteLocalRef(cls);
}
...

Я сделал изменения по ссылке android art runtime check_jni.cc ошибка в имени пакета.

Что я хочу знать, даже после внесения изменений в путь к классам, почему он показывает ту же ошибку?

 'com.example.jni.FLACStreamEncoder' to "com/example/jni/FLACStreamEncoder"

это все еще показывает ту же ошибку в LogCat.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector