Разработка плагинов - относительно сложный процесс, но не для DroidScript. Разработчики DroidScript включили в поставку SDK для генерации проектов Java-плагинов, которые облегчают погружение в их создание. Изучите эти примеры и многое сразу станет понятным.
Для DroidScript можно создавать плагины на языках JavaScript и Java. Принципиальное отличие между ними заключается в том, что Java-плагины позволяют расширять функциональность DroidScript, путем дополнения существующих объектов новыми методами или добавления новых объектов, тогда как возможности JavaScript-плагинов ограничены функциональностью DroidScript API, заложенную разработчиками. Например, в текщей реализации DroidScript нет возможности установить ползунок SeekBar в вертикальное положение. Средствами JavaScript его можно получить либо при помощи комбинирования существующих DroidScript объектов, либо в виде графического объекта Image. В обоих случаях придётся писать собственную обработку событий. Но можно поступить иначе (и проще) - создать плагин с функцией поворота переданного ему объекта на заданный угол.
Если вы не знакомы с Java, то может показаться затруднительным написание Java-плагина. Это не так. Java-плагин (как и DroidScript) работает на связке Java-JavaScript и вы можете, для начала, основную часть функциональности писать на JavaScript и лишь небольшой объем кода реализовать на Java. После первого успеха придёт уверенность и можно увеличивать объем кода на Java. Таким образом, можно параллельно решать две интересные и нужные задачи - расширять функциональность DroidScript и заодно постепенно осваивать программирование на Java, что лишним не будет.
Android API обладет огромной функциональностью и в DroidScript API реализована лишь небольшая её часть. Например, видимости Android API имеют значительно больше методов, свойств и опций, чем видимости DroidScript. Разработчики DroidScript дали объектам минимально необходимый набор свойств сознательно. Во-первых, более старые уровни API Android могут не поддерживать возможности новых уровней, во-вторых - увеличение функциональности приведёт к усложнению языка. В результате мы имеем базовую функциональность, которую опытные программисты (или сами разработчики за определённую плату) могут расширить при помощи Java-плагинов.
В настоящее время, к сожалению, для DroidScript написано немного плагинов, и они нацелены на решение узкого круга задач, что тормозит развитие DS. Пользователям нужна дополнительная функциональность, которую можно реализовать с помощтю плагина-расширения. Что это такое?
Расширить функциональность можно несколькими путями. Первый - создать свой объект на базе имеющегося и дополнить его новыми методами. Такой подход приведёт к необходимости создания собственных объектов для каждого выбранного. Второй способ - создать библиотеку методов и передавать ей объекты. Метод будет выполнен в том случае, если он определён для объекта. Такой подход позволяет быстро увеличить функциональность целых классов объектов.
Внутри JavaScript-плагина (и интерфейсной части Java-плагина) доступен глобальный объект app, что позволяет использовать большинство его методов, создавать компоновщики и элементы управления, изменять их свойства и обрабатывать события. Можно сказать так, JavaScript-плагин - это подключаемый модуль на JavaScript с открытым исходным кодом.
Для разработки Java-плагинов можно воспользоваться Android SDK или AIDE. В последнем случае с помощью SDK DroidScript генерирует проект Java-плагина и помещает его в окружение AIDE (папку AppProjects).
JavaScript-плагин - это один zip-файл, Java-плагин - это один apk-файл. То есть, плагины включают в себя несколько определённых (заданных разработчиками) и пользовательских файлов, которые перед установкой необходимо запаковать в zip или скомпилировать в apk файл.
Среди файлов плагина следует выделить файл документации - html-файл в формате справки DroidScript, файл с кодом плагина и ресурсные файлы - графика, звуки и др.
Файл справки, в общем случае, можно создавать в любом виде, но для красивого и удобного встраивания его в справочную систему DroidScript используется определённый простой формат.
Код плагина делится на интерфейсную и приватную часть. В интерфейсной части объявляются общедоступные функции, посредством которых будет осуществляться обмен данными между приложением и плагином, в приватной располагается код плагина. В JavaScript-плагинах обе части программируются на JavaScript, в Java-плагинах интерфейсная часть пишется на JavaScript, приватная - на Java.
Обмен данными между приложением и плагином осуществляется посредством интерфейсных функций. В плагин и из плагина можно передавать как простые типы данных, так и объекты. Плагины могут не содержать или содержать элементы управления. Реакция на события, генерируемые внутри плагина, передаются в приложение при помощи функций обратного вызова:
Установка и подключение JavaScript и Java-плагинов происходит практически одинаковым образом:
Пример подключения и использования плагина в приложении:
app.LoadPlugin( 'MyPlugin' ); // загрузка плагина с именем "MyPlugin" в приложение
var _plg = app.CreateMyPlugin(); // создание экземпляра объекта плагина
_plg.GetVersion(); // вызов общедоступной функции плагина
Обратите внимание на то, сообщение DroidScript об успешной установке плагина говорит только о том, что плагин был установлен. А вот был ли установлен нужный плагин и будет ли он работать выяснится только при работе с ним. Например, при использовании AIDE с ограниченной функциональностью сохранение файлов может происходить любопытным образом: сохранить файлы текущего проекта нельзя, но, не закрывая эти файлы, можно открыть любой другой проект и выполнить команду сохранения оттуда, а затем открыть нужный проект и собрать его в apk. Если забыть об этом, то произойдёт следующее: вы нажимаете на автомате Ctrl+S и не глядя закрываете порядком надоевший диалог с предложением купить полную версию AIDE, компилируете и устанавливаете apk-плагин, но при его запуске в приложении ничего не меняется, так как изменения в исходном файле не сохранились и, соответственно, успешно установилась предыдущая версия.