21
Android + Perl Naoya Ito, GREE 2010.09.30 Shibuya.pm

Scripting Layer for Android + Perl

Embed Size (px)

Citation preview

Page 1: Scripting Layer for Android + Perl

Android + Perl

Naoya Ito, GREE

2010.09.30 Shibuya.pm

Page 2: Scripting Layer for Android + Perl
Page 3: Scripting Layer for Android + Perl

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"

Page 4: Scripting Layer for Android + Perl

SL4A Android API

use Android

my $android =    Android->new;

$android->makeToast(   "Hello, Android!");

Page 5: Scripting Layer for Android + Perl

Android.pm の中身

• makeToast() などは AUTLOAD• makeToast() → localhost に JSON-RPC–多分 SL4A アプリが受け皿になっている

Page 6: Scripting Layer for Android + Perl

SL4A で開発

• Android SDK• (Eclipse)• Terminal.app• Emacs

Page 7: Scripting Layer for Android + Perl

インストール (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 だと思います

Page 8: Scripting Layer for Android + Perl

SL4A のエディタで実装

• できる、でもこれは辛い !

Page 9: Scripting Layer for Android + Perl

Emacs で書いて adb push

% adb push hello_naoya.pl /sdcard/sl4a/scripts1 KB/s (115 bytes in 0.067s)

これで SL4A 側のスクリプト一覧に hello_naoya.pl が追加される

Page 10: Scripting Layer for Android + Perl

Perl モジュール

• 幾つか組み込みで入っている– CPAN モジュール etc は Pure Perl な

ら adb push で /sdcard の site_perl ディレクトリに置けば動く ( と思います )

Page 11: Scripting Layer for Android + 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

Page 12: Scripting Layer for Android + Perl

ネタ発見# ls IOHandle.pmDir.pmPoll.pmSocket.pm ← これSocketSelect.pm

Page 13: Scripting Layer for Android + Perl

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;

Page 14: Scripting Layer for Android + Perl

あっさり動いた

% 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...

Page 15: Scripting Layer for Android + Perl

さて、動作確認 ...

• telnet で動作確認 あれ、・・・ telnet がない

Page 16: Scripting Layer for Android + Perl

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;

Page 17: Scripting Layer for Android + Perl
Page 18: Scripting Layer for Android + Perl

ほか• 実は外部アクセス可能な 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() {...});

Page 19: Scripting Layer for Android + Perl

まとめ• SL4A で Perl で Android Quick Hack

• API で結構いろいろできるようです– Clipboard, Camera, BatteryManager, Phone, viewHTML, viewMap …

• 比較的あっさり動きます– Hack 次第で色々楽しめそう

• SL4A for PHP もあります

Page 20: Scripting Layer for Android + Perl

大事なことなので繰り返します

• SL4A for PHP もあります

【未承諾広告】グリーは iPhone/Android エンジニアも絶賛募集中

Page 21: Scripting Layer for Android + Perl

おしまい