設置 | 登錄 | 註冊

目前共有6篇帖子。

xp系统下用ndk编译opus so库,给android studio使用

1樓 巨大八爪鱼 2025-8-27 15:58

去opus官网下载opus-1.5.2.tar.gz,解压到Windows的F:\test目录下。

在解压后的opus-1.5.2目录中,新建一个Android.mk文件,内容如下:

LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)

#我使用的是NDK 18

#NDK 17及以上不再支持ABIs [mips64, armeabi, mips]

APP_ABI := armeabi-v7a arm64-v8a x86 x86_64

APP_CPPFLAGS += -std=c++11

APP_STL := gnustl_shared

APP_PLATFORM := android-16


include $(LOCAL_PATH)/celt_sources.mk

include $(LOCAL_PATH)/silk_sources.mk

include $(LOCAL_PATH)/opus_sources.mk


LOCAL_MODULE        := opus


# Fixed point sources

SILK_SOURCES        += $(SILK_SOURCES_FIXED)


# ARM build

CELT_SOURCES        += $(CELT_SOURCES_ARM)

SILK_SOURCES        += $(SILK_SOURCES_ARM)

LOCAL_SRC_FILES     := \

    $(CELT_SOURCES) $(SILK_SOURCES) $(OPUS_SOURCES) $(OPUS_SOURCES_FLOAT)


LOCAL_LDLIBS        := -lm -llog

LOCAL_C_INCLUDES    := \

    $(LOCAL_PATH)/include \

    $(LOCAL_PATH)/silk \

    $(LOCAL_PATH)/silk/fixed \

    $(LOCAL_PATH)/celt

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)


2樓 巨大八爪鱼 2025-8-27 15:58

打开cmd命令行,执行下面三条命令。

F:

cd F:\test\opus-1.5.2

F:\test\Sdk\ndk\21.0.6113669\ndk-build APP_BUILD_SCRIPT=Android.mk NDK_PROJECT_PATH=.

最后成功在F:\test\opus-1.5.2\libs下得到四个平台的libopus.so库文件。

3樓 巨大八爪鱼 2025-8-27 15:58
4樓 巨大八爪鱼 2025-8-27 15:59
6樓 巨大八爪鱼 2025-8-27 16:17

然后在Android Studio工程的CMakeLists.txt里面添加:

set(OPUS_DIR F:\\test\\opus-1.5.2)

include_directories(${OPUS_DIR}/include)

add_library(opus SHARED IMPORTED)

set_target_properties(opus PROPERTIES IMPORTED_LOCATION ${OPUS_DIR}/libs/${ANDROID_ABI}/libopus.so)


找到原有的target_link_libraries,在其括号中添加opus,例如:

target_link_libraries(native-lib ${log-lib} oboe opus)

然后就可以在native-lib.cpp中#include <opus.h>,然后使用opus_decoder_create和opus_decoder_destroy函数了。

7樓 巨大八爪鱼 2025-8-27 17:58
将编译出来的apk文件安装到手机上,运行app后报错:

2025-08-27 17:39:24.939 32642-32642/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.example.myapplication, PID: 32642

    java.lang.UnsatisfiedLinkError: dlopen failed: library "libopus.so" not found

        at java.lang.Runtime.loadLibrary0(Runtime.java:1016)

        at java.lang.System.loadLibrary(System.java:1669)

        at com.example.myapplication.MainActivity.<clinit>(MainActivity.java:125)

        at java.lang.Class.newInstance(Native Method)

        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)

        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)

        at android.app.Instrumentation.newActivity(Instrumentation.java:1216)

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)

        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)

        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)

        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)

        at android.os.Handler.dispatchMessage(Handler.java:106)

        at android.os.Looper.loop(Looper.java:201)

        at android.app.ActivityThread.main(ActivityThread.java:6815)

        at java.lang.reflect.Method.invoke(Native Method)

        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)


解决办法:

把F:\test\opus-1.5.2\libs文件夹复制到F:\Projects\AndroidStudioProjects\MyApplication4\app\src\main,然后改名jniLibs(必须改成这个名称)。

CMakeLists.txt里面改下libopus.so库的路径。

set_target_properties(opus PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libopus.so)。

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。