Scripting Layer for Android 㧠Perl x Android
Shibuya Perl Mongers ãã¯ãã«ã«ãã¼ã¯#14 ã«è¡ã£ã¦ãã¾ããã諸ã é¢ç½ãã£ãã§ããããã«ãã£ã¹ã«ãã·ã§ã³ãLT ã¨ãã« id:kazuhooku ããã®çºè¡¨ãè¯ãã£ãã§ããã
ãã¦ãScripting Layer for Android (SL4A) ã使ã£ã¦ãPerl 㧠Android ã hack ãã話ããã¦ãã¾ãããSL4A 㯠jRubyãPerlãPythonãPHP ãªã©ã®è¨èªã Android ã§ä½¿ããããã«ããã¢ããªãããããã®è¨èªãã㯠AndroidFacade API ã¨å¼ã°ãã API ã§ãAndroid ã®UIãã«ã¡ã©ãæä½ã§ããã¨ãããã®ã§ãã
çºè¡¨è³æã¯ä»¥ä¸ã§ãã
- Scripting Layer for Android + Perl (SlideShare)
- http://www.slideshare.net/naoya1977/scripting-layer-for-android-perl
ä»æ¥ã®çºè¡¨ã§ã¯ Perl 㧠Android ä¸ã® Toast (éç¥ç¨ã®ã¡ãã»ã¼ã¸é å) ã« echo ãè¿ã echo ãµã¼ãã¼ãä½ãã¨ããç°¡åãªã¹ã¯ãªãããç´¹ä»ãã¾ããã
ã§ãé¢ç½ããªã¨æã£ã¦ãã®å¾ãå°ãã¦ã§ããå·¡ã£ã¦ãã㨠http://handasse.blogspot.com/2010/09/pythonandroid5.html ã§ã"Python ã使ã£ã¦ Android 端æ«ã5åã§ãªã¢ã¼ãã«ã¡ã©ã«ããæ¹æ³" ãªã㦠hack ãè¦ã¤ããããã㯠SL4A 㧠Android 端æ«ä¸ã«HTTP ãµã¼ãã¼ãåããã¦ããã®ãµã¼ãã¼ã« HTTP GET ããã¨ã端æ«ã API ã§ããã¯ããã¦åçãæ®å½±ããããã®åç㯠GET ãæãããã©ã¦ã¶å´ã«è¡¨ç¤ºãããã¨ãã hackãé¢ç½ã!
ã¨ããããã§ãPerl ã§ããã£ã¦ã¿ããã¨è©¦ã¿ãã
HTTP ãµã¼ã㯠HTTP::Server::Simple::PSGI ã§æ¸ãã°æ°è¡ã§æ¸ãããåé¡ã¯ãSL4A ã§è¿½å ã® CPAN ã¢ã¸ã¥ã¼ã«ãåããã¨ããã§ãããããã¯çµã¿è¾¼ã¿ã§ã¯è¶³ããªãã¢ã¸ã¥ã¼ã«ã SDã«ã¼ãä¸ã® site_perl ãã£ã¬ã¯ããªã«æ¾ãè¾¼ãã§ããã° okãHTTP::Server::Simple::PSGI ã¯ä¾åãå°ãªãã®ã§ãé½åãè¯ãã
ã¨ãã¥ã¬ã¼ã¿ä¸ã®ããã«è»¢éããã«ã¯
% adb -e push /Library/Perl/5.10.0/HTTP /sdcard/com.googlecode.perlforandroid/extras/perl/site_perl/HTTP
ãªã©ã¨ãããä¸è¨ã¯ HTTP 以ä¸ã®ã¢ã¸ã¥ã¼ã«ããã¹ã¦ä¸¸ãã¨è»¢éããä¾ã
ãã㧠FileHandle.pmãFile/* HTTP/* ãããã転éãã¦ãã£ããPure Perl ã¢ã¸ã¥ã¼ã«ã®ãã£ã¬ã¯ããªå ¨é¨ã丸ãã¨æ¾ãè¾¼ãã§ãè¯ããããããªãã
ã«ã¡ã©æä½ã® HTTP ãµã¼ãã¼ã®å®è£ ã¯ä»¥ä¸ãPython ã®ããã Perl ã«ç§»æ¤ããã ããç°¡åã
#!perl use strict; use warnings; use HTTP::Server::Simple::PSGI; use IO::File; use Android; my $pic = '/sdcard/snapshot.jpg'; my $droid = Android->new; my $app = sub { my $env = shift; $droid->cameraCapturePicture($pic); local $/; my $fh = IO::File->new; $fh->open($pic) or die $!; return [ 200, [ 'Content-Type' => 'image/jpeg' ], [ $fh->getlines ], ]; }; my $server = HTTP::Server::Simple::PSGI->new(10082); $server->app($app); $server->run;
試ãã«ã¨ãã¥ã¬ã¼ã¿ã§åããã¦ã¿ãã...
ã¨ããæã㧠getprotobyname() ã®è¦åã¯åºã¦ãããã®ã®ããªãã¨ããã¤ã³ãã§ãã¦ãããCPAN ã¢ã¸ã¥ã¼ã«ã®åé¡ã¯è§£æ±ºãããããecho ãµã¼ãã¼ãé£ãªãåãããã¨ãèããã¨ããã§ãããã£ã½ãã
ãã¼ãããã¨ã¯å®æ©ã®ã«ã¡ã©ã§åããã¦ï½¥ï½¥ï½¥ã¨æã£ãã®ã§ãããXperia ã§ã¯ SL4A ã® Perl (ã ãã§ãªã Python ãªã©ã) åããªãã æå ã«ã¯ Xperia ãããªããã¨ããããã§ããã§çµäºãæ®å¿µãã§ãã¾ããCPAN ã¢ã¸ã¥ã¼ã«ã転éãã¦ããã°åããã¨ãåãã£ãããHTTPãµã¼ãã¼ãç«ã¦ããããã ãã¨ããã®ã§åç©«ã¯ããã¾ãããä»æ¥ã®é²æã¯ããã¾ã§ã§ãã
SL4A ã¯ãã¾ã ãããã°ãå°ãé¢åã§ã¯ããã¾ãããæ¬å½ã«ã¡ãã£ã¨ãããã¿ãå®è£ ããã ããªãããã«ä»ä¸ããããã®ã§ãªããªã楽ããã¾ãã