【问题标题】:How to create Renderscript scripts on Android Studio, and make them run?如何在 Android Studio 上创建 Renderscript 脚本并使其运行?
【发布时间】:2015-08-07 07:39:31
【问题描述】:

背景

我想研究在 Android 上创建 Renderscript 脚本和一般的 Renderscript,在过去的一年里,Android-Studio 成为了谷歌唯一支持用于 Android 应用程序开发的 IDE。

问题

为此,我找到了多个网站,例如:

问题是,我看到的所有教程和示例都是针对 Eclipse 的,他们说我需要做的就是在“raw”文件夹中创建一个“rs”文件(也在“src”文件夹中尝试过) ,在“MainActivity.java”文件的同一文件夹中),它将为我自动生成所需的Java文件,前缀为“ScriptC_”。

但这对我不起作用。

我尝试过的

我从我找到的一些示例(用于 Eclipse)中创建了一个名为“julia.rs”的文件。代码如下:

#pragma version(1)
#pragma rs java_package_name(lb.com.myapplication)

float cx;
float cy;
float width;
float height;
float zoom;
int precision;

uchar *color;

void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) {
    float fx = (x + 0.5f) / width * (4.f / zoom) - (2.f / zoom);
    float fy = (y + 0.5f) / height * (4.f / zoom) - (2.f / zoom);

    float t = 0;
    int k = 0;

    while(k < precision - 1) {
        t = fx * fx - fy * fy + cx;
        fy = 2 * fx * fy + cy;
        fx = t;
        if (fx * fx + fy * fy >= 4) {
           break;
        }
        k++;
    }
    out->b = color[k*3+0];
    out->g = color[k*3+1];
    out->r = color[k*3+2];
}

在 java 文件中,我想访问新创建的文件,所以我开始编写“ScriptC”,并希望它能够填充所需的额外字符,但事实并非如此。

例如,我不能使用这段代码:

mScript=new ScriptC_julia(mRS,getResources(),R.raw.julia);

我也尝试为旧版 Android 添加 Renderscript 支持,但这当然没有帮助:

defaultConfig {
    renderscriptTargetApi 22
    renderscriptSupportModeEnabled true
    ...

我尝试的另一件事是通过应用程序的上下文菜单使用 New->Folder->RenderScript 文件夹,但随后出现此错误:

Error:Execution failed for task ':app:compileDebugRenderscript'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\AppData\Local\Android\Sdk\build-tools\23.0.0-preview\llvm-rs-cc.exe'' finished with non-zero exit value -1073741515

问题

在 Android-Studio 上创建和运行 Renderscript 脚本的正确方法是什么?


编辑:可悲的是,我又遇到了完全相同的问题,这一次,将 renderscriptTargetApi 设置为 18 并没有帮助。我还用 Renderscript 尝试了另一个项目,herehere,但都有相同的问题:

Error:Execution failed for task ':renderscript:compileArmDebugRenderscript'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\android\Sdk\build-tools\23.0.1\llvm-rs-cc.exe'' finished with non-zero exit value -1073741515

我现在添加了一个赏金来一劳永逸地解决这个问题。

【问题讨论】:

  • 您正在使用 API 23 预览版。你能用 22 再试一次吗?
  • 这个项目已经结束了。我没有调查到底出了什么问题,而是创建了一个新的(使用上面@StephenHines 链接中的分步操作),然后复制了您的 java、布局、菜单和渲染脚本文件。然后修复了一些错误并在 RS 和 Java 中添加了一些代码,以便它实际上可以让您看到分形:drive.google.com/file/d/0B4gY85GI2HEzQTFlbnRrYld1Q1k
  • “软管”如“损坏”。 Android 项目文件损坏在多代开发工具中非常普遍。
  • 将 buildTooldVersion 更改为“22.0.1”,将 targetSdkVersion 更改为
  • 实际上问题是不同的 - 如果 renderscriptTargetApi 是 21+,以前的构建工具 22.0.01 不起作用。现在构建工具 23.0.0 根本不起作用。另外,我认为你无法收回赏金,即使我(或任何获得它的人)想放弃它。

标签: android eclipse android-studio renderscript


【解决方案1】:

成功构建项目所需的唯一修改是将 renderscriptTargetApi 值从 22 更改为 18。否则 Renderscript 脚本编译会生成使用 64 位 ABI 的中间文件,构建过程无法与 22.0 中的预编译中间文件链接。 01 使用 32 位 ABI 的构建工具。

更新:截至 2015 年 9 月,新版本的构建工具 (23.0.0) 无法与 Renderscript 支持库一起使用,因此您必须禁用它或将工具恢复到 22.0.01。

【讨论】:

【解决方案2】:

在内部构建带有renderscript 的android 应用程序与构建一个普通的android 应用程序是完全不同的。很高兴看到你最终完成了这个工作:) 对于其他想要使用源代码的人,可以在 github 上找到它: https://github.com/carlemil/JuliaLiveWallpaper 以及我参与的另外两个 rs 项目: https://github.com/carlemil/alw.plasmahttps://github.com/carlemil/alw.eld 如果你想看到他们“在行动”,我让他们在谷歌播放: https://play.google.com/store/apps/developer?id=Erbsman

【讨论】:

  • 感谢您提供这些很酷的示例。如果您可以放置​​其他有用的链接,那就太好了。我需要对 Renderscript 做一些研究,所以我想阅读所有关于它的重要内容。
  • 前段时间我确实写了一些关于 rs 的短文:jayway.com/2014/02/11/renderscript-on-android-basics 和另一篇关于 Intrinsics 的简短说明,它可以为你做很多事情,而你不必自己写任何 rs:jayway.com/2014/10/01/android-and-renderscript-intrinsics跨度>
  • 再次感谢。我想它会帮助我。在这里,再来一个 +1 。 :)
  • 酷,让我知道你用 RS 做了什么,也许我会得到一些灵感来再次使用它:)
  • 我正在做一个关于它的演示。只需要对它做一些研究。也许以后会用它来做其他事情。说,我可以问一些关于它的一般性问题吗?例如,当您调用分配时,它是否分配了更多内存,这次是在本机内存(实际 RAM,而不是堆)上?是否可以避免额外的内存分配?例如,是否有可能只使用输入位图,在 Renderscript 脚本上分配输出,执行操作,释放输入并返回输出?这样,堆上就不会有 2 个位图...
【解决方案3】:

这已在 gradle-plugin 2.1.0 和 Build-Tools 23.0.3 中修复。 使用下面的代码:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
    }
}


android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    ...
}

更新: 如果出现错误“需要 Gradle 版本 2.10”,请勿更改

classpath 'com.android.tools.build:gradle:2.1.0'

改为将 Project\gradle\wrapper\gradle-wrapper.properties 文件的 distributionUrl 字段更新为

distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

并根据"Gradle Version 2.10 is required." ErrorFile > Settings > Builds,Execution,Deployment > Build Tools > Gradle >Gradle 更改为 Use default gradle wrapper

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 2018-04-19
    • 2011-03-06
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2018-12-12
    • 2014-10-03
    • 2021-07-20
    相关资源
    最近更新 更多