2012-09-26 50 views
3

Android平台有一个实用工具类,用于拍摄android截图。我将“ScreenCap.cpp”复制到JNI文件夹,然后通过NDK构建,但失败。 NDK的编译器没有找到需要的库:如何在我的应用程序上使用ScreenCap.cpp?

#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

试试这个解决方案? http://stackoverflow.com/questions/7762643/android-take-screen-shot-programatically –

+0

嗨Aswin,该解决方案只是帮助捕获我自己的应用程序的屏幕截图。当我的应用程序在后台运行时,我需要的是拍摄整个android屏幕的屏幕截图。 –

+0

不,请参阅接受的答案 - 使用CM二进制文件? –

回答

0

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

LOCAL_C_INCLUDES := PATH_TO_SKImageEncoder_HEADER 
+0

我做到了。但它仍然失败。是否有任何教程如何在JNI上构建自定义本机库? –

+0

发布错误,我会尽力帮助你。我通过谷歌搜索和他们在NDK包内提供的样本了解了很多NDK内容。是的,当你第一次学习时,这是一个非常头痛的问题。haha – Infinity

+0

我在我的保管箱https://dl.dropbox.com/u/15261504/jni.zip上分享了JNI文件夹。我有必要的库,但我无法建立它。请看一下。 –

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,然后从中读取所有需要的符号。只要符号的签名保持不变,这将适用于任何设备。

希望这会有所帮助。

相关问题