【问题标题】:android can't load SupportV8 RenderScript in api <17android 无法在 api <17 中加载 SupportV8 RenderScript
【发布时间】:2015-07-16 04:51:37
【问题描述】:

我只想在我的应用程序中使用 RenderScript 的 ScriptIntrinsicBlur,我添加了 renderscript.v8.jar(在 android 支持 lib v8 中)以支持 17 个以下的 api,但它在这条线上崩溃(在 api

        RenderScript rs = RenderScript.create(getApplicationContext());

异常输出是

 java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:299)
        at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
        at java.util.concurrent.FutureTask.run(FutureTask.java:137)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
        at java.lang.Thread.run(Thread.java:856)
 Caused by: android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Couldn't load RSSupport: findLibrary returned null
        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)

有人知道我该如何处理吗?

【问题讨论】:

标签: android crash android-support-library renderscript


【解决方案1】:

您需要告诉 Eclipse 或 Android Studio 使用 RenderScript 支持模式。

在 Eclipse 中,编辑您的 project.properties 文件并添加:

renderscript.target=18 renderscript.support.mode=true

在 Android Studio 中,编辑您的应用模块中的 build.gradle 文件并将其添加到 defaultConfig 附件中(有关详细信息,请参阅 http://developer.android.com/guide/topics/renderscript/compute.html#ide-setup):

renderscriptTargetApi 18 renderscriptSupportModeEnabled true

目标 API 级别必须是您可以使用的最高级别。如果您的最低 SDK 级别较高,则忽略此值并使用最低 SDK 值。

【讨论】:

  • 您需要更具体地了解您所看到的问题。
  • 解决我的问题的是切换到构建工具 22.0.1 缺少一个库,该库不会被打包到较新的构建工具上。你会认为谷歌事先测试?
  • 工具可能需要更新。 Renderscript API 值不会与 Android API 版本或工具版本同步。有时,您使用的内核“形式”也会受到影响。这可能会让人很困惑。谷歌在发布之前确实进行了测试,但几乎不可能测试所有可能的设备,所以事情可能会从裂缝中溜走。通常,工具更新和重建会解决这样的问题。
  • 还要确保您实际上是在导入 android.support.v8.renderscript 类而不是本机 android.renderscript 类。对我来说,使用原生类只是显示了我第一次忽略的警告。
【解决方案2】:

有趣的是,即使是 Android Renderscript 示例也无法在模拟器中运行,比如说使用 API 10。(通过 Android Studio 测试,最近的更新,创建示例,使用 API 10 的模拟器 -> 崩溃)。这很令人惊讶。 在我的项目中,如果使用 Renderscript 制作的单一愚蠢模糊效果不可用,我确实尝试/捕获了 Renderscript 并采取后备措施,至少不要让应用程序崩溃。 所以我们知道,设备上缺少共享库。这就是为什么有些人将 Renderscript 库复制到他们的项目中,通常构建工具也会这样做。可以通过查看 apk/zip 文件轻松检查这一点。 我认为这里给出了一个很好的教程:http://possiblemobile.com/2013/10/renderscript-for-all

【讨论】:

  • 您能否添加有关您的解决方案的更多详细信息?如果链接无效,则只有对链接的引用将无用
  • 我的解决方案只是一些后备,因为 Renderscript 只是用于一种奇特的效果。我找到了有关模拟器问题的更多信息:“RenderScript 库仅包括 armeabi-v7a 的 JNI 库,而 2.x 模拟器仅适用于 armeabi,这似乎是问题所在。” code.google.com/p/android/issues/detail?id=68520 请查看您的 apk(以 zip 文件形式打开)。应该有库“lib/[armeabi-v7a | mips | x86]/[librsjni.so | libRSSupport.so]”。如果是这种情况,您将无法改善结果,因为 Google 已修复此问题。
  • stackoverflow.com/questions/14458478/… 似乎回答了有关获取 armv7 模拟器的问题。我们不支持 armeabi,也不打算支持 armeabi,因为绝大多数传统 ARM 设备(即几乎所有设备)都是 armv7 而​​不是 armeabi。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多