如何在我的应用程序上使用ScreenCap.cpp?

时间:2012-09-26 08:50:05

标签: android screen-capture surfaceflinger

Android平台有一个实用程序类,用于获取android截图。我将“ScreenCap.cpp”复制到JNI文件夹,然后通过NDK构建但失败了。 NDK编译器找不到所需的库:

#include <binder/IMemory.h>
#include <gui/SurfaceComposerClient.h>

#include <SkImageEncoder.h>
#include <SkBitmap.h>
#include <SkData.h>
#include <SkStream.h>

这是错误日志:

jni/ScreenCap.cpp:28:28: fatal error: SkImageEncoder.h: No such file or directory

编译终止。

请告诉我如何解决这个问题。

顺便说一下,有没有解决方案以编程方式捕获整个Android屏幕?我需要每秒至少捕捉10次。

感谢。

2 个答案:

答案 0 :(得分:0)

您忘记将SkImageEncoder.h包含在Local_C_Include中。将此行添加到Android.mk文件中

LOCAL_C_INCLUDES := PATH_TO_SKImageEncoder_HEADER

答案 1 :(得分:0)

这个问题很老了,但我会尽力帮助以防万一。

问题是SkImageEncoder.h不是NDK的一部分,而是来自系统的libskia库(在NDK中不可用),然后应该与完整系统的构建过程一起构建。

如果您希望此应用程序在单个设备中运行,例如你个人设备,你应该能够通过修改Android.mk文件来创建一个工作二进制文件:

include $(CLEAR_VARS)
LOCAL_MODULE := system_libskia
LOCAL_SRC_FILES := PATH_TO_LIBSKIA/libskia.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_C_INCLUDES := PATH_TO_SKIA_INCLUDE_FOLDER

LOCAL_SHARED_LIBRARIES := system_libskia

您可以使用running:

获取设备的libskia.so
adb pull /system/lib/libskia.so

另一种可能但又丑陋的解决方法是通过dlopen加载libskia.so,然后从中读取所有需要的符号。只要符号的签名保持不变,这适用于任何设备。

希望这有帮助。