Cosc 5/4730 Scripting layer for Android (SL4A)
Android scripting SL4A brings scripting languages to the android, by allowing you edit and execute scripts and interactive interpreters directly on the device. – The scripts have access to many APIs available in applications, but simplified interface. – They can run interactively or in the background – A note, SL4A is still at the “alpha” level.
Supported languages Python, Perl, JRuby, Lua, BeanShell (a Java language based scripting language), JavaScript, Tcl, and shell (borne) More are planned to be added.
Installing Get the sl4a_r4.apk (or more current version) from scripting/downloads/listhttp://code.google.com/p/android- scripting/downloads/list Download this to your android to device, then click install For emulators, download (Google APIs), then issue the following command: – adb install sl4a_r4.apk This command can also be used to install on a your android device as well, if it is plugged via usb.
Running SL4A You should get an icon in the application launcher: This is used to open the interpreter. By default it comes with the shell scripting language. – You can now write and run shell scripts.
To install more languages In the interpreters screen select Add menu item, then select to language you want to install, say perl or python – It will then download and you will need to install the language.
To install more languages (2) You can also download the apk to the computer and install them using the adb command, example: – adb install perl_for_android_r1.apk – Click the icon and then click install.
Under the hood From Practical Android projects, Ch5 Introducing SL4A, Apress
Writing scripts. You can write scripts like you would on computers, to do many things. To access the android APIs you need the following Perl: – Use Android – my $droid = Android->new(); Python: – Import android – Droid = android.Android();
A note Actually write the scripts on the device can be difficult – Using the onscreen keyboard, plus the text can be pretty small in the editor. – Turn on the usb debugging on the device. – You can then use the following command to transfer the script over adb push script.pl /sdcard/sl4a/scripts There is also a TextEditor that maybe be very useful – Textedit-sl4a.apk You can also setup a remote connection via these directions – scripting/wiki/RemoteControl scripting/wiki/RemoteControl
Documentation and Alpha status While there are a lot of examples – In python, perl, and other languages The documentation is pretty poor. Also, since it is an alpha level program, things change with little (or no notice) between versions.
Hello World example Python import android droid = android.Android() droid.makeToast("Hello World") Perl use Android; my $a = Android->new(); $a->makeToast("Hello, Android!"); More “hello world” examples can be found here –
“Simple” Example The following uses the ttsSpeak to have the driod speak what you type into a dialog box with perl use Android; my $droid = Android->new(); $tospeak = "hi!"; while($tospeak ne "done") { $result = $droid->ttsSpeak($tospeak); $hash = $droid->dialogGetInput("Enter done to exit", "Text to Speak?"); $tospeak = $hash->{'result'}; }
APIs. scripting/wiki/ApiReference scripting/wiki/ApiReference
GUI pieces Note, this code comes from the test.pl script, installed with perl. Python has a similar script. Toast $droid->makeToast(‘Hello, Perl?’); To make the phone vibrate $droid->vibrate();
Alert Dialog my $title = 'User Interface'; my $message = 'Welcome to the ASE integration test.'; $droid->dialogCreateAlert( $title, $message ); $droid->dialogSetPositiveButtonText('Continue'); $droid->dialogShow(); my $response = $droid->dialogGetResponse()->{'result'};
GUI pieces $droid->dialogCreateAlert( $title, $message ); $droid->dialogSetPositiveButtonText('Yes'); $droid->dialogSetNegativeButtonText('No'); $droid->dialogSetNeutralButtonText('Cancel'); $droid->dialogShow(); my $response = $droid->dialogGetResponse->{'result'}; my $which = $response->{'which'}; Results use these keys 'positive', 'negative', 'neutral';
Spinner Progress dialog my $title = 'Spinner'; my $message = 'This is simple spinner progress.'; $droid->dialogCreateSpinnerProgress( $title, $message ); $droid->dialogShow(); sleep 2; #so the spinner stays up for 2 seconds. $droid->dialogDismiss();
Horizontal Progress bar $title = 'Horizontal'; $message = 'This is simple horizontal progress.'; $droid->dialogCreateHorizontalProgress( $title, $message, 50 ); $droid->dialogShow(); for my $x ( ) { sleep 1; $droid->dialogSetCurrentProgress($x); } $droid->dialogDismiss();
Dialog with a list my $title = 'Alert'; $droid->dialogCreateAlert($title); $droid->dialogSetItems( [ qw/foo bar baz/ ] ); $droid->dialogShow(); my $response = $droid->dialogGetResponse()- >{'result'};
Dialog with a choice list my $title = 'Alert'; $droid->dialogCreateAlert($title); $droid->dialogSetSingleChoiceItems( [ qw/foo bar baz/ ] ); $droid->dialogSetPositiveButtonText('Yay!'); $droid->dialogShow(); my $response = $droid->dialogGetResponse()->{'result'};
Dialog with Multi Choice list my $title = 'Alert'; $droid->dialogCreateAlert($title); $droid->dialogSetMultiChoiceItems( [ qw/foo bar baz/ ], [] ); $droid->dialogSetPositiveButtonText('Yay!'); $droid->dialogShow(); my $response = $droid->dialogGetResponse()->{'result'};
References Introducing SL4A: The scripting layer for android, Pieter Greyling – scripting.googlecode.com/files/Practical_Android_ Projects_Ch05_Introducing_SL4A.pdf scripting.googlecode.com/files/Practical_Android_ Projects_Ch05_Introducing_SL4A.pdf