DroidScript
DroidScript
учимся и разрабатываем

Введение в разработку плагинов

16.12.2016

Разработка плагинов - относительно сложный процесс, но не для 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-плагинов происходит практически одинаковым образом:

  1. Подготовить плагин к установке в DroidScript. Для этого нужно:
    • поместить zip-файл в папку DroidScript/Plugins (для JavaScript-плагина)
    • поместить apk-файл в папку DroidScript/Plugins (при использовании Android SDK)
    • при использовании AIDE произвести в нём сборку проекта, установку и запуск.
  2. Перезапустить DroidScript. В процессе загрузки появится всплывающее сообщение об успешной установке плагина и том, что документация по нему доступна в разделе Docs/Plugins.
  3. Загрузить плагин в своё приложение методом app.LoadPlugin( Имя плагина ).
  4. Создать экземпляр объекта, через который можно будет обращаться к общедоступным функциям плагина. Для этого используется конструктор app.CreateИмяПлагина().

Пример подключения и использования плагина в приложении:

app.LoadPlugin( 'MyPlugin' ); // загрузка плагина с именем "MyPlugin" в приложение

var _plg = app.CreateMyPlugin(); // создание экземпляра объекта плагина

_plg.GetVersion(); // вызов общедоступной функции плагина

Обратите внимание на то, сообщение DroidScript об успешной установке плагина говорит только о том, что плагин был установлен. А вот был ли установлен нужный плагин и будет ли он работать выяснится только при работе с ним. Например, при использовании AIDE с ограниченной функциональностью сохранение файлов может происходить любопытным образом: сохранить файлы текущего проекта нельзя, но, не закрывая эти файлы, можно открыть любой другой проект и выполнить команду сохранения оттуда, а затем открыть нужный проект и собрать его в apk. Если забыть об этом, то произойдёт следующее: вы нажимаете на автомате Ctrl+S и не глядя закрываете порядком надоевший диалог с предложением купить полную версию AIDE, компилируете и устанавливаете apk-плагин, но при его запуске в приложении ничего не меняется, так как изменения в исходном файле не сохранились и, соответственно, успешно установилась предыдущая версия.

© 2016-2024 
actech