Powerpoint exploring the locations used in television show Time Clash
Android Scripting
1. ANDROID SCRIPTING
A Java-less approach to building apps
Juan Gomez
Android Dev @ Handmark, Inc
Co-founder PythonKC
2. AGENDA
• Android 101
• Scripting Layer for Android (SL4A)
• Basic tasks (WiFi, GPS, camera, SMS) and basic UI
• Using WebViews and Javascript for better UIs
• Advanced Scripts (Twisted, PyBluez)
• Packaging your scripts on an APK
• Q&A
3. ANDROID 101
An Android application is actually a collection of several
components, each defined in a file called AndroidManifest.xml
The 4 main types of components are:
• Activities
• Services
• Content Providers
• Broadcast Receivers
Apps are packaged on an APK file (myApp.apk)
4. INTENTS
• Apps can communicate with each other by providing and consuming each
other’s Intents
• Intents “link” activities, services, and
receivers together
• Intents consists of
• An action (i.e. ACTION_VIEW)
• Categories (i.e. CATEGORY_DEFAULT)
• A URI (i.e. content://contacts/people/123)
• “Extras” metadata
• Intents can also be sent to hard-coded class names (com.foo.FooActivity)
5. HOW DO I GET STARTED?
• Download the Android SDK: http://developer.android.com/sdk
• Add Android platforms and other packages to your SDK
• Install the ADT plug-in for Eclipse (optional)
• Enable app side-loading on your phone:
• Settings > Application > Unknown Sources
6. WHERE CAN I LEARN MORE?
• Android’s Dev Guide
http://developer.android.com/guide
• Lots of Android Books
• StackOverflow
• Recommended resource:
• http://commonsware.com/
• The Busy Coder’s Guide to Android
Development
• Yearly subscription
7. SCRIPTING LAYER FOR
ANDROID (SL4A)
• Brings scripting languages to Android
• Allows you to edit and execute scripts and interactive
interpreters directly on the Android device.
• Scripts
have access to many of the APIs available to full-
fledged Android apps.
• Supported languages include: Python, Perl, JRuby, Lua, BeanShell,
JavaScript and Tcl
• There’s limited support for PHP and Shell scripts
8. SL4A ARCHITECTURE
• As it name implies, SL4A sits
between the actual Android JVM
(Dalvik) and the executable
Scripts.
• The Facade API exposes a subset
of Android system API's via JSON
RPC calls
• Only the parts of Android's APIs
which has been wrapped by
facades are available to
interpreter
• This is a fundamental feature of
SL4A added by Google to avoid
security concerns.
9. WHAT CAN SL4A DO?
• Handle intents
• Start activities
• Make phone calls
• Send text messages
• Scan bar codes
• Poll location and sensor data
• Use text-to-speech
11. HOW TO USE
IT?
SL4A installs as an App on
your phone, you need to
install separate interpreters
for each language you want to
use
12. INTERPRETERS
Open up the App, click on
Menu > View > Interpreters to
get a list of the available
interpreters
13. DOWNLOAD
Click on Menu > Add to get a
list of new interpreters you
can install on your phone
14. INSTALL
Click on an Interpreter from
the list and this will download
an .APK with the installer.
15. SCRIPTS
When you open the SL4A
app you get a list of your
available scripts. You can use a
quick action menu to run,
edit, save or delete
16. EDIT/RUN
SL4A offers an environment
to edit and run scripts on the
phone but really limited
17. USING ADB PUSH/PULL
• It’s
easier to edit scripts on your computer using your favorite
text editor and leverage the Android Debug Bridge (ADB) to
load them on the phone.
• ADB is installed on /<android_sdk_folder>/platform-tool/
• adb pull /mnt/sdcard/sl4a/scripts/Camera.js ~/Documents/
sl4a_scripts/
• adb push ~/Documents/sl4a_scripts/Camera.js /mnt/sdcard/sl4a/
scripts
20. TAKING A PICTURE (JS)
load("/sdcard/
com.googlecode.rhinoforandroid/extras/rhino/
android.js");
var droid = new Android();
result = droid.cameraCapturePicture("/mnt/
sdcard/sl4a/pic.jpg", true);
26. SIMPLE TWITTER CLIENT
(RUBY)
require 'android'
require 'net/http'
droid = Android.new
url = URI.parse("http://twitter.com/statuses/update.xml")
req = Net::HTTP::Post.new(url.path)
req.basic_auth('user', 'password')
status = droid.getInput 'Twitter Update', "What's going on?"
req.set_form_data({'status' => status["result"],
'source' => 'Android'})
response = Net::HTTP.new(url.host, url.port).start do |http|
http.request(req)
end
if response.code == "200"
droid.makeToast "Your toot was successfully sent."
end
27. WEBVIEWS AS ADVANCED UI
<html>
<head>
<title>Text to Speech</title>
<script>
var droid = new Android();
var speak = function() {
droid.eventPost("say",
document.getElementById("say").value);
}
</script>
</head>
<body>
<form onsubmit="speak(); return false;">
<label for="say">What would you like to say?</
label>
<input type="text" id="say" />
<input type="submit" value="Speak" />
</form>
</body>
</html>
28. BACKGROUND SERVICE
You can create a background service that acts as a controller in
you favorite language to support your Web UI
import android
droid = android.Android()
droid.webViewShow('file:///sdcard/sl4a/scripts/
text_to_speech.html')
while True:
result = droid.eventWaitFor('say').result
if result is not None:
droid.ttsSpeak(result['data'])
29. ADVANCED SCRIPTS
• Python is by far the most
complete language on SL4A
• You can import more advanced
libraries that are not part of the
Python Standard Library.
• Like PyBluez for Bluetooth
• Or Twisted
• Twisted is an extremely powerful event-
driven networking engine written in
Python.
• Projects like BitTorrent and Launchpad
use twisted as their networking engine.
30. PACKAGING YOU APP FOR
THE GOOGLE PLAY STORE
• For this step you will need Eclipse :(
• Download the skeleton Android project from here:
http://android-scripting.googlecode.com/hg/android/
script_for_android_template.zip
• Follow these instructions to configure the project:
http://code.google.com/p/android-scripting/wiki/SharingScripts
• Make sure you can generate an APK and do a test install.
• Follow these instructions to sign your APK:
http://developer.android.com/guide/publishing/app-signing.html
• Viola! you can upload your APK to the Play Store
33. BEGINNERS PYTHON
WORKSHOP
• The Beginners Python Workshop is a 2-day free event focused on
teaching the basics of programming in the Python language.
• Everybody is encouraged to attend, regardless of your previous
experience with programming
• The only requirements to attend are a laptop and a willingness to learn.
• When:
Friday, June 22nd 6pm - 10pm
Saturday, June 23rd 10am - 4pm
• Where:
UMKC Campus 302 Flarsheim Hall
5110 Rockhill Road, Kansas City, MO
RSVP at: http://www.meetup.com/pythonkc/events/62339552