Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与android 5.0一起使用时出现java.lang.UnsatifiedLink错误_Android_Java Native Interface_Android 5.0 Lollipop_Opus - Fatal编程技术网

与android 5.0一起使用时出现java.lang.UnsatifiedLink错误

与android 5.0一起使用时出现java.lang.UnsatifiedLink错误,android,java-native-interface,android-5.0-lollipop,opus,Android,Java Native Interface,Android 5.0 Lollipop,Opus,我正在构建一个android应用程序。使用Opus编解码器进行编码和解码。我在这里使用本机代码和包装器。在Android 4.0+中,我创建了.so文件并运行,一切正常。但在Android 5.0中,当我调用本机方法时,它会崩溃。以下是崩溃的详细信息: java.lang.UnsatisfiedLinkError: No implementation found for long my.package.name.codec.Opus.encoder_create(int, int) (trie

我正在构建一个android应用程序。使用Opus编解码器进行编码和解码。我在这里使用本机代码和包装器。在Android 4.0+中,我创建了.so文件并运行,一切正常。但在Android 5.0中,当我调用本机方法时,它会崩溃。以下是崩溃的详细信息:

 java.lang.UnsatisfiedLinkError: No implementation found for long my.package.name.codec.Opus.encoder_create(int, int) (tried Java_my_package_name_codec_Opus_encoder_1create and Java_my_package_name_codec_Opus_encoder_1create__II)
我也搜索了很多,但找不到根本原因,没有人和我有同样的问题。下面是我的mk文件,我认为它很有用

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

MY_MODULE_DIR       := opus

LOCAL_MODULE        := $(MY_MODULE_DIR)
LOCAL_SRC_FILES     := $(wildcard ( libopus/src/*.c \
    libopus/celt/*.c \
    libopus/celt/arm/*.c \
    libopus/silk/*.c \
    libopus/silk/arm/*.c \
    libopus/include/*.c \
    libopus/silk/fixed/*.c \
    my_package_name_codec_Opus.c ))

LOCAL_C_INCLUDES    := \
    libopus/src \
    libopus/include \
    libopus/silk \
    libopus/silk/fixed \
    libopus/silk/arm \
    libopus/celt \
    libopus/celt/arm \
    libopus \

LOCAL_CFLAGS        := -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS    += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O3 -fno-math-errno
LOCAL_CPPFLAGS      := -DBSD=1 
LOCAL_CPPFLAGS          += -ffast-math -O3 -funroll-loops

include $(BUILD_SHARED_LIBRARY)

PS:如果您需要更多文件,请告诉我。

我自己花了大量时间调试同一个问题,启用checkjni,运行javah以确保我的头与我的java代码匹配,用PIE编译,我最终发现了问题

Android 5.0增加了opus支持。这意味着系统已经附带了libopus.so文件。 当您运行loadlibrary时,加载的不是您的编译版本,而是libopus.so,它与Android捆绑在一起

只需将您的库名更改为libmyopus.so,这将解决您的问题。 MY_模块_DIR:=myopus
当然,也要更新System.loadlibrary调用。

所以在做了一周的工作后,我偶然发现了这个问题,并尝试了你所做的。成功了!该死,伙计。这是一个伟大的捕获!我正要尝试
System.load()
,并给它一个加载库的绝对路径。我现在不必尝试。哈