我正在开发使用 Camera2 API 和 Renderscript API 使用自定义脚本执行YUV到RGB转换的应用。
该应用程序可在除 Android Oreo 8.0 (7.0很好用)上的高端 Huawei 设备上运行。
我的疑问是在新更新中缺少一个库,并且默认的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的Surface。
似乎收到了帧,但是由于某些内部错误,它全为黑色。 由于同一个应用程序适用于7.0,因此我关心的是8.0更新。
是否有进一步调查此问题的方法? 为任何人提供更多见识?
答案 0 :(得分:1)
这似乎是由于更新导致的RS库运行时错误,导致与某些设备不兼容。尝试将gradle版本降级为:
> classpath 'com.android.tools.build:gradle:3.2.1'
希望这会有所帮助。
但是,应该注意的是文档说明它缓存了设备的特定于脚本的 optimized 版本,关键字为“ optimized”。这意味着您的脚本仍应在出现此错误的设备(包括您的华为)上运行。
更新尝试使用:
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解决方案。