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 では、クラスScreenshotClientは の一部ですlibgui.soScreenshotClientの使用例である screencap の makefile は、リンカーが他のライブラリを必要とする可能性があることを示唆しています。

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/screencap/system/bin/screenshot

于 2012-09-28T19:46:15.063 に答える