android - 华为8.0 Renderscript加载RS驱动失败

标签 android opengl-es android-camera2 renderscript huawei-mobile-services

我正在开发一个应用程序,它使用 Camera2 APIRenderscript API 通过自定义脚本执行 YUV 到 RGB 的转换。

该应用可在所有设备上运行,但在装有 Android Oreo 8.0 的高端 Huawei 设备上运行(7.0 运行良好)。

我怀疑新更新中缺少一个库,默认的 RS 实现无法处理我的操作。

应用启动时RS相关的logcat如下:

D/OpenGLRenderer:   HWUI Binary is  enabled
D/OpenGLRenderer: HWUI GL Pipeline
D/RenderScript HIDL Adaptation: IRenderScriptDevice::getService()
D/RenderScript HIDL Adaptation: IRenderScriptDevice::getService() returned 0x0
    Using Fallback Path.
E/RenderScript: Failed loading RS driver: dlopen failed: library "libRSDriverArm.so" not found
E/RenderScript: Failed to load runtime libRSDriverArm.so, loading default
D/RenderScript: Successfully queried cache dir: /data/user_de/0/com.loopsie.android/code_cache
    Setting cache dir: /data/user_de/0/com.loopsie.android/code_cache
E/RenderScript: Unable to open shared library (/data/user_de/0/com.loopsie.android/code_cache/com.android.renderscript.cache/librs.yuv420888.so): (null)
V/RenderScript: Invoking /system/bin/bcc with args '/system/bin/bcc -unroll-runtime -scalarize-load-store -rs-global-info -rs-global-info-skip-constant -o yuv420888 -output_path /data/user_de/0/com.loopsie.android/code_cache/com.android.renderscript.cache -bclib /system/lib/libclcore_neon.bc -mtriple armv7-none-linux-gnueabi -O 3 -fPIC -embedRSInfo /data/user_de/0/com.loopsie.android/code_cache/com.android.renderscript.cache/yuv420888.bc -build-checksum abadcafe'
V/RenderScript: Invoking /system/bin/ld.mc with args '/system/bin/ld.mc -shared -nostdlib /system/lib/libcompiler_rt.so -mtriple=armv7-none-linux-gnueabi --library-path=/system/vendor/lib --library-path=/system/lib -lRSDriver -lm -lc /data/user_de/0/com.loopsie.android/code_cache/com.android.renderscript.cache/yuv420888.o -o /data/user_de/0/com.loopsie.android/code_cache/com.android.renderscript.cache/librs.yuv420888.so'
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Swap behavior 2

按照应用程序的流程,帧从 Renderscript 分配发送到连接到 OpenGL 的 SurfaceTexture 的表面。

似乎收到了帧,但由于某些内部错误,它全黑了。 由于同一个应用程序在 7.0 上运行,我担心的是 8.0 更新。

有没有办法进一步调查这个问题? 有没有人提供更多见解?

最佳答案

这似乎是 RS 库的运行时错误,由导致与某些设备不兼容的更新引起。尝试将您的 gradle 版本降级为:

>  classpath 'com.android.tools.build:gradle:3.2.1'

希望这对您有所帮助。

但是,应该注意的是文档说它缓存设备特定优化 版本的脚本,关键字“优化”。这意味着您的脚本应该仍然可以在出现此错误的设备上运行(包括您的华为)。

更新尝试使用:

gradle-4.10.1-all.zip
classpath 'com.android.tools.build:gradle:3.3.0'

// buildToolsVersion does NOT have to be manually set as you are using gradle version > 3.2.1 (will default to 28.0.3) so you can remove this line.
buildToolsVersion '28.0.3' 

我相信这个补丁也能解决您手机上的问题。如果没有,您仍然可以使用 3.2.1 解决方案。

关于android - 华为8.0 Renderscript加载RS驱动失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51898012/

相关文章:

android - 如何以编程方式识别是否有任何损坏的 USB 电缆连接到 Android 充电端口?

Android:HTC EVO 上的相机预览方向(Android 2.1 或 2.2)

android - android.app.Fragment 和 android.support.v4.app.Fragment 的区别

java - ActivityCompat.requestPermissions 未显示对话框

ios - OpenGL ES 2.0 渲染到多个纹理

matrix - OpenGL 矩阵缩放然后翻译仍在缩放我的位置

android - 如何在Android的camera2 API中复用MediaRecorder的Surface?

android - 为什么 camera2 支持的预览尺寸宽度总是大于高度?

ios - UV 更改后纹理不再渲染

android-camera - Camera 2 api全屏不拉伸(stretch)