Я знаю, что до сих пор этот вопрос был задан до смерти, но ни одно из решений, которые я читал, не работало для меня, поэтому я подумал, что посмотрю, сможет ли кто-нибудь придумать новый ответ.UnsatisfiedLinkError: Родной метод не найден
Вот код Java:
private native int nativeVideoPlayerMain(String fileName, int loop,int audioFileType,
int skipFrames, int rgb565, int yuvRgbAsm, int skipBidirFrames, int queueSizeMin, int queueSizeMax, int queueSizeTotal, int queueSizeAudio,
int fastMode, int debugMode, int syncType, int seekDuration, int ffmpegFlags);
в пакете com.example.player и класса DemoRenderer.
Вот родное определение кода:
extern C_LINKAGE int
Java_com_example_player_DemoRenderer_nativeVideoPlayerMain(JNIEnv* env,
jobject obj,
jstring jfileName,
jint loopAfterPlay,
jint audioFileType,
jint skipFrames,
jint rgb565,
jint yuvRgbAsm,
jint skipBidirFrames,
jint queueSizeMin,
jint queueSizeMax,
jint totalQueueSize,
jint audioQueueSize,
jint fastMode,
jint debugMode,
jint syncType,
jint seekDuration,
jint ffmpegFlags)
{
jboolean isCopy;
int argc = 1;
int my_loop_after_play;
int my_audio_file_type;
int my_skip_frames;
int my_rgb_565;
int my_yuv_rgb_asm;
int my_skip_bidir_frames;
int my_queue_size_min;
int my_queue_size_max;
int my_total_queue_size;
int my_audio_queue_size;
int my_fast_mode;
int my_debug_mode;
int my_sync_type;
int my_seek_duration;
int my_ffmpeg_flags;
#ifdef BROOV_C
const char *fileString = (*env)->GetStringUTFChars(env, jfileName, &isCopy);
#else
const char *fileString = env->GetStringUTFChars(jfileName, &isCopy);
#endif
char lclFileName[FILE_NAME_SIZE];
strncpy(lclFileName, fileString, FILE_NAME_SIZE);
#ifdef BROOV_C
(*env)->ReleaseStringUTFChars(env, jfileName, fileString);
#else
env->ReleaseStringUTFChars(jfileName, fileString);
#endif
char *argv[] = { lclFileName };
my_loop_after_play = loopAfterPlay;
my_audio_file_type = audioFileType;
my_skip_frames = skipFrames;
my_rgb_565 = rgb565;
my_yuv_rgb_asm = yuvRgbAsm;
my_skip_bidir_frames = skipBidirFrames;
my_queue_size_min = queueSizeMin;
my_queue_size_max = queueSizeMax;
my_total_queue_size= totalQueueSize;
my_audio_queue_size= audioQueueSize;
my_fast_mode = fastMode;
my_debug_mode = debugMode;
my_sync_type= syncType;
my_seek_duration= seekDuration;
my_ffmpeg_flags = ffmpegFlags;
return video_player_main(argc, argv, my_loop_after_play, my_audio_file_type,
my_skip_frames, my_rgb_565, my_yuv_rgb_asm,
my_skip_bidir_frames, my_queue_size_min, my_queue_size_max,
my_total_queue_size, my_audio_queue_size, my_fast_mode, my_debug_mode,
my_sync_type, my_seek_duration, my_ffmpeg_flags);
}
Другие методы из этого файла будут найдены и успешно выполнена, но это один отказывается сделать это. Я запускал ndk-build clean и ndk-build несколько раз, но метод не найден. Если у кого есть какие-либо предложения, пожалуйста, поделитесь :)
EDIT: Того сообщения об ошибке:
W/dalvikvm(18569): threadid=11: thread exiting with uncaught exception (group=0x41c94ba8)
E/AndroidRuntime(18569): FATAL EXCEPTION: GLThread
E/AndroidRuntime(18569): Process: com.example.player, PID: 18569
E/AndroidRuntime(18569): java.lang.UnsatisfiedLinkError: Native method not found: com.example.player.DemoRenderer.nativeVideoPlayerMain:(Ljava/lang/String;IIIIIIIIIIIIIII)I
E/AndroidRuntime(18569): at com.example.player.DemoRenderer.nativeVideoPlayerMain(Native Method)
E/AndroidRuntime(18569): at com.example.player.DemoRenderer.onDrawFrame(DemoRenderer.java:43)
E/AndroidRuntime(18569): at com.example.player.GLSurfaceView_SDL$GLThread.run(GLSurfaceView_SDL.java:944)
W/ActivityManager( 509): Force finishing activity com.example.player/.PlayerActivity
Update: Как я пытался проверить функцию действительно загружен в его библиотеке, я обнаружил, не знаю, в какой библиотеке это. То, что я имею в виду следующее:
- Когда я делаю это: Grep -R «nativePlayerInit» * -n (это другая функция в том же файле, что у меня нет проблемы с загрузкой) Я получаю это, среди прочего:
Бинарные ЛИЭС файл/armeabi-v7a/libapplication.so соответствует
Двоичный файл OBJ/локальный/armeabi-v7a/libapplication.so соответствует
двоичный файл OBJ/локальный/armeabi-v7a/Objs/приложение /src/native_main.o соответствует
Когда я делаю это для nativeVideoPlayerMain, я не получаю никаких совпадений со статическими объектами.
Самое странное, что я получаю эквивалентный результат, когда я grep файлы исходного и рабочего проекта.
Итак, подведем все вверх его: как это возможно оригинальный проект, который будет работать правильно, если функция не кажется, должны быть загружены в любой из его статических объектов? Может ли он иметь статические объекты где-то из своего каталога?
Какая у вас ошибка? – eozgonul
Дубликат http://stackoverflow.com/questions/21480981/jni-exception-in-thread-awt-eventqueue-0-java-lang-unsatisfiedlinkerror. Смотрите мой ответ. Та же проблема: такое же решение. – EJP
Я не уверен, что вы имеете в виду, но если я не думаю, что джава исправит проблему, потому что у меня нет проблем с другими функциями, только с этим конкретным. – ProgrammingGivesMeHeadaches