【问题标题】:Android: How to build and replace modified AOSP codeAndroid:如何构建和替换修改后的 AOSP 代码
【发布时间】:2014-08-03 18:26:56
【问题描述】:

我开始使用怯场框架工作,在我的视频会议应用程序中的 Jelly bean 之前在 android 中实现硬件解码器。
我已经在Mac系统中下载并构建了android源代码。我不清楚与 AOSP 合作的整个想法。我的问题是(关于怯场框架)

  1. 在 AOSP 构建之后,我在哪里可以找到 libstagefright.so?。

  2. 如果我在课堂上使用 OMX 编解码器进行解码,我应该如何将 libstagefright.so 链接到我的应用程序的本机代码?如果我通过复制 libstagefright.so 并通过 make 文件链接它来构建我的本机代码,是这样吗?

  3. 如何在我的应用程序中使用它?如果我通过 System.loadLibrary(" ") 加载它,它会工作吗??

更新:
我已经尝试过 Ganesh 的建议。但是当我尝试使用 NDK 构建项目时,它并没有将包含的标头作为 LOCAL_C_INCLUDES。

这是我的 android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_LDLIBS := -llog
LOCAL_MODULE := custom_decoder

LOCAL_C_INCLUDES := $(LOCAL_PATH)\includes \
                    frameworks/av/media/libstagefright/include \
                    frameworks/native/include/media/openmax \
                    frameworks/base/include/media/stagefright

LOCAL_SHARED_LIBRARIES := \
                    libstagefright libstagefright_omx libstagefright_foundation libutils liblog

LOCAL_SRC_FILES := custom_decoder_jni.cpp custom_decoder.cpp

include $(BUILD_SHARED_LIBRARY)

在读取 AOSP 的包含时,custom_decoder.h 会显示错误。

 fatal error: DataSource.h: No such file or directory. 

我的项目中没有包含任何 AOSP .so(根据 Ganesh 在评论 2 中的建议)。我应该这样做吗?

我还应该做些什么来构建它......

【问题讨论】:

  • libstagefright 和 OMX 在 Gingerbread 之后的所有 Android 设备上都可用,您无需构建 AOSP 即可使用它。
  • @Alex Cohn 感谢您的回复。我是通过android ndk来做的。要构建我将调用 OMXCodec api 的本机代码,我需要包含 libstagefright.so 不,因为它们没有暴露在 ndk 中?为此,我进行了 AOSP 构建...如果我的方式错误,请给我一些更正........

标签: android android-ndk android-source stagefright


【解决方案1】:

要回答您的具体问题,

  1. libstagefright.so/system/lib 构建和安装

  2. 我认为您在本机代码中使用了 libstagefright.so。有了这个假设,你就不必复制了。我假设您正在将模块构建为可加载库,即.so 文件。因此,如果您可以通过LOCAL_SHARED_LIBRARIES 识别对libstagefright.so 的依赖关系以及包括头文件,那么它对于构建您的模块应该绰绰有余。请参考这个example of building a FLAC encoder,其中已经处理了类似的依赖关系。

  3. 通过应用程序,如果您指的是与JNI 层交互的Java 应用程序,那么第 2 点应该绰绰有余。但是,如果您正在创建原生层应用程序,我建议您关注stagefright command line utility's makefile

【讨论】:

  • 感谢您的回答。我已经尝试过了,我已经用我的 make 文件更新了我的问题。请提出错误...
  • @androkid.. 错误是因为您不包括frameworks/av/include。还建议使用$(TOP)/frameworks/av/include 之类的东西。如果这不起作用,请尝试$(TOP)/frameworks/av/include/media/libstagefright。希望这会有所帮助!
  • 感谢现场响应...我包含这样的标题#include (也尝试过#include“DataSource.h”)但是得到同样的错误......
  • @androkid..你能加入这个房间吗:chat.stackoverflow.com/rooms/55977/ganeshtalks
  • 标头 DataSource.h 位于 $(TOP)/frameworks/base/include/media/stagefright/ 我也添加了..
【解决方案2】:

您无需重新构建 libstagefright.so 即可在您的应用中使用它。您可以从您的设备,甚至是模拟器中adb pull 库。

请注意,libstagefright/system/lib 中的许多组件通信,其中一些特定于 SoC 供应商(例如高通)或 ODM(例如三星)。 Stagefright 的某些用途可能需要特定于设备的怪癖。这也是为什么OpenMAX IL还没有在Android上正式曝光的原因。另一方面,自 2011 年 11 月起,OpneMAX AL 已获得官方支持。

无论如何,libstagefright 不能直接从 Java 访问。如果您正在寻找用于视频通信的 Java 解决方案,您应该首先查看优秀的 libstreaming 库。

使用libstagefright 的优势通常在于您拥有只需连接到高效编解码器的本机 (C/C++) 库。

这是一个很好的answer,关于 Android 硬件解码器的相关问题。

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多