如何解决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本机可执行文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。