Как создать сценарии Renderscript в Android Studio и заставить их работать?

Фон

Я хочу исследовать создание сценариев Renderscript для Android и Renderscript в целом, и за последний год Android-Studio стала единственной IDE, которую Google поддерживает для разработки приложений для Android.

Эта проблема

Для этого я нашел несколько сайтов, как таковых:

Дело в том, что все учебные пособия и примеры, которые я видел, предназначены для Eclipse, и они говорят, что все, что мне нужно сделать, это создать файл "rs" внутри папки "raw" (также пробовал в папке "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);

Я также пытался добавить поддержку Renderscript для более старых версий Android, но это, конечно, не помогло:

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

Вопрос

Как правильно создать и запустить скрипт Renderscript на Android-Studio?


РЕДАКТИРОВАТЬ: К сожалению, у меня снова та же проблема, и на этот раз установка RenderscriptTargetApi в 18 не помогает. Я также пробовал другие проекты с Renderscript, здесь и здесь, но оба имеют одинаковые проблемы:

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

Теперь я добавил награду, чтобы решить эту проблему раз и навсегда.

3 ответа

Решение

Единственное изменение, которое нужно было успешно построить, - это изменение. renderscriptTargetApi значение от 22 до 18. В противном случае при компиляции сценария Renderscript создаются промежуточные файлы, использующие 64-разрядный ABI, которые не удается связать процессу сборки с предварительно скомпилированными промежуточными соединениями в инструментах сборки 22.0.01, использующих 32-разрядный ABI.

ОБНОВЛЕНИЕ: по состоянию на сентябрь 2015 года новая версия инструментов сборки (23.0.0) не работает с библиотекой поддержки Renderscript, поэтому либо вам придется отключить ее, либо вернуть инструменты к 22.0.01.

Создание приложений для Android с рендерингом внутри сильно отличается от создания нормального приложения для Android. Приятно видеть, что у вас все получилось в итоге:) Для всех, кто хочет поиграть с источником, его можно найти на github: https://github.com/carlemil/JuliaLiveWallpaper и двух других проектах rs, над которыми я работал: https://github.com/carlemil/alw.plasma и https://github.com/carlemil/alw.eld и если вы хотите увидеть их "в действии", я отправлю их в Google Play по адресу: 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"
    ...
}

ОБНОВЛЕНИЕ: Если появляется ошибка "Требуется версия 2.10 Gradle", НЕ меняйте

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

Вместо этого обновите поле distributionUrl файла Project\gradle\wrapper\gradle-wrapper.properties до

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

и измените File > Settings > Builds,Execution,Deployment > Build Tools > Gradle >Gradle, чтобы использовать упаковщик по умолчанию для Gradle согласно "Требуется Gradle версии 2.10". Ошибка

Другие вопросы по тегам