我正在尝试配置Android.mk以交叉编译本机代码以支持不同的芯片组,即armeabi,mips和x86.我知道我可以用以下方式配置Application.mk来编译不同芯片组的源代码:
APP_ABI := all
Run Code Online (Sandbox Code Playgroud)
这将触发Android-NDK的构建脚本来编译所有芯片组的源代码.但是,我想动态告诉Android.mk寻找使用不同芯片组编译的不同静态库依赖项.
# Get the architecture info
ARCH := ????
include $(CLEAR_VARS)
LOCAL_MODULE:= mylib
LOCAL_SRC_FILES:= build/lib/libxxx_$(ARCH).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是这样,有人可以建议如何这样做吗?
更新:我在Application.mk中尝试过类似的东西:
Run Code Online (Sandbox Code Playgroud)APP_ABI := armeabi armeabi-v7a mips x64使用Android.mk:
Run Code Online (Sandbox Code Playgroud)# Get the architecture info ARCH := $(APP_ABI) include $(CLEAR_VARS) LOCAL_MODULE:= mylib LOCAL_SRC_FILES:= build/lib/libxxx_$(ARCH).a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) include $(PREBUILT_STATIC_LIBRARY)但它有以下错误:
Run Code Online (Sandbox Code Playgroud)The LOCAL_SRC_FILES for a prebuilt static library should only contain one item这是有道理的.我想在Application.mk中传递APP_ABI:= all并能够动态引用它.有任何想法吗?
非常简单的问题,希望得到一个非常简单的答案.我一直在看很多人的android.mk文件,并注意到这一行.我的NDK文档中没有关于它的文档(至少find . -name "*.txt" | xargs grep "LOCAL_EXPORT_C_INCLUDES"没有提到任何内容).这是我读过的唯一的文件......我的脑袋里......
第2部分:我是否正确地假设我需要这一行来使用预构建的共享库与另一个模块?谢谢你们(和女孩们)
III.导出预构建库的标头:
上面的例子被称为'天真',因为在实践中,foo-user.c中的代码将依赖于通常在与预构建的库一起分发的头文件中找到的特定声明(例如"foo.h").
换句话说,foo-user.c将会有如下行:
包括<foo.h>
并且您需要在构建foo-user模块时为编译器提供标头及其包含路径.处理这种情况的一种简单方法是在预构建模块定义中使用导出.例如,假设文件"foo.h"位于相对于预构建模块的"include"目录下,我们可以编写:
`include $(CLEAR_VARS)
LOCAL_MODULE:= foo-prebuilt
LOCAL_SRC_FILES:= libfoo.so
LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/ include
包括$(PREBUILT_SHARED_LIBRARY)`
这里的LOCAL_EXPORT_C_INCLUDES定义确保依赖于预构建的模块的任何模块都会自动将其LOCAL_C_INCLUDES添加到预构建的include目录的路径中,从而能够在其中找到标头.
网址:http://www.srombauts.fr/android-ndk-r5b/docs/PREBUILTS.html
我需要开发一个自定义的'包装'视频编解码器并将其集成到android(现在的JB,ICS以后).我们想要使用SIM中的一些自定义解密密钥(不要问!).最好的方法(允许它与其他非加密媒体一起工作并使用标准媒体播放器或其他)似乎是定义我们自己的mime类型,并将其链接到可以执行自定义的自定义包装编解码器解密,然后将数据传递给真正的编解码器.(我们.mp4现在说文件类型.)
(另一种选择可能是编写我们自己的媒体播放器,但我们宁愿不去那条路,因为我们真的希望媒体能够与其他媒体无缝地一起出现)
我一直在尝试遵循本指南: 如何将解码器集成到多媒体框架中
我在使用OMX Core注册时遇到了麻烦 - 我可以libstagefright.so通过键入来构建来自android源代码make stagefright但是在指南中他说要使用libstagefrighthw.so适合JB 的那个,但是我不知道如何构建它,它不会似乎是从使用中构建的,make stagefright除非我做错了什么?
另一个问题是即使我确实注册了自定义包装编解码器,我也不确定如何将数据传递给真正的编解码器.
如果有人有任何建议(或者可以给一些宝宝一步一步的指示!),我真的很感激 - 截止日期对于概念验证非常紧张,而且我对编解码器或媒体框架知之甚少......
非常感谢.(ps我不想进入关于drm和模拟孔等的泥泞斗争..,谢谢)