【问题标题】:How to link to the libmedia.so system library in an Android NDK app using android.mk?如何使用 android.mk 链接到 Android NDK 应用程序中的 libmedia.so 系统库?
【发布时间】:2012-10-29 04:22:52
【问题描述】:

我想创建一个使用 Android system/lib/libmedia.so 的播放器。

直接使用JNI播放视频。

在 Android.mk 中,我添加了“-lmedia”以包含库,但我无法直接链接。

这是我的过程。

  1. 编写一个 Cpp 文件,在 libmedia.so 中包含一些头文件

  2. 在 LOCAL_LDLIBS 的 Android.mk 中添加“-lmedia”

    比如..

    LOCAL_LDLIBS -lmedia -lstagefright

  3. 使用ndk-build构建.so

发生错误!!

有人有答案吗???

【问题讨论】:

  • 你的解决方案是什么?

标签: android android-ndk


【解决方案1】:

libmedia.solibsinstructionght.so 不是公共 API 的一部分。这意味着理论上,您不应该依赖它们。但实际上,这些库存在于所有设备上,但它们是不同的。

您可以从您的设备中提取此二进制文件,甚至可以使用命令从模拟器中提取此二进制文件

adb pull /system/lib/libmedia.so C:/android-ndk/platforms/android-14/arch-arm/usr/lib

这会将文件与公共 API 放在一起,以便更轻松地与 ndk-build 一起使用。另一方面,您应该注意的不仅是不同级别的 Android 之间的碎片,还包括芯片组、制造商甚至型号之间的碎片。

为了处理这个问题,我将 .so 文件从不同的设备拉到单独的目录中,并将其中一个 添加到链接器路径中,例如

LOCAL_LDLIBS += -Lc:/android/galaxys.4.1.2.system.lib

上述说明无法解决您在方法中面临的大问题。 libmedia.so 不打算链接到用户应用程序。它假定具有访问受保护设备(例如相机、编解码器和屏幕)的特权用户的上下文。

如果您以 root 设备为目标,或准备自定义 ROM,则可以充分利用此库。并知道您在做什么,以及如何避免从系统中窃取重要资源。

否则链接媒体库几乎没有什么收获。

【讨论】:

  • 我的主要目标是使用 Android OpenMax IL 进行视频硬解码。
  • @OneGuilty,您的上诉成功了吗?我陷入了同样的链接问题。同样的场景,有什么帮助吗?
  • @nmxprime:我的解决方案对你来说是失败的,还是你被我严厉的警告吓到了?特别是为了满足与libstagefright 链接所需的少量引用,使用libmedia 是安全的。
  • @AlexCohn 嗨,我尝试链接 libmedia_jni,但出现未定义的参考错误。最终我想使用 openmax IL t 与硬件编解码器交互!任何帮助都是最宝贵的!
  • @nmxprime:我会在您发布问题时查看您的问题。请描述您所做的并发布链接器错误消息。
【解决方案2】:

PREBUILT_SHARED_LIBRARY 指向用于指定预构建共享库的构建脚本。 与 BUILD_SHARED_LIBRARY 和 BUILD_STATIC_LIBRARY 不同,该值 LOCAL_SRC_FILES 必须是预建共享的单个路径 库(例如 foo/libfoo.so),而不是源文件。

您可以使用在另一个模块中引用预构建库 LOCAL_PREBUILTS 变量(有关更多信息,请参见 docs/PREBUILTS.html 信息)。

   LOCAL_PATH := $(call my-dir)

   include $(CLEAR_VARS)
   LOCAL_MODULE := foo-prebuilt
   LOCAL_SRC_FILES := libfoo.so
   include $(PREBUILT_SHARED_LIBRARY)

引用自 NDK 文档。

PREBUILT_STATIC_LIBRARY 这与 PREBUILT_SHARED_LIBRARY 相同,但用于静态库 文件。有关更多信息,请参阅 docs/PREBUILTS.html。

请阅读 NDK 文档了解更多详情。

【讨论】:

  • 哦不!不应将 libmedia.so 放在应用程序私有目录中。该库位于 /system/lib
  • 哦,我明白了,感谢您为我指明正确的方向@AlexCohn
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2015-11-16
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多