Написал свой первый Perl-скрипт для Android

27 августа 2012

Есть такой проект под названием Scripting Layer for Android (SL4A). Это штука, которая позволяет запускать на Android-устройствах скрипты, написанные на Perl, Python, JRuby, Lua, JavaScript и других языках.

Устанавливается SL4A следующим образом. Переходим по этой ссылке и находим там файл с именами вроде sl4a_r6.apk. При клике по имени файла перед вами появится страница для загрузки с QR-кодом. Возьмите свой телефон или планшет, считайте код программой QR Droid или ее аналогом, скачайте и установите SL4A.

Затем перейдите в «Приложения → SL4A → View → Interpreters → Add → Perl 5.10.1», дождитесь завершения загрузки apk-пакета и установите его. После установки перейдите в «Приложения → Perl for Android» и нажмите «Install». Затем вновь откройте SL4A и запустите скрипт test.pl.

Perl на Android - прогоняем тесты

Теперь попробуем написать собственный скрипт, например, отправляющий SMS:

#!/usr/bin/env perl

use strict;
use warnings;

use Android;

my $droid = Android->new;

# выбираем телефон
my $phone = $droid->pickPhone;
die $phone->{error} if $phone->{error};

# произносим текст sms-сообщения
my $sms = $droid->recognizeSpeech;
die $sms->{error} if $sms->{error};

# проверяем получателя и текст сообщения
$droid->dialogCreateAlert(
    "Send this SMS to $phone->{result}?",
    $sms->{result}
  );
$droid->dialogSetPositiveButtonText('Yes');
$droid->dialogSetNegativeButtonText('No');
$droid->dialogShow;
my $res = $droid->dialogGetResponse;
die $res->{error} if $res->{error};

if($res->{result}{which} eq 'positive') {
  # отправляем сообщение
  $droid->smsSend($phone->{result}, $sms->{result});
}

QR-код с текстом скрипта

Вы можете загрузить его прямо в ваше Android-устройство, воспользовавшись QR-кодом справа. Поместите закодированный в нем текст в буфер обмена с помощью вашего любимого считывателя кодов. Затем скажите «SL4A → Add → Perl 5.10.1», вставьте текст скрипта из буфера обмена и сохраните его, скажем, под именем send-sms.pl.

Если со считыванием кода что-то не заладилось, вы можете сохранить скрипт у себя на компьютере, а затем скопировать на Android-устройство в каталог /sdcard/sl4a/scripts с помощью USB или, например, Dropbox.

Вновь открываем SL4A и запускаем наш скрипт. Велика вероятность, что вы получите следующую ошибку:

Can't locate unicore/PVA.pl in @INC (@INC contains ...

Как оказалось, соответствующему тикету в багтрекере проекта уже больше года, но почему-то никто ничего не хочет с ним делать. А тем временем решается проблема очень просто. Нужно собрать Perl 5.10 под perlbrew и положить недостающие файлы в каталог /sdcard/ com.googlecode.perlforandroid/ extras/ perl/ site_perl. Вы можете скачать архив с этими файлами отсюда. Распаковать их на Android-устройстве можно, например, с помощью приложения Easy Unrar Lite.

Теперь, по идее, все должно работать. Скрипт попросит вас выбрать один из контактов, затем предложит продиктовать текст SMS (чтобы работало распознавание голоса, нужно быть онлайн), после чего покажет диалог с просьбой подтвердить получателя и текст сообщения. Если ответить «Yes», на выбранный номер будет отправлено SMS с продиктованным текстом.

С помощью SL4A вы можете управлять звонками, контактами, электронной почтой, камерой, микрофоном, GPS, Bluetooth, а также получать информацию о модели телефона, состоянии батареи, SIM-карте и тп. Однако следует понимать, что SL4A предназначен в первую очередь для написания скриптов в несколько десятков или сотен строк кода, а не больших и сложных приложений.

Подборка ссылок по теме:

А вы уже пробовали SL4A? Если пробовали, то поведайте, какие приложения и на каком языке программирования вы писали. Если нет, то планируете ли попробовать в ближайшем будущем? И кстати, а не известно ли вам аналогичных проектов для iOS и Widnows Phone?

Метки: , .


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