Android NDK-如何从本机代码获取信息

问题描述

我想为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;
}
C:\adb>adb shell data/local/tmp/mysc
My Capture Command!

C:\adb>

我不需要任何本机的 java通信,只需获取屏幕的当前视图并仅返回其中的一部分即可。它与screencap bin几乎具有相同的功能,但是我不需要整个屏幕,只是一部分。我曾尝试打开帧缓冲区,如旧的screepcap source code所示,但没有成功。

我正在NDK示例中查找“ ANativeWindow”,它看起来像我需要的东西,但是在不连接Java应用程序的情况下我不怎么使用它。可能会让我浮出水面的功能是

ANativeWindow * ANativeWindow_fromSurface(
  JNIEnv *env,jobject surface
)

但是看起来我需要从java调用这样的函数来捕获env和surface。该解决方案可能非常简单,但是缺乏对ndk的了解,即使是这样的简单操作,也非常耗时...

在此先感谢您!

解决方法

此任务无法应用于NDK,但应使用AOSP,因为需要以下库:libgui.so,libui.so(用于获取本机表面),NDK中不存在。

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

这是Khronos EGL示例的link,适用于AOSP本机可执行文件。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...