- Написание программы для простейшей синхронизации файлов по FTP для Android с помощью SL4A + Python
- Введение
- Немного слов о том, что такое SL4A и с чем его едят
- Основная часть
- Заключение
- Пишем список дел на Python 3 для Android через QPython3 и SL4A
- Полный листинг
- Создание Android-приложений с использованием Python и SL4A: Часть 1. Построение среды разработки
- Установка и настройка
- Избегайте пробелов в именах каталогов
- Основы Android SDK
- Программа Hello World на языке Python for Android
Написание программы для простейшей синхронизации файлов по FTP для Android с помощью SL4A + Python
Введение
В данной статье рассматривается процесс написания программ при помощи SL4A на примере программы для синхронизации файлов по протоколу FTP на языке Python в операционной системе Ubuntu. Показаны настройка операционной системы для разработки SL4A-приложений, написание самого приложения, распространение приложения с помощью баркодов и упаковка приложения в .apk-файл.
Немного слов о том, что такое SL4A и с чем его едят
Проект SL4A (Scripting Layer for Android), появившийся на свет благодаря Деймону Кохлеру (Damon Kohler) и предоставляемыми Google’ом 20% свободного рабочего времени, дает возможность программировать под платформу Android на различных интерпретируемых языках программирования (на данный момент это Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl и Shell).
На хабре уже писалось про SL4A. Например, здесь рассказывалось о том, как написать приложение на Python для проверки кармы на хабре, а здесь с помощью Lua создавался скрипт, отключающий коммуникации телефона на ночь.
SL4A хорошо подходит для обучения программированию, для написания прототипов программ, для решения задач автоматизации действий на платформе Android. Большие серьёзные программы на SL4A не пишутся, но для создания мини-программ он подходит хорошо. Проверить карму на хабре, отправить смс жене, чтобы попросить начать разогревать ужин за пару километров до дома; разбудить в электричке при приближении к нужной станции или даже управлять настоящей ракетой — все это может быть реализовано при помощи SL4A c минимальным количеством кода и затраченного времени.
Для сравнения ниже показана простейшая программа на языке Java и Python (примеры взяты из из презентации PyCon 2011):
Та же программа на языке Python займет всего 4 (!) строки:
Разница, как говорится, налицо. Конечно, не обойтись без недостатков. О них в конце статьи.
Основная часть
Установка SL4A на телефон
Непосредственно в приложении SL4A имеется только интерпретатор Shell. Для использования других языков программирования необходимо устанавливать дополнительные приложения. Интерпретатор языка Python находится здесь.
Настройка операционной системы для работы с SL4A
Для работы приложения синхронизации файлов на компьютере должен быть установлен ftp-сервер. Для Ubuntu есть приложение vsftpd, представляющее собой бесплатный и простой в настройке ftp-сервер. Для установки достаточно в терминале ввести команду:
sudo apt-get install vsftpd
Файл настроек сервера расположен в /etc/vsftpd.conf, в нем необходимо добавить разрешение на запись файлов, раскомментировав строчку
#write_enable=YES
И перезапустить сервер:
$sudo service vsftpd restart
Приложения SL4A можно создавать непосредственно на телефоне, но занятие набора кода на виртуальной клавиатуре крайне утомительно даже для небольших приложений, намного удобнее писать приложения на компьютере и потом закачивать их в телефон.
Для запуска приложений SL4A, написанных на компьютере, небходимо сначала запустить на телефоне SL4A-сервер (на главной странице SL4A-приложения нажать Menu — Interpreters — Menu — Start Server). Запускать будем приватный сервер. Появится уведомление, что сервер запущен, и там же будет написано, какой порт использует сервер.
Комментарий: Существует возможность выбора запуска публичного сервера. При запуске публичного сервера любой, кто будет иметь доступ к вашему IP-адресу, сможет контролировать ваш телефон. При запуске приватного сервера и установке переменных окружения так, как будет показано ниже, скрипты, запускаемые на компьютере, будут работать без изменений и на телефоне. Для работы приватного сервера необходимо, чтобы Android SDK был установлен.
Перенаправим весь локальный трафик, поступающий на порт 9999 в Android-устройство (примем, что сервер слушает порт 46136):
$ adb forward tcp:9999 tcp:46136
Осталось создать переменную окружения и настройка закончена:
$ AP_PORT=9999
Осталось добавить файл android.py в папку с библиотеками Python’а, и все, теперь можно писать приложения на компьютере, запускать их, и результат можно буждет видеть сразу на телефоне. Для запуска helloWorld на Android-устройстве теперь достаточно ввести в интерпретаторе Python:
В первой строчке импортируется библиотека android, затем создается объект droid, с помощью которого используются API Android’a. Крайняя строка выводит сообщение «Hello, World!» на экран устройства.
Теперь самое время, чтобы познакомиться поближе с API, которое предоставляет SL4A.
Исходный код программы
Программа синхронизирует файлы в выбранных папках на Android-устройстве и компьютере в фоновом режиме. Проверка появления новых файлов происходит каждые 30 секунд. Большая часть программы практически не отличается от приложения для персонального компьютера с аналогичной функциональностью. Для наглядности когда обработка исключений опущена.
С помощью уже известного droid.makeToast() на экран Android-устройства выводятся сообщения о ходе синхронизации.
Запуск приложения
/.bashrc нужно добавить строку:
alias andrun=’adb shell am start -a com.googlecode.android_scripting.action.LAUNCH_FOREGROUND_SCRIPT -n com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher -e com.googlecode.android_scripting.extra.SCRIPT_PATH’
Тогда сам скрипт можно будет запустить командой
andrun /mnt/sdcard/sl4a/scripts/ftp_sync.py
Распространение приложения
Распространение приложения с помощью barcode
Для установки скрипта в Android устройство достаточно запустить SL4A-приложение, нажать menu — add — scan barcode.
Упаковка приложения в .apk-файл
Скрипты SL4A можно также упаковывать в обычные .apk-файлы. Для этого нужно скачать файл шаблона SL4A-проекта и импортировать его в eclipse. По непонятным причинам в проекте изначально отсутствует папка gen. Ее нужно создать вручную в корневом каталоге проекта. После этого в Windows — Preferences — Java — Build Path — Class Variables создаем переменную ANDROID_SDK, указывающую на папку, в которую был установлен Android SDK.
Далее в папке res/raw заменяем содержимое script.py содержимым нашей программы. Затем в меню нажимаем Project-Build, и если все прошло нормально, мы готовы к сборке приложения в .apk-файл. Идем в File — Export, выбираем Android — Export Android Application, далее выбираем наш проект.
Каждое Android-приложение должно быть подписано цифровой подписью. Если она не создавалась ранее, ее необходимо создать с помощью диалогового окна. Последнее диалоговое окно спросит, куда сохранить созданный .apk-файл. Устанавливаем приложение на телефон:
$ adb install ftp_sync.apk
Переименовать скрипт можно выделив в каталоге src com.dummy.fooforandroid и в меню Refactor нажав Rename. Имя должно содержать по крайней мере две точки. После этого необходимо изменить имя приложения в AndroidManifest.xml. Иконки приложения находятся в res/drawable. При желании их тоже можно изменить.
GUI-интерфейс для SL4A создается с помощью HTML-разметки и webView. Здесь показан пример создания такого интерфейса.
Заключение
Создание приложений с помощью SL4A для людей, не знакомых с Java и мобильной разработкой под Android, не представляет особой сложности. Платформа Android замечательна своей открытостью и доступностью. В том числе и для программирования под нее. SL4A привносит новый уровень доступности разработки Android-приложений, делая возможным использование различных языков программирования.
Источник
Пишем список дел на Python 3 для Android через QPython3 и SL4A
Движок QPython (и QPython 3) для Android – вещь по-прежнему плохо изученная, и особенно что касается его встроенной библиотеки Scripting Layer For Android (SL4A), она же androidhelper. Эту библиотеку написали несколько сотрудников Google по принципу 20% свободного времени, снабдили ее спартанской документацией, которую почти невозможно найти, и отправили в свободное плавание. Я искал информацию об SL4A по крупицам, но со временем нашел практически все, что мне нужно.
SL4A позволяет задействовать практически все возможности консольного Python 3 вплоть до библиотек типа matplotlib, при этом используются стандартные диалоги Android: ввод текста, списки, вопросы, радиокнопки, выбор даты и т.д. Программа не будет поражать красотой, но многие задачи решать сможет. Самое главное, что мы получим доступ к различным функциям устройства. Например, можно:
- делать телефонные звонки
- посылать SMS
- менять громкость
- включать Wi-Fi и Bluetooth
- открывать веб-страницы
- открывать сторонние приложения
- делать фото- и видеосъемку камерой
- извлекать контакты из контактной книги
- посылать системные оповещения
- определять GPS-координаты устройства
- определять заряд батареи
- считывать данные SIM-карты
- воспроизводить медиафайлы
- работать с буфером обмена
- генерировать голосовые сообщения
- экспортировать данные на внешние активности (share)
- открывать локальные html-страницы
- и др.
В нашем примере мы напишем простейший список задач. Мы сможем создавать и удалять задачи, а также экспортировать их. Программа будет вибрировать и разговаривать. Мы будем пользоваться тремя видами диалогов: список, текстовый ввод и вопрос «да/нет». На все про все нам хватит менее 100 строк кода. Интерфейс сделаем английским ради универсальности (и GitHub).
Вот весь код и комментарии к наиболее существенным моментам.
Создаем объект droid класса Android(), который будет отвечать за взаимодействие с SL4A.
Переменная path будет содержать абсолютное имя файла, в котором хранятся задачи. Почему так длинно? Дело в том, что SL4A не может работать с локальным путем, поэтому приходится определять абсолютный, а абсолютный может отличаться на разных Android-устройствах. Мы обойдем эту проблему путем определения местоположения папки Download с помощью метода droid.environment() . Затем мы отсекаем Download и добавляем путь Qpython/Scripts3 (он всегда одинаков) плюс имя файла.
Определяем функцию, отвечающую за вывод списка задач. Это делается с помощью метода droid.dialogCreateAlert() . Затем ряд вспомогательных методов выводят собственно пункты, создают кнопки и получают результат от пользователя. Названиями двух кнопок служат Unicode-символы (об этом чуть ниже). Для упрощения мы упакуем все эти методы в одну простую функцию, которой будем передавать список задач. В более сложных скриптах можно передавать больше аргументов: заголовок, названия кнопок и т.д.
Определяем функцию, отвечающую за создание новой задачи. Принцип аналогичен. В аргументе default мы передаем ей текст, который по умолчанию появляется в строке ввода (пустой при «»). В более сложных программах можно передавать различные подписи и кнопки.
Эта функция будет задавать вопрос пользователю, чтобы получить ответ да или нет. Мы передаем ей текст вопроса.
Создаем цикл (чтобы скрипт не вышел после первого же действия) и первым делом читаем файл задач и загружаем его в список tasks . Если файла нет, создаем пустой список.
Выводим список задач. Когда пользователь делает какой-то выбор, метод dialog_list() возвращает это действие в виде значения, которое мы присваиваем переменной response .
Начинаем обрабатывать действие пользователя. Поскольку метод droid.dialogGetResponse() , который мы используем в функции списка, выдает довольно сложную структуру в виде словаря, его придется препарировать не самым очевидным способом. В данном случае по простому клику на пункт списка он удаляется – мы выполнили дело. Сообщим об этом во всплывающем сообщении и одновременно сделаем (чисто забавы ради) виброзвонок на 200 миллисекунд и сгенерируем голосовую фразу Дело сделано! .
По нажатию на среднюю (нейтральную) кнопку с ножницами можно разом удалить все дела. При этом будет выведен подтверждающий вопрос.
Здесь мы создаем новую задачу. Обратим внимание на переменную cancel – ее выдает droid.dialogGetResponse() в случае клика вне диалога (на пустую область экрана). Чтобы корректно обработать такую ситуацию, мы ввели дополнительное условие. По средней кнопке ( neutral ) поле ввода будет очищаться. При positive мы создаем новый пункт списка и выходим из цикла. Если нажать на самую правую кнопку, сработает else и мы просто выйдем из цикла, ничего не сохранив (хотя формально это будет значение negative в input[«which»] ). Последняя строка означает, что пользователь нажал на Exit . Тогда мы устанавливаем флаг exit в True .
После каждой обработки списка сохраняем список задач в файл.
Если пользователь решил выйти, мы выходим из главного цикла while .
В самом конце мы спрашиваем у пользователя, надо ли экспортировать все задачи куда-нибудь – на почту, в облако, в мессенджер и т.д. При положительном ответе список задач преобразуется в строку и экспортируется.
На этом всё. Программа будет выглядеть, как на скриншоте выше.
Полный листинг
Окончательный полный листинг (с комментариями на английском):
Пара замечаний. SL4A не позволяет использовать никакую графику, однако можно использовать довольно большое количество всевозможных смайлов и эмодзи как Unicode-символы. Это могут быть хоть домики, хоть собачки, хоть кошечки. В нашем примере мы использовали знак плюс ( \u2795 ), ножницы ( \u2702 ) и листок бумаги ( \ud83d\udcc3 ). C каждой новой версией Unicode их становится все больше, но этим не стоит злоупотреблять – новые смайлы не будут отображаться на более старых версиях Android.
Для запуска скриптов QPython нужно заходить в собственно QPython, но существует интересный плагин для приложения Tasker, позволяющий проделывать довольно мощные вещи с QPython-скриптами, например выводя их на рабочий стол в виде иконок или запуская по различным условиям.
Источник
Создание Android-приложений с использованием Python и SL4A: Часть 1. Построение среды разработки
Конфигурирование рабочей станции под управлением Windows для исполнения системы Scripting Layer for Android.
Согласно распространенному заблуждению относительно разработки для платформы Google Android, программный для нее должен быть написан на языке Java™. В действительности имеется множество различных возможностей, реализуемых в рамках проекта SL4A (Scripting Layer for Android). Проект SL4A был начат сотрудником компании Google Деймоном Колером (Damon Kohler) в рамках 20-процентной квоты (Google официально разрешает своим разработчикам до 20% рабочего времени тратить на «инициативные» проекты). Это было почти два года назад. За это время было выпущено четыре этапные версии.
SL4A предоставляет платформу для нескольких скриптовых языков, включая Beanshell, Lua, Perl, Python и Rhino. Кроме того, поддерживаются базовые скрипты оболочки. В настоящее время работы по языку Python, проводившиеся в рамках проекта SL4A, выделилась в собственный отдельный проект. В значительной степени это произошло благодаря популярности Python и потребности в отделении выпусков новой функциональности Python от основного цикла выпусков системы SL4A.
В данной статье основное внимание уделяется применению языка Python при написании приложений для платформы Android. Python — это превосходный инструмент для написания как простых скриптов, так и сложных многопоточных приложений. Поддержка Python на платформе Android важна потому, что позволяет использовать огромные объемы уже написанного и находящегося в свободном доступе программного кода. Язык Python прост в изучении даже для абсолютных новичков, к тому же в Интернете имеется множество ресурсов, помогающих ускорить его освоение.
Установка и настройка
Прежде чем вы сможете приступить к разработке с помощью SL4A, необходимо загрузить и установить несколько обязательных компонентов. Первым их них является полный комплект разработчика Java Development Kit (JDK) . Его последнюю версию можно найти на сайте Oracle для разработчиков.
Затем вам потребуется комплект Android software development kit (SDK) . На основном сайте для Android-разработчиков имеется два варианта загрузки: в виде zip-файла и в виде exe-файла. Если вы загрузите этот exe-файл и запустите его на исполнение, на экране появится окно, в котором вы должны выбрать, какие версии SDK и файлов поддержки вы хотите установить (см. рис. 1).
Рисунок 1. Выбор нужных опций Android SDK для загрузки
Все необходимое для этой статьи я установил и протестировал на машине под управлением 64-разрядной версии Windows® 7.
Эта статья посвящена разработке приложений для платформы Android с помощью языка Python, поэтому вполне очевидно, что вам необходимо установить Python на своей машине разработки. На Windows-компьютерах язык Python изначально не установлен. На момент написания этой статьи актуальная версия пакета SL4A Python имела номер 2.6.2. Для обеспечения совместимости со своей системой загрузите соответствующую версию Python 2.6 — 32-разрядную или 64-разрядную .
Рекомендуется добавить несколько ссылок на Android SDK в директиве PATH — это упростит запуск SDK Manager и других инструментов. Чтобы сделать это в среде Windows 7, выполните следующие шаги.
- Нажмите клавишу Windows, а затем нажмите Search .
- В текстовом поле введите Environment .
- Нажмите на Edit the system environment variables .
- В открывшемся окне нажмите Environment Variables , а затем выберите переменную PATH в списке User variables .
- Нажмите Edit , а затем добавьте соответствующий маршрут к своему каталогу инструментов Android SDK.
Строка, которую необходимо добавить, имеет следующий вид
Необходимо поставить точку с запятой ( ; ) перед новым маршрутом для добавления нового каталога. После того как вы введете соответствующую строку, нажмите OK три раза.
Избегайте пробелов в именах каталогов
Некоторые инструменты, например эмулятор, могут не запуститься, если вы установите SDK в каталог, имя которого имеет пробелы. Это относится и к местоположению по умолчанию: C:\Program Files\android-sdk-windows.
Процесс установки SL4A на Android-устройстве подобен процессу установки любого другого Android-приложения. Вы можете просканировать QR- код на основном сайте проекта SL4A с помощью своего устройства, чтобы загрузить SL4A installation file . После завершения загрузки этого файла он должен запуститься автоматически. В этот момент вы должны увидеть экран установки, показанный на рисунке 2.
Рисунок 2. Экран установки SL4A
Нажмите Install для запуска процесса.
Заключительный шаг состоит в установке интерпретатора Python на вашем устройстве. Это можно сделать с использованием любого из нескольких методов. Из эмулятора вы можете ввести текст sl4a download в поисковом поле браузера (рис. 3).
Рисунок 3. Экран загрузки SL4A
Нажмите на ссылку PythonForAndroid_r4.apk для запуска процесса загрузки. Чтобы действительно запустить установщик, просмотрите экран уведомления, для чего нажмите на него и переместитесь по нему от верхней до нижней части экрана. Нажмите на сообщение Download complete для запуска установщика Python for Android (рис. 4).
Рисунок 4. Начальный экран установки Python for Android
Нажмите Install для запуска процесса, который загружает и распаковывает несколько zip-файлов. В данном случае просто нажмите Install на основном экране установки (рис. 5).
Рисунок 5. Основной экран установки Python for Android
Вы должны увидеть три отдельных окна хода выполнения. Первое окно демонстрирует процесс загрузки, а затем извлечения файлов на SD-карту. Если все прошло нормально, появится сообщение «Installation Successful».
Основы Android SDK
Есть два основных метода для тестирования Python-кода с помощью SL4A: с использованием эмулятора или с использованием реального физического устройства. Android SDK предоставляет базовые возможности эмулятора и инструменты для создания эмулированного устройства с такими же характеристиками, как у соответствующего физического устройства. В некоторых случаях, например, при создании дополнительных модулей для планшетов Samsung, вы можете воспользоваться готовым эмулятором.
Инструмент SDK Manager действует в качестве менеджера обновлений и инструмента для создания виртуального устройства. При каждом запуске инструмента SDK Manager он подключается к сайту для Android-разработчиков с целью проверки на наличие новых выпусков (вы можете пропустить этот процесс, нажав на Cancel ). В этой точке вы должны видеть окно Android SDK and AVD Manager (см. рис. 6).
Рисунок 6. Окно Android SDK and AVD Manager
Выберите Virtual devices в дереве каталогов для отображения всех ранее определенных виртуальных Android-устройств (AVD — Android virtual device) в панели подробностей. Чтобы создать новый эмулятор устройства, нажмите New . В окне Create New Android Virtual Device (AVD) введите необходимую информацию в полях Name , Target и SD Card Size . На рисунке 7 показаны параметры моего тестового устройства. Имя устройства не должно содержать пробелов; для хранения данных необходимо выделить не менее 100 МБ. Выберите соответствующий номер версии Android для своего целевого устройства. Этот ниспадающий список отображает только доступные опции, загруженные ранее.
Рисунок 7. Мастер создания нового AVD-устройства
Теперь нажмите Create AVD . Появится всплывающее окно со сведениями о вашем новом устройстве. Чтобы запустить любой из доступных образов эмулятора, выберите требуемую цель, а затем нажмите Start . В окне Launch Options можно оставить значения по умолчанию для размеров экрана или поставить флажок в контрольном окошке Scale display to real size (Масштабировать экран до реального размера) и указать иные размеры экрана. Значение «7» меня полностью устраивает (см. рис. 8). Чтобы запустить эмулятор «с чистого листа», поставьте флажок в контрольном окошке Wipe user data (Стереть данные пользователя).
Рисунок 8. Опции запуска AVD-устройства
В состав Android SDK входит еще один обязательный инструмент под названием ADB (Android Device Bridge). Этот инструмент поддерживает такие функции, как установка приложений (apk-файлы), копирование файлов на устройство или с устройства, выдача команд оболочки на устройство. Кроме того, инструмент ADB используется для запуска SL4A на устройстве, что позволяет разработчику запускать программы на исполнение с рабочей станции. Чтобы установить коммуникационный канал между хостом (рабочей станцией) разработчика и устройством, необходимо с помощью ADB перенаправить TCP/IP-трафик с порта 9999 на конкретный порт на этом устройстве. Откройте командное окно и введите в него следующую командную строку:
Второй номер порта соответствует устройству. В последней версии SL4A этот номер можно задать в предпочтениях. В стандартном выпуске вы должны использовать номер, который предоставит вам SL4A.
Теперь запустите SL4A, а затем нажмите Menu . В области с шестью опциями в нижней части окна нажмите View , а затем нажмите Interpreters (рис. 9).
Рисунок 9. Запуск удаленного сервера из меню Interpreters системы SL4A
Нажмите еще раз Menu , а затем нажмите Private для запуска сервера в приватном режиме.
Для реального устройства различие состоит в том, что опция Private запускает сервер с использованием USB-порта, а опция Public использует Wi-Fi. Если вы снова посмотрите страницу уведомлений, то увидите, что сервис SL4A Service исполняется (рис. 10).
Рисунок 10. Экран уведомления Android
Нажмите на сообщение, чтобы увидеть фактический присвоенный номер порта. В нашем случае для второго значения TCP в команде adb forward мы используем номер порта 42306. Теперь вы готовы к тому, чтобы написать какой-либо Python-код и протестировать его на устройстве.
Программа Hello World на языке Python for Android
Практически в каждой вводной статье по программированию ее автор считает своим долгом написать программу «hello world». Я делаю это здесь для того, чтобы продемонстрировать несколько способов для написания и тестирования Python-кода с помощью SL4A. Мой код выглядит следующим образом.
Каждый скриптовый язык SL4A использует файл импорта — в случае Python это файл android.py — для формирования интерфейса между скриптом и поддерживающими API-интерфейсами Android. Этот код можно ввести непосредственно на своем устройстве в интерпретаторе (см. рисунок 9) или с помощью редактора. Чтобы использовать интерпретатор Python, запустите его на экране Interpreters , для чего выберите опцию Python 2.6.2 . На появившемся в результате экране вы сможете ввести показанный выше код; после ввода последней строки вы должны увидеть всплывающее окно со словами: «Hello, world!»
Текстовый ввод как на эмулированном, так и на реальном устройстве может оказаться утомительным занятием. Python предоставляет среду IDLE (консоль/редактор), которая в сочетании с инструментом ADB очень удобна для написания кода на персональном компьютере и тестировании его на Android-устройстве. Вам потребуется лишь локальная копия файла android.py. Вы можете извлечь ее из файла python_extras_r14.zip, доступного на странице загрузки SL4A, или передать ее с устройства с помощью команды adb pull . Кроме того, весьма удобно иметь каталог с именем SDCARD в корне своего первичного системного диска для зеркалирования всего содержимого эмулируемого устройства. Это существенно упрощает маршрут к файлу при исполнении скрипта на локальной машине, которому необходимо обращаться к файловой системе. На рисунке 11 показан скрипт Hello World в консоли IDLE.
Рисунок 11. Скрипт Hello World в Python-консоли IDLE
Если вы запустили сервер и выполнили команду adb forward , то должны увидеть Toast-сообщение, показанное на рисунке 12, и не должны увидеть никаких ошибок.
Рисунок 12. Всплывающее сообщение Hello World
В Windows-системе для запуска окна редактирования в среде IDLE нажмите: File > New Window . Это окно предоставляет все необходимые средства для редактирования и тестирования эмулированного или реального Android-устройства на своей машине разработки.
Источник