Android ndk 有没有可能将棒棒糖中引入的媒体sdk(NDK)应用于在Android 16+;

Android ndk 有没有可能将棒棒糖中引入的媒体sdk(NDK)应用于在Android 16+;,android-ndk,Android Ndk,我正在尝试使用NDK media sdk构建一个项目,但我也需要它在旧手机上运行(以支持90%的市场…)。现在,我可以手动包含libmediasdk.so&libOpenMAXAL.so,它似乎链接正确,但我不确定这是一种正确的做法。 此外,这些库(libmediasdk.so和libOpenMAXAL.so)预计在目标设备上可用,因此除非我手动将它们复制到project/libs/arch arm,否则找不到应用程序投诉的库 我是否走得太远了?:)希望不是.您可以编写代码,选择性地使用新的本机

我正在尝试使用NDK media sdk构建一个项目,但我也需要它在旧手机上运行(以支持90%的市场…)。现在,我可以手动包含libmediasdk.so&libOpenMAXAL.so,它似乎链接正确,但我不确定这是一种正确的做法。 此外,这些库(libmediasdk.so和libOpenMAXAL.so)预计在目标设备上可用,因此除非我手动将它们复制到project/libs/arch arm,否则找不到应用程序投诉的库


我是否走得太远了?:)希望不是.

您可以编写代码,选择性地使用新的本机媒体功能(libmediandk.so),但您只能在Android 21+上使用它。因此,如果您想支持较旧的android版本,必须将此代码路径设置为可选,允许它在不存在libmediandk.So的其他设备上完全失败

如果应用程序中的
MediaCodec
API是可选的,并且您同意它们仅在Android 21+上可用,那么您可以确保将其构建到单独的库中(如libyourapp media.so),并准备在该库的
System.loadLibrary()
失败时处理该情况

但是,如果您想在应用程序中使用其他本机代码组件,您需要了解一些问题。如果您针对android-21构建应用程序,并且您的本机代码使用了某些功能(例如
atof
),那么它将只在
android-21
或更新版本上运行(即使使用功能
atof
的代码对于较旧的平台也可以正常构建)。原因是以前不存在
atof
函数,对它的调用被重定向到
strod
。如果您以android-21为目标构建库,它实际上会调用
atof
,这在较旧的平台版本中是不存在的。这也适用于相当多的其他函数,不仅仅是
atof
。有关详细信息,请参阅

因此,如果您想在库中使用新的本机媒体API,而这些API应该可以在较旧版本上加载(本机媒体API显然无法在较旧版本上运行除外),则需要针对较旧的android版本构建本机组件。您需要从
android-21
复制
media/*
标题,而不是链接到
libmediandk.so
LOCAL\u LDLIBS
中的
-lmediadk
),您需要在运行时使用
dlopen
加载此库

如果您也需要在较旧的平台上执行相同的操作,那么应该使用java中的
MediaCodec
API(您可以通过JNI调用该API)。然后,当您可以在所有版本上使用java API时,仅在Android 21+上使用本机版本的API来完成所有这些额外工作几乎没有意义(它可以在Android 16上工作,并且自Android 18以来更可靠)。

是的。。。我怎么想的!(还不能投票……对不起!)