Android renderscript android studio

Renderscript

Renderscript — отдельная технология для работы с графикой и 3D на низком уровне, способная быстро работать с изображениями.

Признаться, предварительное знакомство с Renderscript оставило меня в недоумении. Сама Google не так много говорит об этой технологии — примеров раз, два и обчёлся. Кроме того, с версии Android 16 там что-то поменяли, и все старые примеры из интернета, которые я хотел изучить, пошли коту под хвост — Eclipse стал ругаться, что все эти классы и методы устарели.

Я так и не понял, стоит ли интересоваться данной технологией дальше или не обращать на неё внимания. Даже документация написана как-то неряшливло и непонятно. А примеры из документации у меня даже не заработали как надо, пришлось самостоятельно разбираться и исправлять ляпы в проекте. Поэтому оставлю статью с заделом на будущее. Может потом вернёмся к этой теме.

Разработка с использованием Renderscript немного отличается от создания обычного приложения. Создайте новый проект для API 16 и выше. Разметка для основной активности:

Далее в в папке src/имя_пакета создайте новый файл с расширением rs, например, mono.rs следующего содержания:

Данный файл является скриптом перевода цветного изображения в черно-белый. Во второй строчке в скобках нужно указать свой пакет. Когда вы сохраните данных документ, то в папке res/raw появится файл mono.bc. Не обращаем на него внимания, трогать не надо.

Теперь откроем класс активности и напишем код:

Источник

Android — RenderScript

В этой главе мы узнаем об Android RenderScript. Обычно приложения на Android спроектированы так, чтобы потреблять как можно меньше ресурсов. Но некоторые приложения, такие как 3D-игры, требуют высокоуровневой обработки на Android.

Для обеспечения этих приложений высокой производительностью Android представил RenderScript. Это основанный на Android фреймворк, который используется для запуска приложений, которые выполняют очень сложные вычислительные задачи. Разработка на этой основе осуществляется в Native Development Kit (NDK), предоставляемом Android. RenderScript чрезвычайно полезен для приложений, которые выполняют следующие типы действий:

  • 3D-рендеринг
  • Обработка изображения
  • Вычислительная фотография
  • Компьютерное зрение

Как работает RenderScript

Основа RenderScript в основном основана на параллельных вычислениях данных. Он распределяет нагрузку приложения на все процессоры, доступные на вашем устройстве, такие как многоядерные процессоры или графические процессоры.

Такое параллельное распределение рабочей нагрузки освобождает программиста от напряжения балансировки нагрузки и планирования работы. Вы можете написать более подробные и сложные алгоритмы для своего приложения, не беспокоясь о вычислительной мощности.

Как начать

Для использования RenderScript Framework у вас должно быть две вещи:

  • Ядро RenderScript
  • API RenderScript

Ядро RenderScript

Ядро — это программа, которая управляет инструкциями по обработке данных и управляет рабочей нагрузкой на центральных процессорах. Ядро является фундаментальной частью операционной системы.

Точно так же, чтобы запустить среду RenderScript, нам нужен письменный скрипт с именем Kernel, чтобы управлять всеми запросами на обработку данных из нашего приложения и использовать больше функций ОС Android, предоставляемых NDK, и, как упоминалось ранее, разработка RenderScript выполняется в Native. Комплект разработчика Android.

Читайте также:  Топ медиаплееров для андроида

Сценарий ядра написан на языке C-99 языка Си. Этот стандарт был до разработки C ++. Файл сценария ядра RenderScript обычно помещается в файл .rs . Каждый файл называется скриптом. Сценарий RenderScript Kernel может содержать следующие элементы:

Он объявляет версию языка RenderScript Kernel, используемую в этом сценарии.

Это объявление называет имя пакета Java-класса, на которое будет влиять этот код ядра.

Вы можете вызывать эти вызываемые функции из вашего кода JAVA с произвольными аргументами.

Скрипт Глобальные переменные

Это так же, как переменные, определенные в языке программирования C и C ++. Вы можете получить доступ к этим переменным из вашего кода JAVA.

Он объявляет версию языка RenderScript Kernel, используемую в этом сценарии.

Это объявление называет имя пакета Java-класса, на которое будет влиять этот код ядра.

Источник

Использование Renderscript на android-устройствах с процессорами Intel®

В статье я хотел бы дать краткое описание работы технологии Renderscript внутри Android, сравнить ее производительность с Dalvik на конкретном примере аndroid-устройства с процессором Intel и рассмотреть небольшой прием оптимизации renderscript.
Renderscript – это API, который включает функции для 2D/3D рендеринга и математических вычислений с высокой производительностью. Он позволяет описать какую-либо задачу с однотипными независимыми вычислениями над большим объемом данных и разбить ее на однородные подзадачи, которые могут быть выполнены быстро и параллельно на многоядерных Android-платформах.
Такая технология может повысить производительность ряда dalvik приложений, связанных с обработкой изображений, распознаванием образов, физическим моделированием, клеточно-автоматной моделью и др., которые, в свою очередь, не потеряют аппаратной независимости.

1. Технология Renderscript внутри Android

Приведу краткий обзор механизма работы технологии Renderscript внутри Android, ее достоинства и недостатки.

1.1 Renderscript offline-компиляция

Renderscript начал поддерживаться в Honeycomb/Android 3.0 (API 11). А именно, в Android SDK в директории platform-tools появился llvm-rs-cc (offline compiler) для компиляции renderscript (*.rs файл) в байт-код (*.bc файл) и генерации java классов объектов (*.java файлы) для структур, глобальных переменных внутри renderscript и самого renderscript. В основе llvm-rs-cc лежит Clang компилятор с небольшими изменениями под Android, который представляет собой front-end для LLVM компилятора.

1.2 Renderscript run-time компиляция

В Android появился framework, построенный на базе LLVM back-end, который отвечает за run-time компиляцию байт-кода, линковку с нужными библиотеками, запуск и контроль выполнения renderscript. Этот framework состоит из следующих частей: libbcc занимается инициализацией LLVM контекста в соответствии с указанными прагмами и другими метаданными в байт-коде, компиляцией байт-кода и динамической линковкой с нужными библиотеками из libRS; libRS содержит реализацию библиотек (math, time, drawing, ref-counting,…), структур и типов данных (Script, Type, Element, Allocation, Mesh, various matrices,…).


Преимущества:

  • Аппаратно-независимое приложение получается за счет того, что renderscript байт-код, входящий в apk файл, в run-time будет скомпилирован в машинный код того аппаратно-вычислительного модуля (CPU) платформы, где будет запущен;
  • Быстрота исполнения достигается благодаря распараллеливанию вычислений, run-time компиляторной оптимизации и нативному исполнению кода.

Недостатки:

  • Отсутствие подробной документации для работы с renderscript усложняет разработку приложений. Все ограничивается коротким описанием предлагаемого renderscript run-time API, представленного здесь;
  • Отсутствие поддержки исполнения renderscript потоков на GPU, DSP. Возможны проблемы с run-time балансировкой потоков в гетерогенном запуске, управлением общей памятью.

2. Dalvik vs. Renderscript в монохромной обработке изображения

Рассмотрим dalvik-функцию Dalvik_MonoChromeFilter (преобразование цветного RGB-изображения в черно-белое (монохромное) ):

Что можно сказать? Простой цикл с независимыми итерациями, «перемалывающий» кучу пикселов. Посмотрим, как быстро он работает!
Для эксперимента возьмем МегаФон Mint на Intel Atom Z2460 1.6GHz с Android ICS 4.0.4 и 600×1024 картинку с лего-роботом, несущим новогодние подарки.

Замеры затраченного времени на обработку будем делать по следующей схеме:

Замечание: производительность реализации будем оценивать как для dalvik.
Время обработки того же изображения renderscript-реализацией составило 112 мсек.
Получили выигрыш в производительности равный 3.2x (сравнение времени работы dalvik и renderscript: 353/112 = 3,2).
Замечание: время работы renderscript-реализации включает создание renderscript-контекста, выделение и инициализацию необходимой памяти, создание и привязку renderscript к контексту и работу функции root в mono.rs.
Замечание: Критичным местом для разработчиков мобильных приложений является размер получаемого apk файла. В этой реализации размер apk файла может увеличиться только на размер renderscript в байт-коде (*.bc файл) по сравнению с dalvik-реализацией. В моем случае размер dalvik-версии был равен 404KB, а размер renderscript-версии стал равен 406KB, из которых 2KB это renderscript байт-код (mono.bc).

3. Оптимизация renderscript

Текущую производительность renderscript можно повысить, отказавшись немного от точности арифметических операций с вещественными числами, что непринципиально для рассматриваемой задачи. Для этого в renderscript добавим прагму rs_fp_imprecise:

Как следствие этого, получаем дополнительный 10%ный прирост производительности у renderscript-реализации: 112 мсек. -> 99 мсек.
Замечание: в результате получаем визуально такое же монохромное изображение без каких-либо артефактов и искажений.
Замечание: У renderscript отсутствует механизм явного управления run-time компиляторной оптимизацией в отличие от NDK, т.к. компиляторные ключи предварительно прописаны внутри Android для каждой платформы (x86, ARM,…).

4. Зависимость времени работы dalvik и renderscript реализаций от размеров изображений

Исследуем следующий вопрос: какая зависимость времени работы каждой реализации от размера обрабатываемого изображения? Для этого возьмем 4 изображения размерами 300×512, 600×1024 (наше исходное изображение с лего-роботом), 1200×1024, 1200×2048 и сделаем соответствующие замеры времени монохромной обработки изображений. Результаты представлены ниже на графике и в таблице.

Sr.No Элементы и описание
1
300×512 600×1024 1200×1024 1200×2048
dalvik 85 353 744 1411
renderscript 75 99 108 227
выигрыш 1.13 3.56 6.8 6.2

Заметим линейную зависимость времени для dalvik относительно размера изображения в отличие от renderscript. Это отличие можно объяснить наличием времени инициализации renderscript-контекста.
Для изображений сравнительно малых размеров выигрыш несущественный, т.к. время инициализации renderscript-контекста около 50-60 мсек. Однако на изображениях средних размеров, которые чаще всего используются на android-устройствах, выигрыш составляет 4-6x.

Заключение

В статье были рассмотрены dalvik и renderscript реализации монохромной обработки изображений разных размеров. За счет распараллеливания, компиляторной оптимизации и нативного исполнения кода renderscript солидно превосходит dalvik в производительности для изображений средних размеров. Этим небольшим примером я старался показать, когда renderscript может стать помощником повышения производительности приложений, которые при этом останутся аппаратно-независимыми.

Источник

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

Задний план

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

Проблема

Для этого я нашел несколько веб-сайтов:

  • https://developer.android.com/guide/topics/renderscript/compute.html#writing-an-rs-kernel
  • Как использовать библиотеку поддержки 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» в «сырой» папке (также в папке «src», в Той же папке в файле «MainActivity.java»), и он будет автоматически генерировать необходимые файлы Java для меня, имея префикс «ScriptC_».

Но это не работает для меня.

Что я пробовал

Я создал файл из некоторого образца, который я нашел (для Eclipse) под названием «julia.rs». Вот код:

В java-файле я хотел получить доступ к вновь созданному файлу, поэтому начал писать «ScriptC» и ожидал, что он заполнит необходимые дополнительные символы, но это не так.

Я не могу, например, использовать этот фрагмент кода:

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

Еще одна вещь, которую я пробовал, – это использовать папку New-> Folder-> RenderScript через контекстное меню приложения, но затем я получил эту ошибку:

Вопрос

Каков правильный способ создания и запуска сценария Renderscript на Android-Studio?

EDIT: К сожалению, у меня опять такая же проблема, и на этот раз установка renderscriptTargetApi на 18 не помогает. Я также пробовал другие проекты с Renderscript здесь и здесь , но у обоих одинаковые проблемы:

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

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

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

Создание приложений для Android с помощью renderscript внутри сильно отличается от создания обычного приложения для 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. Используйте следующий код:

ОБНОВЛЕНИЕ: Если появляется ошибка «Gradle version 2.10 required», НЕ изменяйте

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

И измените « Файл»> «Настройки»> «Сборка», «Выполнение», «Развертывание»> «Инструменты сборки»> «Градл»> «Градл», чтобы использовать упаковку градиента по умолчанию в соответствии с «Gradle Version 2.10». Ошибка .

Источник

Читайте также:  Android live wallpaper sexy
Оцените статью