2

我正在开发一个应用程序,它可以帮助用户捕获 android 屏幕截图 (Android 4.x)。我知道帧缓冲区在 android ICS 上已损坏。我听说我们可以使用 ScreenShotClient 来执行此操作,如下所示。

ScreenshotClient screenshotClient = new ScreenshotClient();
screenshotClient->update();

但是,我必须导入什么库才能使用它?是否可以在 jni 代码下使用?

4

1 回答 1

7

您需要的库称为libsurfaceflinger_client.so您可以使用命令从任何运行 Gingerbread或更高版本 Android 的设备中提取它

adb pull /system/lib/libsurfaceflinger_client.so

在 ICS 或 JB 上,类ScreenshotClientlibgui.so. screencap 的 makefile 是使用ScreenshotClient的示例,表明链接器可能需要其他库:

libcutils libutils libbinder libskia libui libgui

此外,代码screencap.cpp如下:

ScreenshotClient screenshot;
if (screenshot.update() == NO_ERROR) {
    base = screenshot.getPixels();
    w = screenshot.getWidth();
    h = screenshot.getHeight();
    f = screenshot.getFormat();
    size = screenshot.getSize();
} else {
    const char* fbpath = "/dev/graphics/fb0";
    int fb = open(fbpath, O_RDONLY);
    if (fb >= 0) {
        struct fb_var_screeninfo vinfo;
        if (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo) == 0) {
...

这意味着至少您必须检查 update() 是否成功。不幸的是,除非设备被植根,否则无法授予应用程序读取/dev/graphics/fb0和使用/system/bin/screencapor的后备的权限/system/bin/screenshot

于 2012-09-28T19:46:15.063 回答