如何在Android Studio上创建Renderscript脚本,并让它们运行?

背景

我想研究一下在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的,他们说我需要做的就是在“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

我现在已经添加了一笔金钱来一劳永逸地解决这个问题.

解决方法

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

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

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...