链接Android上的更新库

use*_*325 6 android android-ndk opensl

我为Android开发了一个应用程序和一个本机库.本机库使用openSL ES进行音频处理.

在我的Android.mk文件中,我有以下声明:

LOCAL_LDLIBS := -lOpenSLES
Run Code Online (Sandbox Code Playgroud)

所以我猜这意味着应用程序将在设备上加载/执行应用程序时从设备的system/lib文件夹中动态链接openSLES库?

我面临的问题是设备上的库是错误的,我有3个更新的库,其中包含错误修复.如果可能,如何确保我的本机库使用我拥有的3个库:

Libwilhelm.so
libOpenMAXAL.so
libOpenSLES.so
Run Code Online (Sandbox Code Playgroud)

我只是更换

LOCAL_LDLIBS := -lOpenSLES
Run Code Online (Sandbox Code Playgroud)

LOCAL_SHARED_LIBRARIES := -lOpenSLES -lOpenMAXAL -lwilhelm
Run Code Online (Sandbox Code Playgroud)

Ale*_*ohn 4

只要您针对特定设备或非常有限的一组设备,所提出的解决方案就足够好了。但如果您的目标是一个公共应用程序,它将安装在不同的平台上,包括未来的“N”版本的 Android 和定制的 ROM(包括三星),您应该小心这些库的系统依赖性。

虽然 OpenSLES 和 OpenMAXAL 是无辜的(它们只依赖于 liblog 和 libwilhelm),但后者需要更多的小心。

查看其Android.mklibwilhelm依赖于liblog libutils libmedia libbinder libstagefright libstagefright_foundation libcutils libgui libdl libeffectslibstagefright_http_support

只有libloglibdl是“官方的”(即 NDK 的一部分)。其他依赖于平台,并且它们的导出函数对于运行相同平台级别的不同设备可能不兼容。

为了安全起见,我只会介绍修复程序,并尽可能继续使用系统版本的 libwilhelm。我希望您可以通过这种方式减少系统依赖性。