Как создать сценарии Renderscript в Android Studio и заставить их работать?
Фон
Я хочу исследовать создание сценариев Renderscript для Android и Renderscript в целом, и за последний год Android-Studio стала единственной IDE, которую Google поддерживает для разработки приложений для Android.
Эта проблема
Для этого я нашел несколько сайтов, как таковых:
- https://developer.android.com/guide/topics/renderscript/compute.html
- Как использовать библиотеку поддержки Renderscript с 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" внутри папки "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". Ошибка