我正在尝试解决此问题:
E / RenderScript:无法打开共享库(/data/user_de/0/com.xxxx/code_cache/com.android.renderscript.cache/librs.yuv2rgbframes.so):(空)
我已按照文档说明在build.gradle中设置了渲染脚本:
android {
...
defaultConfig {
...
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
}
}
起初,我认为这是因为renderscript本身在另一个模块中(它使.aar由应用程序项目链接到其中),但这似乎不是问题。我尝试将以上内容放入.aar模块和应用程序模块中-没什么区别。
我的下一步是查看.aar和.apk的内容,这导致了我的问题:我应该能够在某处看到生成的.so文件吗?我希望在arm7上看到一个.so,在x86上看到另一个,但是没有。
对此有一些SO问题,但它们不是同一回事。但是,我的主要问题与如何解决此问题有关:.so文件在哪里结束。我认为这些工具实际上必须设置为OK,因为它成功为renderscript生成了Java存根...。
...
编辑:也许我误解了这里发生的事情。错误后,我粘贴了另外两条消息:
E / RenderScript:无法打开共享库 (/data/user_de/0/com.xxx.powerscan/code_cache/com.android.renderscript.cache/librs.yuv2rgbframes.so): (空)V / RenderScript:使用args调用/ system / bin / bcc '/ system / bin / bcc-展开运行时-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-checksum abadcafe'V / RenderScript:使用args'/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吗?
答案 0 :(得分:1)
是的,Renderscript代码是从其内部位代码格式在目标上编译的。这样做是因为每个Android设备都不相同,并且以不同的方式支持RS。非常基本的平台将提供CPU“驱动程序”层,该层仅利用CPU来完成RS工作(使用多个线程)。在这种情况下,您的RS位代码将编译为本机代码。大多数现代Android平台将改为使用GPU或板载DSP。在这种情况下,您特定RS代码的位代码会“编译”到GPU / DSP指令中,RS的平台“驱动程序”层会将您的RS操作卸载到GPU / DSP。
此讲座提供了有关其工作方式的一些信息,并有望为您提供一些有用的信息:https://youtu.be/3ynA92x8WQo