如何调用Android框架c++;JNI中的函数?

如何调用Android框架c++;JNI中的函数?,android,c++,java-native-interface,android-source,android-framework,Android,C++,Java Native Interface,Android Source,Android Framework,我需要调用这个函数virtualsp getOMX()在Android中获取一些信息。所以我使用JNI来做这件事。但是,在C++代码中,我可以调用Android框架C++函数吗?如何做?谢谢。当您使用任何在性能方面不“稳定”的API时,您是在玩火。但是说到getOMX(),火不是很旺 您可以从AOSP源git获取头文件,例如 git clone https://android.googlesource.com/platform/frameworks/av 和#include“framework

我需要调用这个函数
virtualsp getOMX()在Android中获取一些信息。所以我使用JNI来做这件事。但是,在C++代码中,我可以调用Android框架C++函数吗?如何做?谢谢。

当您使用任何在性能方面不“稳定”的API时,您是在玩火。但是说到
getOMX()
,火不是很旺

您可以从AOSP源git获取头文件,例如

git clone https://android.googlesource.com/platform/frameworks/av
#include“frameworks/av/include/media/imediplayerservice.h”

您还需要向链接器提供系统
.so
文件,在本例中为--
libmediaplayerservice.so
。您可以使用这个命令

adb pull /system/lib/libmediaplayerservice.so .

从模拟器或物理设备获取此库。

我发现在我的java类(我已经知道如何调用)中创建代理函数并在那里工作/获取所需对象通常是最简单的方法。这样我就不必费心调用构造函数等了。否则,JNI规范对于如何获取任意Java类的对象非常简单。@VioletGiraffe,谢谢你的评论。但我的问题是,我可以从Android框架调用任何C++函数,还是只调用NDK中提供的函数?我误解了您的问题。androidapi主要是Java。NDK提供了一些C API,您可以使用它们。但是不能调用java API,就像它们是C++一样。因为它们不是。但是这个标题“frameworks/av/include/media/imediplayerservice.h”可能依赖于其他标题,而其他标题依赖于更多的标题。它是如何工作的?是的,它确实依赖于少数几个其他标题,甚至需要更多的系统(非公共)库,特别是
-lutils-lcutils
,但是迭代收敛得很快。请注意,最后,在您有了正确的本地包含之后,您可能会有“包含”。