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

时间:2014-06-13 08:44:04

标签: android android-ndk android-source stagefright

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

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

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

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

  4. 更新
    我试过了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 个答案:

答案 0 :(得分:4)

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

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

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

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

关于Android硬件解码器的相关问题,这是一个不错的answer

答案 1 :(得分:2)

要回答您的具体问题,

  1. libstagefright.so已在/system/lib

  2. 上构建并安装
  3. 我认为您在本机代码中使用libstagefright.so。有了这个假设,您就不必复制了。我假设您正在将模块构建为可加载的库,即.so文件。因此,如果您可以通过libstagefright.so确定对LOCAL_SHARED_LIBRARIES的依赖性以及包含头文件,那么构建模块应该足够了。请参阅已处理类似依赖关系的example of building a FLAC encoder

  4. 通过应用程序,如果您指的是与Java层交互的JNI应用程序,则第2点应该绰绰有余。但是,如果您要创建本机图层应用程序,我建议您关注stagefright command line utility's makefile