Upload
naoya-ito
View
6.819
Download
7
Tags:
Embed Size (px)
Android + Perl
Naoya Ito, GREE
2010.09.30 Shibuya.pm
Scripting Layer for Android (SL4A)
• Android デバイス上で jRuby, Lua, Perl, Python, PHP, shell などを編集 / 実行できるアプリ– 名前が最近 ASE → SL4A に変更になってるので注意– http://code.google.com/p/android-scripting/
• スクリプトからは API で Android の機能を呼べる– "AndroidFacade API"
SL4A Android API
use Android
my $android = Android->new;
$android->makeToast( "Hello, Android!");
Android.pm の中身
• makeToast() などは AUTLOAD• makeToast() → localhost に JSON-RPC–多分 SL4A アプリが受け皿になっている
SL4A で開発
• Android SDK• (Eclipse)• Terminal.app• Emacs
インストール (Terminal.app)% adb –e install sl4a_r2.apk% adb –e install perl_for_android_r1.apk
• Settings > Applications > Unknown sources を有効にしておきます• adb install したあと起動してちょこちょこと設定します• ブラウザから直接 apk DL しても ok だと思います
SL4A のエディタで実装
• できる、でもこれは辛い !
Emacs で書いて adb push
% adb push hello_naoya.pl /sdcard/sl4a/scripts1 KB/s (115 bytes in 0.067s)
これで SL4A 側のスクリプト一覧に hello_naoya.pl が追加される
Perl モジュール
• 幾つか組み込みで入っている– CPAN モジュール etc は Pure Perl な
ら adb push で /sdcard の site_perl ディレクトリに置けば動く ( と思います )
同梱モジュールを調べる% adb shell# ls /data/data/com.googlecode.perlforandroid/files/perl/5.10.0autowarningswarnings.pmutf8_heavy.plutf8.pmvars.pmIOFcntl.pm...# ls /sdcard/com.googlecode.perlforandroid/extras/perl/site_perl
ネタ発見# ls IOHandle.pmDir.pmPoll.pmSocket.pm ← これSocketSelect.pm
echo サーバーを書いてみよう
use IO::Socket;use Android;
my $android = Android->new;
my $server = IO::Socket::INET->new( Listen => 20, LocalPort => 9999, Reuse => 1,) or die $!;
while (1) { my $client = $server->accept; while ($client->sysread(my $buf, 1024)) { $android->makeToast("echo: " . $buf); } $client->close;}
$server->close;
あっさり動いた
% adb shell# ps...app_25 423 30 131160 22372 ffffffff afe0d4a4 S com.googlecode.android_scriptingapp_25 474 423 4396 3736 c01c54a0 afe0ceac S /data/data/com.googlecode.perlforandroid/files/perl/perl...
さて、動作確認 ...
• telnet で動作確認 あれ、・・・ telnet がない
echo クライアントも必要だ#!perl use strict;use warnings;
use IO::Socket;
my $cli = IO::Socket::INET->new( PeerAddr => 'localhost', PeerPort => 9999, Proto => 'tcp',) or die $!;
$cli->syswrite("Anybody home?");$cli->close;
ほか• 実は外部アクセス可能な Public サーバーに
もできる– http://handasse.blogspot.com/2010/09/pythonandroid5.html
– (Python で 5 分で遠隔カメラサーバに )
• $droid->smsSend() や $droid->vibrate() と組合わせると夢がひろがりんぐ
• perl で WebView を起動して JavaScript の callback を kick するとか面白いことも– droid.registerCallback("event_name", function() {...});
まとめ• SL4A で Perl で Android Quick Hack
• API で結構いろいろできるようです– Clipboard, Camera, BatteryManager, Phone, viewHTML, viewMap …
• 比較的あっさり動きます– Hack 次第で色々楽しめそう
• SL4A for PHP もあります
大事なことなので繰り返します
• SL4A for PHP もあります
【未承諾広告】グリーは iPhone/Android エンジニアも絶賛募集中
おしまい