背景

我想研究有关在Android和Renderscript上总体上创建Renderscript脚本的问题,并且在过去的一年中,Android-Studio成为Google唯一支持Android应用程序开发的IDE。

问题

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

  • https://developer.android.com/guide/topics/renderscript/compute.html#writing-an-rs-kernel
  • How to use the Renderscript Support Library with Gradle
  • http://developer.android.com/guide/topics/renderscript/compute.html
  • https://futurestud.io/blog/how-to-use-the-renderscript-support-library-with-gradle-based-android-projects/
  • http://developer.android.com/guide/topics/renderscript/advanced.html

  • 事实是,我看过的所有教程和示例都是针对Eclipse的,他们说,我需要做的就是在“原始”文件夹中创建一个“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
    

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

    最佳答案

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

    更新:自2015年9月起,新版本的构建工具(23.0.0)不适用于Renderscript支持库,因此您必须禁用它或将工具还原为22.0.01。

    关于android - 如何在Android Studio上创建Renderscript脚本,并使它们运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31872140/

    10-10 18:40