Собственная библиотека RenderScript в aar / apk - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь решить эту проблему:

E / RenderScript: невозможно открыть общую библиотеку (/data/user_de/0/com.xxxx/code_cache/com.android.renderscript.cache/librs.yuv2rgbframes.so): (ноль)

Я установил Renderscript в build.gradle, как указано в документации:

android {
    ...
    defaultConfig {
        ...
        renderscriptTargetApi 18
        renderscriptSupportModeEnabled true
    }
}

Сначала я подумал, что это потому, что сам рендер-скрипт находится в другом модуле (который создает .aar, связанный с проектом приложения), но это, похоже, не проблема. Я попытался поместить вышеупомянутое и в модуль .aar и в модуль приложения - без разницы.

Моим следующим шагом было посмотреть на содержимое .aar и .apk, что приводит к моему вопросу: могу ли я где-то увидеть сгенерированные файлы .so? Я ожидал увидеть .so для arm7 и еще один для x86, но нет.

Есть несколько ТАКИХ вопросов по этому поводу, но они не одно и то же. Но мой главный вопрос здесь связан с тем, как я устраняю неполадки: где заканчивается этот .so файл. Я думаю, что инструменты на самом деле должны быть в порядке, потому что он успешно генерирует заглушки Java для Renderscript ....

...

РЕДАКТИРОВАТЬ: может быть, я неправильно понимаю, что здесь происходит. После вставленной ошибки появилось еще два сообщения:

E / RenderScript: невозможно открыть общую библиотеку (/Data/user_de/0/com.xxx.powerscan/code_cache/com.android.renderscript.cache/librs.yuv2rgbframes.so): (ноль) V / RenderScript: вызов / system / bin / bcc с аргументами '/ system / bin / bcc -unroll-runtime -scalarize-load-store -rs-global-info -rs-global-info-skip-constant -o yuv2rgbframes -output_path /data/user_de/0/com.xxx.powerscan/code_cache/com.android.renderscript.cache -bclib /system/lib64/libclcore.bc -mtriple aarch64 -none-linux-gnueabi -O 3 -aarch64-fix-cortex-a53-835769 -load libbccQTI.so -fPIC -embedRSInfo /data/user_de/0/com.xxx.powerscan/code_cache/com.android.renderscript.cache /yuv2rgbframes.bc -build-checkum abadcafe 'V / RenderScript: вызов /system/bin/ld.mc с аргументами' /system/bin/ld.mc -shared -nostdlib /system/lib64/libcompiler_rt.so -mtriple = aarch64-none-linux-gnueabi --library-path = / system / vendor / lib64 --library-path = / system / lib64 -lRSDriver_adreno -lm -lc /data/user_de/0/com.xxx.powerscan/code_cache/com.android.renderscript.cache /yuv2rgbframes.o -o /data/user_de/0/com.xxx.powerscan/code_cache/com.android.renderscript.cache/librs.yuv2rgbframes.so'

Действительно ли он генерирует этот .so на платформе?

1 Ответ

0 голосов
/ 16 января 2019

Да, код Renderscript компилируется в целевой файл из его внутреннего формата битового кода. Это сделано так, потому что каждое устройство Android отличается и поддерживает RS по-разному. Самые базовые платформы будут обеспечивать уровень «драйвера» ЦП, который будет использовать ЦП только для выполнения работы RS (используя несколько потоков). В этом случае ваш битовый код RS компилируется в собственный код. Большинство современных платформ Android используют вместо этого графический процессор или встроенный DSP. В этом случае битовый код для вашего конкретного кода RS «компилируется» в инструкции GPU / DSP, а уровень «драйвера» платформы для RS будет выгружать ваши операции RS в GPU / DSP.

Этот доклад содержит некоторую информацию о том, как это работает, и, надеюсь, предоставит вам некоторую полезную информацию: https://youtu.be/3ynA92x8WQo

...