如何在 Android Studio 上创建 Renderscript 脚本,并使它们成为 运行?
How to create Renderscript scripts on Android Studio, and make them run?
背景
我想研究在 Android 上创建 Renderscript 脚本和一般的 Renderscript,在过去的一年里,Android-Studio 成为唯一 IDE Google 支持 Android 应用程序开发。
问题
为此,我找到了多个网站,例如:
- 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.0.0-preview\llvm-rs-cc.exe'' finished with non-zero exit value -1073741515
问题
在 Android-Studio 上创建和 运行 Renderscript 脚本的正确方法是什么?
编辑:遗憾的是我又遇到了完全相同的问题,这一次,将 renderscriptTargetApi 设置为 18 没有帮助。我还尝试了另一个使用 Renderscript 的项目,here and here,但两者都有相同的问题:
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.0.1\llvm-rs-cc.exe'' finished with non-zero exit value -1073741515
我现在已经添加了赏金来一劳永逸地解决这个问题。
成功构建项目所需的唯一修改是将 renderscriptTargetApi
值从 22 更改为 18。否则 Renderscript 脚本编译会生成使用 64 位 ABI 的中间文件,构建过程无法 link 在使用 32 位 ABI 的 22.0.01 构建工具中使用预编译中间体。
更新:截至 2015 年 9 月,新版本的构建工具 (23.0.0) 不适用于 Renderscript 支持库,因此您必须禁用它或将工具恢复到 22.0.01。
构建 android 内部带有 renderscript 的应用程序与构建普通的 android 应用程序大不相同。很高兴看到你最终成功了:)
对于任何其他想要使用源代码的人,可以在 github 找到它:
https://github.com/carlemil/JuliaLiveWallpaper
和我参与的另外两个 RS 项目:
https://github.com/carlemil/alw.plasma and https://github.com/carlemil/alw.eld
如果你想看他们 "in action" 我在 google 上找到了他们播放到:
https://play.google.com/store/apps/developer?id=Erbsman
这已在 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 version 2.10 is required",请不要更改
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>Gradle更改为使用默认值gradle wrapper 根据 .
背景
我想研究在 Android 上创建 Renderscript 脚本和一般的 Renderscript,在过去的一年里,Android-Studio 成为唯一 IDE Google 支持 Android 应用程序开发。
问题
为此,我找到了多个网站,例如:
- 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.0.0-preview\llvm-rs-cc.exe'' finished with non-zero exit value -1073741515
问题
在 Android-Studio 上创建和 运行 Renderscript 脚本的正确方法是什么?
编辑:遗憾的是我又遇到了完全相同的问题,这一次,将 renderscriptTargetApi 设置为 18 没有帮助。我还尝试了另一个使用 Renderscript 的项目,here and here,但两者都有相同的问题:
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.0.1\llvm-rs-cc.exe'' finished with non-zero exit value -1073741515
我现在已经添加了赏金来一劳永逸地解决这个问题。
成功构建项目所需的唯一修改是将 renderscriptTargetApi
值从 22 更改为 18。否则 Renderscript 脚本编译会生成使用 64 位 ABI 的中间文件,构建过程无法 link 在使用 32 位 ABI 的 22.0.01 构建工具中使用预编译中间体。
更新:截至 2015 年 9 月,新版本的构建工具 (23.0.0) 不适用于 Renderscript 支持库,因此您必须禁用它或将工具恢复到 22.0.01。
构建 android 内部带有 renderscript 的应用程序与构建普通的 android 应用程序大不相同。很高兴看到你最终成功了:) 对于任何其他想要使用源代码的人,可以在 github 找到它: https://github.com/carlemil/JuliaLiveWallpaper 和我参与的另外两个 RS 项目: https://github.com/carlemil/alw.plasma and https://github.com/carlemil/alw.eld 如果你想看他们 "in action" 我在 google 上找到了他们播放到: https://play.google.com/store/apps/developer?id=Erbsman
这已在 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 version 2.10 is required",请不要更改
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>Gradle更改为使用默认值gradle wrapper 根据