Android NDK-如何从本机代码获取表面

Android NDK-如何从本机代码获取表面,android,android-ndk,framebuffer,screen-capture,Android,Android Ndk,Framebuffer,Screen Capture,我想为Android 10开发一个小的二进制工具,我将在PC上用adb shell调用它。这个工具应该捕获屏幕的请求部分并返回(在stdout或其他任何东西上)。我真的不需要java中的任何标准应用程序,只需要那个小的bin工具 对我来说,主要的问题是,我对为Android开发任何东西都是全新的 到目前为止,我在Android Studio中创建了ndk项目,并生成了我在设备中推送的“mysc”bin应用程序: #include <stdio.h> int main(int arg

我想为Android 10开发一个小的二进制工具,我将在PC上用adb shell调用它。这个工具应该捕获屏幕的请求部分并返回(在stdout或其他任何东西上)。我真的不需要java中的任何标准应用程序,只需要那个小的bin工具

对我来说,主要的问题是,我对为Android开发任何东西都是全新的

到目前为止,我在Android Studio中创建了ndk项目,并生成了我在设备中推送的“mysc”bin应用程序:

#include <stdio.h>

int main(int argc, char** argv)
{
    printf("My capture command!\n");
    return 0;
}
我不需要任何本地java通信,只需要获取屏幕的当前视图,并只返回部分视图。它的功能几乎与ScreenCapBin相同,但我不需要整个屏幕,只需要其中的一部分。我尝试过像旧版一样打开帧缓冲区,但没有成功

我在查看NDK示例时发现了“ANativeWindow”,它看起来像我需要的东西,但我不知道在不连接java中的应用程序的情况下如何使用它。可能会给我曲面的函数是

ANativeWindow * ANativeWindow_fromSurface(
  JNIEnv *env,
  jobject surface
)
但看起来我需要从java调用这样的函数来捕获env和surface。这个解决方案可能非常简单,但由于缺乏ndk的知识,即使是像这样简单的操作也非常耗时


对于任何帮助,请提前表示衷心的感谢

此任务无法应用于NDK,但应使用AOSP,因为需要以下库:
libgui.so,libui.so
(用于获取本机曲面),NDK中没有这些库

因此,您需要使用AOSP构建来生成二进制文件,然后将其推送到目标

下面是一个适用于AOSP本机可执行文件的to-Khronos EGL示例

ANativeWindow * ANativeWindow_fromSurface(
  JNIEnv *env,
  jobject surface
)