ANDROID SCRIPTING A Java-less approach to building apps              Juan Gomez          Android Dev @ Handmark, Inc      ...
AGENDA•   Android 101•   Scripting Layer for Android (SL4A)•   Basic tasks (WiFi, GPS, camera, SMS) and basic UI•   Using ...
ANDROID 101An Android application is actually a collection of severalcomponents, each defined in a file called AndroidManife...
INTENTS•   Apps can communicate with each other by providing and consuming each    other’s Intents•   Intents “link” activ...
HOW DO I GET STARTED?• Download       the Android SDK: http://developer.android.com/sdk• Add Android      platforms and ot...
WHERE CAN I LEARN MORE?• Android’s Dev Guide  http://developer.android.com/guide• Lots   of Android Books• StackOverflow• R...
SCRIPTING LAYER FOR              ANDROID (SL4A)• Brings    scripting languages to Android• Allows you to edit and execute ...
SL4A ARCHITECTURE•   As it name implies, SL4A sits    between the actual Android JVM    (Dalvik) and the executable    Scr...
WHAT CAN SL4A DO?• Handle    intents• Start   activities• Make    phone calls• Send    text messages• Scan    bar codes• P...
HOW TO DOWNLOAD?• Go   to: http://code.google.com/p/android-scripting/
HOW TO USE   IT?   SL4A installs as an App on    your phone, you need to  install separate interpretersfor each language y...
INTERPRETERS Open up the App, click onMenu > View > Interpreters to  get a list of the available         interpreters
DOWNLOADClick on Menu > Add to get a list of new interpreters you   can install on your phone
INSTALL Click on an Interpreter fromthe list and this will download  an .APK with the installer.
SCRIPTS When you open the SL4A  app you get a list of youravailable scripts. You can use a  quick action menu to run,     ...
EDIT/RUN SL4A offers an environmentto edit and run scripts on the   phone but really limited
USING ADB PUSH/PULL• It’s     easier to edit scripts on your computer using your favorite  text editor and leverage the An...
HELLO WORLD (PYTHON)import androiddroid = android.Android()droid.makeToast(Hello,Android!)print Hello world!
TAKING A PICTURE (JS)load("/sdcard/com.googlecode.rhinoforandroid/extras/rhino/android.js");var droid = new Android();resu...
WIFIList all surrounding WiFi   networks and theirconnection information
LISTING WIFI NETWORKS (JS)load("/sdcard/com.googlecode.rhinoforandroid/extras/rhino/android.js");var droid = new Android()...
USING GPS AND SMS (RUBY)require "android";def get_location(droid)    droid.startLocating()    droid.eventWaitFor("location...
BASIC UISL4A provides basic Android  UI elements to be used inscripts. But these UI elements  are generally very limited
USING NATIVE TYPES AND        LIBRARIESimport androidfrom datetime import datedroid = android.Android()today = date.today(...
SIMPLE TWITTER CLIENT                (RUBY)require androidrequire net/httpdroid = Android.newurl = URI.parse("http://twitt...
WEBVIEWS AS ADVANCED UI<html>  <head>    <title>Text to Speech</title>    <script>       var droid = new Android();       ...
BACKGROUND SERVICEYou can create a background service that acts as a controller inyou favorite language to support your We...
ADVANCED SCRIPTS• Python   is by far the most  complete language on SL4A• You can import more advanced  libraries that are...
PACKAGING YOU APP FOR      THE GOOGLE PLAY STORE•   For this step you will need Eclipse :(•   Download the skeleton Androi...
THAT’S IT FOR ME!
ThanksTo Our Sponsors
BEGINNERS PYTHON                    WORKSHOP•   The Beginners Python Workshop is a 2-day free event focused on    teaching...
@_JUANDGhttp://speakerdeck.com/u/juandg/p/androidscripting_kcdc2012#
Android Scripting
Upcoming SlideShare
Loading in …5
×

Android Scripting

7,282 views

Published on

Published in: Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,282
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
0
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Android Scripting

    1. 1. ANDROID SCRIPTING A Java-less approach to building apps Juan Gomez Android Dev @ Handmark, Inc Co-founder PythonKC
    2. 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. 3. ANDROID 101An Android application is actually a collection of severalcomponents, each defined in a file called AndroidManifest.xmlThe 4 main types of components are: • Activities • Services • Content Providers • Broadcast ReceiversApps are packaged on an APK file (myApp.apk)
    4. 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. 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. 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. 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. 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 APIs via JSON RPC calls• Only the parts of Androids 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. 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
    10. 10. HOW TO DOWNLOAD?• Go to: http://code.google.com/p/android-scripting/
    11. 11. HOW TO USE IT? SL4A installs as an App on your phone, you need to install separate interpretersfor each language you want to use
    12. 12. INTERPRETERS Open up the App, click onMenu > View > Interpreters to get a list of the available interpreters
    13. 13. DOWNLOADClick on Menu > Add to get a list of new interpreters you can install on your phone
    14. 14. INSTALL Click on an Interpreter fromthe list and this will download an .APK with the installer.
    15. 15. SCRIPTS When you open the SL4A app you get a list of youravailable scripts. You can use a quick action menu to run, edit, save or delete
    16. 16. EDIT/RUN SL4A offers an environmentto edit and run scripts on the phone but really limited
    17. 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
    18. 18. HELLO WORLD (PYTHON)import androiddroid = android.Android()droid.makeToast(Hello,Android!)print Hello world!
    19. 19. 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);
    20. 20. WIFIList all surrounding WiFi networks and theirconnection information
    21. 21. LISTING WIFI NETWORKS (JS)load("/sdcard/com.googlecode.rhinoforandroid/extras/rhino/android.js");var droid = new Android();wifi_on = droid.checkWifiState();if (wifi_on) { success = droid.wifiStartScan(); if (success) { list_of_networks = droid.wifiGetScanResults(); for (var i = 0; i < list_of_networks.length; i++) { for (attr in list_of_networks[i]) { print(attr + ": " + list_of_networks[i][attr]); } print("n"); } } droid.makeToast("Done obtaining list of WiFi networks!");} else { droid.makeToast("WiFi radio is off");}
    22. 22. USING GPS AND SMS (RUBY)require "android";def get_location(droid) droid.startLocating() droid.eventWaitFor("location") raw_location = droid.readLocation() droid.stopLocating() return raw_location["result"]["network"]enddef format_address(loc_info) return loc_info["feature_name"] + " " + loc_info["thoroughfare"] + " " + loc_info["locality"] + ", " + loc_info["admin_area"] + " " + loc_info["postal_code"]enddef get_address(droid, location) loc_info= droid.geocode(location["latitude"], location["longitude"]) return format_address(loc_info["result"][0])enddroid = Android.newlocation = get_location droidaddress = get_address droid, locationphone = droid.pickPhonedroid.smsSend phone["result"], "Greetings from SL4A, Im at " + addressputs "done sending SMS with location"
    23. 23. BASIC UISL4A provides basic Android UI elements to be used inscripts. But these UI elements are generally very limited
    24. 24. USING NATIVE TYPES AND LIBRARIESimport androidfrom datetime import datedroid = android.Android()today = date.today()droid.dialogCreateDatePicker(today.year, today.month, today.day)droid.dialogShow()selectedDate = droid.dialogGetResponse().resultfirst_date = date(selectedDate[year], selectedDate[month], selectedDate[day])droid.dialogCreateDatePicker(today.year, today.month, today.day)droid.dialogShow()selectedDate = droid.dialogGetResponse().resultsecond_date = date(selectedDate[year], selectedDate[month], selectedDate[day])timediff = abs(first_date - second_date)droid.dialogCreateAlert("Difference", "Days: " + str(timediff.days))droid.dialogSetPositiveButtonText(OK)droid.dialogShow()
    25. 25. SIMPLE TWITTER CLIENT (RUBY)require androidrequire net/httpdroid = Android.newurl = 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, "Whats 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)endif response.code == "200" droid.makeToast "Your toot was successfully sent."end
    26. 26. 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>
    27. 27. BACKGROUND SERVICEYou can create a background service that acts as a controller inyou 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])
    28. 28. 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.
    29. 29. 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
    30. 30. THAT’S IT FOR ME!
    31. 31. ThanksTo Our Sponsors
    32. 32. 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
    33. 33. @_JUANDGhttp://speakerdeck.com/u/juandg/p/androidscripting_kcdc2012#

    ×