首页 文章

Android:如何构建和替换修改后的AOSP代码

提问于
浏览
2

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

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

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

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

UPDATE:
我试过了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 . (按照Ganesh在评论2中的建议) . 我应该这样做吗?

我还应该做些什么才能建成......

2 回答

  • 4

    要回答您的具体问题,

    • libstagefright.so 已 Build 并安装在 /system/lib

    • 我假设您在本机代码中使用了 libstagefright.so . 有了这个假设,您就不必复制了 . 我假设您正在将模块构建为可加载的库,即 .so 文件 . 因此,如果您可以识别对 libstagefright.soLOCAL_SHARED_LIBRARIES 的依赖关系以及包含头文件,那么它应该足以构建您的模块 . 请参阅此example of building a FLAC encoder,其中已处理类似的依赖项 .

    • 通过应用程序,如果您指的是与 JNI 层交互的 Java 应用程序,那么第2点应该足够了 . 但是,如果您要创建本机图层应用程序,我建议您按照stagefright command line utility's makefile .

  • 2

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

    请注意 libstagefright/system/lib 中的许多组件进行通信,其中一些组件特定于SoC供应商(例如Qualcomm)或ODM(例如Samsung) . Stagefright的一些用途可能需要特定于设备的怪癖 . 这就是 OpenMAX IL 尚未在Android上正式曝光的原因 . 自2011年11月起, OpneMAX AL 已获得官方支持 .

    无论如何,无法直接从Java访问 libstagefright . 如果您正在寻找用于视频通信的Java解决方案,那么首先应该看一下优秀的libstreaming库 .

    使用 libstagefright 的好处通常在于您拥有只需要连接到高效编解码器的本机(C / C)库 .

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

相关问题