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次。感谢。
答案 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.soadb pull /system/lib/libskia.so
另一种可能但又丑陋的解决方法是通过dlopen加载libskia.so,然后从中读取所有需要的符号。只要符号的签名保持不变,这适用于任何设备。
希望这有帮助。