3

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 回キャプチャする必要があります。

ありがとう。

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 では利用できない) の一部であるため、完全なシステムのビルド プロセスと一緒にビルドする必要があることです。

このアプリケーションを 1 つのデバイス (個人のデバイスなど) で実行する場合は、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 に答える