必要なライブラリはlibsurfaceflinger_client.soと呼ばれます。コマンドを使用して、Gingerbread以降のバージョンの Android を実行している任意のデバイスからプルできます。
adb pull /system/lib/libsurfaceflinger_client.so
ICS または JB では、クラスScreenshotClientは の一部ですlibgui.so
。ScreenshotClientの使用例である 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