Как получить быстрый цвет пикселей на Android с помощью ScreenshotClient? - PullRequest
0 голосов
/ 14 июня 2019

Я хочу получить цветной пиксель, используя двоичный файл с параметрами x и y. Screencap очень медленный. Использование виртуального дисплея также не дает желаемого результата.

Я нашел и код screencap , и хороший проект: sji-android-screen-capture-old и sji-android-screen-capture-capture-new .

Но эти решения не работают в моем телефоне. Если после компиляции запустить get-raw-image.cpp get-raw-image.cpp я получу ошибки:

WARNING: linker: /data/local/tmp/get-raw-image-4.1.2: unused DT entry: type 0xf arg 0x21d
CANNOT LINK EXECUTABLE: cannot locate symbol "_ZN7android16ScreenshotClient6updateERKNS_2spINS_7IBinderEEE".

Для компиляции я использую следующие настройки:

/root/arm/bin/arm-linux-androideabi-clang -pie get-raw-image.cpp -lsupc++ libgui.so -o /get-raw-image-4.1.2 -Xlinker -rpath=/system/lib -DTARGET_JB

Если запустить Android-fast-screen-capture :

/root/arm/bin/arm-linux-androideabi-clang -pie /screen/ascreencap.cpp -o /test -std=c++11

У меня были ошибки:

In file included from /screen/ascreencap.cpp:8:
In file included from /root/arm/bin/../sysroot/usr/include/binder/IPCThreadState.h:21:
/root/arm/bin/../sysroot/usr/include/binder/Parcel.h:86:11: error: unknown type
      name 'binder_size_t'
    const binder_size_t* objects() const;
          ^
/root/arm/bin/../sysroot/usr/include/binder/Parcel.h:220:47: error: unknown type
      name 'binder_size_t'
                                        const binder_size_t* objects, si...
                                              ^
/root/arm/bin/../sysroot/usr/include/binder/Parcel.h:228:51: error: unknown type
      name 'binder_size_t'
                                            const binder_size_t* objects...
                                                  ^
/root/arm/bin/../sysroot/usr/include/binder/Parcel.h:264:5: error: unknown type
      name 'binder_size_t'
    binder_size_t*      mObjects;
    ^
In file included from /screen/ascreencap.cpp:8:
/root/arm/bin/../sysroot/usr/include/binder/IPCThreadState.h:114:50: error:
      unknown type name 'binder_size_t'
                                           const binder_size_t* objects...
                                                 ^
5 errors generated.

Также я нашел вопрос как использовать-screenshot-клиент-в-моем-андроид-приложении но я не понимаю, как установить ссылку на ScreenshotClient, чтобы компилятор не возвращал ошибку .

Мой телефон - Homtom HT16:

Processor   : ARMv7 Processor rev 3 (v7l)
processor   : 0
model name  : ARMv7 Processor rev 3 (v7l)
BogoMIPS    : 26.00
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm

Может быть, кто-то скажет вам, как скомпилировать код под моим телефоном или как решить проблему.

1 Ответ

0 голосов
/ 16 июня 2019

Я решил свою проблему.

Шаги:

1) Скопировать нужную библиотеку с телефона Android (libgui.so, libui.so, libcutils.so, libutils.so, libbinder.so).

2) Добавить в sys_root (при сохраненииndk файлы кодов lib из Android Android 6_r1 libs: utils, cutils, system, log, hardware, system, ports, core, include/gui, include/ui, include/binder).Вы можете запустить этот код, чтобы найти системный корень:

echo "#include <bogus.h> int main(){}" > t.c; GCC_OR_CLANG_BINARY_LINK -v t.c; rm t.c

Ошибки напечатаны на всех путях, где поиск компилятора включает файлы.или используйте --sysroot=YOUR_PATH для установки вашего пути.

3) Добавьте флаги -Wl,--unresolved-symbols=ignore-all для игнорирования ошибок и --target=armv7-none-linux-androideabi23 (23 или другие) для установки целевой версии.

Полная команда my clang:

/Users/macbookair/Documents/test/bin/clang -fPIE -pie fast-screen-capture.cpp *.so -o ./screencap --target=armv7-none-linux-androideabi23 -Wl,--unresolved-symbols=ignore-all -s

Успехов!

...