在 Android 上链接更新的库

Linking with updated library on Android

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

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

LOCAL_LDLIBS := -lOpenSLES

所以我猜测这意味着应用程序将在 openSLES 库 中从设备的 system/lib 文件夹动态 link该应用程序 loaded/executed 在设备上 ?

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

Libwilhelm.so
libOpenMAXAL.so
libOpenSLES.so

我只是替换

LOCAL_LDLIBS := -lOpenSLES

LOCAL_SHARED_LIBRARIES := -lOpenSLES -lOpenMAXAL -lwilhelm

只要您针对特定设备或一组非常有限的设备,建议的解决方案就足够了。但是,如果您的目标是 public 应用程序,它将安装在不同的平台上,包括 Android 的未来 'N' 版本,以及定制的 ROM,例如三星,你应该小心这些库的系统依赖性。

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

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

只有 libloglibdl 是 "official"(即 NDK 的一部分)。其他依赖于平台,它们导出的功能可能与不同的设备不兼容 运行 相同的平台级别。

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