2012-09-26 47 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,然後從中讀取所有需要的符號。只要符號的簽名保持不變,這將適用於任何設備。

希望這會有所幫助。

相關問題