3

Android 平台有一个实用程序类,用于获取 android screenshot 。我将“ 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 次。

谢谢。

4

2 回答 2

0

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

LOCAL_C_INCLUDES := PATH_TO_SKImageEncoder_HEADER
于 2012-09-26T09:02:09.883 回答
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

您可以通过运行以下命令获取设备的 libskia.so:

adb pull /system/lib/libskia.so

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

希望这可以帮助。

于 2013-11-11T11:49:58.337 回答