RenderScript支持库在x86设备上崩溃了。

5

我在Razor i这台x86设备上运行android.support.v8.renderscript.*时出现了致命异常。如果我使用android.renderscript.*问题就解决了。对于ARM设备没有问题。以下是异常信息:

03-03 18:35:26.009  25011-25011/com.example.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.MainActivity}: android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1306]:   143 cannot locate '__strlen_chk'...
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2153)
            at android.app.ActivityThread.access$700(ActivityThread.java:137)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5031)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1306]:   143 cannot locate '__strlen_chk'...
            at android.support.v8.renderscript.RenderScript.create(RenderScript.java:945)
            at android.support.v8.renderscript.RenderScript.create(RenderScript.java:982)
            at android.support.v8.renderscript.RenderScript.create(RenderScript.java:968)
            at com.example.app.MainActivity$PlaceholderFragment.createScript(MainActivity.java:92)
            at com.example.app.MainActivity$PlaceholderFragment.onCreateView(MainActivity.java:81)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
            at android.app.BackStackRecord.run(BackStackRecord.java:635)
            at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397)
            at android.app.Activity.performStart(Activity.java:5067)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2088)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2153)
            at android.app.ActivityThread.access$700(ActivityThread.java:137)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5031)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
            at dalvik.system.NativeStart.main(Native Method)

4
x86问题是我们工具链中的一个错误,导致库无法在某些设备上加载。我正在修复二进制文件,很快就会有新的librsjni.so可用,可能会在明天发布。 - Tim Murray
另一个线程会很好,我没有看到Nexus S / 4.2和ColorMatrix有任何问题,但这是可能的。 - Tim Murray
1
在19.1.0版本中,我仍然遇到这个错误,你知道这个错误修复将会在什么时候发布吗? - fmt.Println.MKO
@TimMurray 我可以确认这个错误在19.1.0版本中仍然存在,我的RS代码可以在所有ARM设备上运行,但是在x86 Razor i上无法运行。现在的错误信息不同了:android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Couldn't load RSSupport: findLibrary returned null。 - X.Y.
3
找到相关链接:https://code.google.com/p/android/issues/detail?id=71347 和 https://dev59.com/4Xzaa4cB1Zd3GeqPWvbj - X.Y.
3个回答

8

当我使用Build Tools 21.1.1和proguard时,遇到了相同的问题,您可能需要使用以下proguard设置:

-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class android.support.v8.renderscript.** { *; }

更多信息请参见:使用Android Renderscript v8支持库


我认为这应该被接受为答案,这对我起作用了。 - yrazlik
你的回答毫无意义,我使用 minifyEnabled false 的调试版本,这与 proguard 没有任何关系!! - user924

5
使用 Build Tools 21.1.1 版本,这个问题就消失了。

构建29.0.3存在问题,仅适用于最新的Android。 - user924

2

我认为你应该包含来自\build-tools\19.0.2\renderscript\lib\packaged的本地库。


我尝试了19.0.3,但不起作用。在发布说明中,19.0.2和19.0.3都与RenderScript问题有关。你对RenderScript的使用体验如何?我发现在不同设备上结果不一致... - X.Y.
我注意到19.0.3版本缺少一个库..."android-sdk\build-tools\19.0.3\renderscript\lib\libclcore.bc",所以我从19.0.2版本中复制了它,并且似乎可以在Andorid Studio 0.4.6中使用。我对renderscript没有任何经验,很抱歉,昨天是我第一次接触renderscript。 - Andrei Verdes
如果你设置了renderscriptSupportModeEnabled true,那么gradle会自动添加所需内容,不需要手动添加。有很多错误的答案,请注意。 - user924

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接