Programming Mobile Apps with
Python
Andreas Schreiber <andreas.schreiber@medando.de>
EuroPython 2012, Florence, Italy (July 3, 2012)
www.medando.de
Medando – Mobile Health Apps
EuroPython 2012, Florence, 03.07.2012 Slide 2 www.medando.de
My Blood Pressure
EuroPython 2012, Florence, 03.07.2012 Slide 3 www.medando.de
Overview
• Apps and Statistics
• Apps, Hardware, Markets
• Early Mobile Development with Python
• Nokia, Windows Mobile / CE
• Current Mobile Development with Python
• Android, iOS, Windows Phone
• Everything else…
• Other systems, summary, conclusions
EuroPython 2012, Florence, 03.07.2012 Slide 4 www.medando.de
Mobile Apps
What is a mobile app?
• A software designed to run on smartphones, tablet computers, and other
mobile devices
• Limited memory, small screens, touch UI, battery efficient
• Runs on mobile operating systems
• Available through application distribution platforms
• Apps are either free or paid
• “App” was Word of the Year in 2010 (USA)
EuroPython 2012, Florence, 03.07.2012 Slide 5 www.medando.de
Smartphones
What is a smartphone?
• Mobile phone based on a mobile
operating platform
• Combination of
• PDA functions, camera, media player, Web browser, …
• Equipped with
• Touch screen, high-speed networking (Wi-Fi, mobile
broadband), GPS, NFC, acceleration sensors, …
EuroPython 2012, Florence, 03.07.2012 Slide 6 www.medando.de
Tablet Computers
What is a Tablet?
• A mobile computer that is
larger than a smartphone
• Built as touch screen device
• Virtual keyboard, sometimes
stylus or digital pen
• Mostly based on x86 or ARM
architectures
EuroPython 2012, Florence, 03.07.2012 Slide 7 www.medando.de
Mobile Operating Systems
Popular mobile operating systems
• Android
• Apple iOS
• Windows Phone / Mobile / CE
• RIM BlackBerry
• Nokia OS / Symbian
• Samsung Bada
• …
EuroPython 2012, Florence, 03.07.2012 Slide 8 www.medando.de
Market Share: Smartphone Sales
Source: http://en.wikipedia.org/wiki/Smartphone
EuroPython 2012, Florence, 03.07.2012 Slide 9 www.medando.de
App Distribution
• Application Distribution Platforms
• Google Play
• Apple App Store
• Windows Phone Marketplace
(and Windows Marketplace for Mobile)
• BlackBerry App World
• Nokia Ovi Store
• Many more
• Cross-platform, manufacturer-specific,
carrier-specific, …
EuroPython 2012, Florence, 03.07.2012 Slide 10 www.medando.de
Apps in the iOS App Store
Source: http://en.wikipedia.org/wiki/App_Store_(iOS)
EuroPython 2012, Florence, 03.07.2012 Slide 11 www.medando.de
Apps in the Android Market / Google Play
Google Play Apps
700.000
600.000
500.000
400.000
300.000
200.000
100.000
EuroPython 2012, Florence, 03.07.2012 Slide 12 www.medando.de
Apps in Google Play
Google Play Downloads
25.000.000.000
20.000.000.000
15.000.000.000
10.000.000.000
5.000.000.000
EuroPython 2012, Florence, 03.07.2012 Slide 13 www.medando.de
Apps in the Windows Phone Marketplace
Source: http://www.windowsphoneapplist.com
EuroPython 2012, Florence, 03.07.2012 Slide 14 www.medando.de
So Many Apps…
… but almost none of them
are developed in Python!
EuroPython 2012, Florence, 03.07.2012 Slide 15 www.medando.de
Early Mobile Development with Python
• Symbian
• Window Mobile / CE
EuroPython 2012, Florence, 03.07.2012 Slide 16 www.medando.de
Symbian
Symbian OS
• Operating system for smartphones and PDAs
• Micro kernel, 32bit, single user
• GUI-centric application framework
S60
A schematic diagram of the S60 platform architecture.
• User interface for smartphones
Programming for Symbian
• C++, Java, Web Widgets
• (Flash Lite), (Python)
EuroPython 2012, Florence, 03.07.2012 Slide 17 www.medando.de
Python for S60 (PyS60)
• Python port for S60 platform
• Developed by Nokia, but development has stopped
• Open-Source-License (Apache Version 2)
• Stable Release
• Last release: 1.4.5 (27.01.2009)
• Available on SourceForge
http://sourceforge.net/projects/pys60
EuroPython 2012, Florence, 03.07.2012 Slide 18 www.medando.de
“Hello World”
import appuifw
appuifw.app.title = u„Hello World"
appuifw.note(u"Hello World!", 'info')
EuroPython 2012, Florence, 03.07.2012 Slide 19 www.medando.de
Starting a Python Interpreter
EuroPython 2012, Florence, 03.07.2012 Slide 20 www.medando.de
Running Scripts
EuroPython 2012, Florence, 03.07.2012 Slide 21 www.medando.de
Interactive Console
EuroPython 2012, Florence, 03.07.2012 Slide 22 www.medando.de
Source Code Template
import appuifw
1. Importing modules import e32
2. Setting screen size appuifw.app.screen = 'normal'
3. Applications menu def item1():
print "item1 was selected.”
4. Set. exit key handler appuifw.app.menu = [(u"item 1", item1)]
(Callback function) def quit():
appuifw.app.set_exit()
5. Setting app title
app.exit_key_handler=quit
6. Application body
appuifw.app.title = u'Simple Application'
7. Active Objects
app_lock = e32.Ao_lock()
8. Main Loop # starts scheduler -> event processing
app_lock.wait()
Complete template: http://www.mobilenin.com/pys60/resources/app_skeleton_with_mainloop.py
EuroPython 2012, Florence, 03.07.2012 Slide 23 www.medando.de
Example „Location Based Service“
Send SMS to someone if certain cell is near (using GSM Cell ID)
import location
HOME_CELL_ID = u"98521779" # my home in Cologne, Germany
WIFE = u"+49173247****“ # cell phone number of my wife
entries = [u"can’t wait to see you!",
u"I’m hungry.",
u"I’m in a bad mood."]
listbox = appuifw.Listbox(entries, shout)
home = 0
while home == 0:
country, provider, lac, cell = location.gsm_location()
if (cell== HOME_CELL_ID):
home = 1
message = u"Will be at home in a moment and %s" % mood
messaging.sms_send(WIFE, message)
EuroPython 2012, Florence, 03.07.2012 Slide 24 www.medando.de
Example „OpenGL“
http://tinyurl.com/pys60cube
EuroPython 2012, Florence, 03.07.2012 Slide 25 www.medando.de
Windows Mobile / CE
Windows Mobile
• Operating system for smartphones
• Based on Windows CE kernel
• Implemented in C
Programming for Windows Mobile
• Visual C++ (native code)
• .NET framework
• Tcl-Tk (with eTcl)
• Python with PythonCE
EuroPython 2012, Florence, 03.07.2012 Slide 26 www.medando.de
Python CE
• Python port for Windows CE
• Python CE: http://pythonce.sourceforge.net/
• Outdated since 2007
# Send a quick popup message to the user
import win32sys
win32sys.MessageBox(0, "My Message", "My Title", 1)
win32sys.MessageBeep()
# Launch another CE application
import win32sh
win32sh.ShellExecuteEx(0, 0, "", "\\Windows\\calc.exe",
"", "\\Windows", 1)
EuroPython 2012, Florence, 03.07.2012 Slide 27 www.medando.de
Current Mobile Development with Python
• Android
• iOS
• Windows Phone
EuroPython 2012, Florence, 03.07.2012 Slide 28 www.medando.de
Android
Android
• Linux-based operating system for mobile devices
• Developed by the Open Handset Alliance, led by Google
• Open Source, Apache License
• Kernel based on Linux-kernel
• Libraries and APIs written in C
• Application Framework in Java
• Java VM Dalvik with JIT
• Hardware platform: ARM
EuroPython 2012, Florence, 03.07.2012 Slide 29 www.medando.de
Programming Android
• Apps are usually developed in Java
• Software development tools
• Android Software Development Kit
• Native Development Kit
• App Inventor for Android
• Simple project and Basic4android
• some others
• Python!?
EuroPython 2012, Florence, 03.07.2012 Slide 30 www.medando.de
Python for Android
Several options
• Scripting Layer for Android (SL4A)
• Python for Android (Py4A)
• Kivy
• PySide for Android
• PyGame
EuroPython 2012, Florence, 03.07.2012 Slide 31 www.medando.de
Scripting Layer for Android (SL4A)
• Executes scripts and interactive interpreters on Android
• Access to many APIs
• Support for
• Python
• Perl
• Ruby
• Lua
• BeanShell
• JavaScript Source: Practical Android Projects by Lucas Jordan and Pieter Greyling
• Tcl
• Available on Google Code:
http://code.google.com/p/android-scripting
EuroPython 2012, Florence, 03.07.2012 Slide 32 www.medando.de
Scripting Layer for Android (SL4A)
• Support for some UI elements: Dialogs, Toasts, Progressbar, …
• Interactive console
Source: Practical Android Projects by Lucas Jordan and Pieter Greyling
EuroPython 2012, Florence, 03.07.2012 Slide 33 www.medando.de
Scripting Layer for Android (SL4A)
• Scripts
• Sharing via barcodes or APKs
• Hello Word:
import android
droid = android.Android()
droid.makeToast('Hello, Android!')
EuroPython 2012, Florence, 03.07.2012 Slide 34 www.medando.de
Python for Android (Py4A)
• Python interpreter for Android
• CPython, cross-compiled for Android
• Used in SL4A
• Access to many Android APIs
• Native UI support not complete
• Website: http://code.google.com/p/python-for-android/
EuroPython 2012, Florence, 03.07.2012 Slide 35 www.medando.de
Building an App
• To build a stand-alone app, the Python for Android interpreter must be
included in an APK
• Project: http://code.google.com/p/android-python27/
• Template files
• Build files
• Basically requires to change Java code to add your own script
public static final String
PYTHON_MAIN_SCRIPT_NAME = "hello.py";
public static final String
PYTHON_PROJECT_ZIP_NAME = "my_python_project.zip";
File: GlobalConstants.java
EuroPython 2012, Florence, 03.07.2012 Slide 36 www.medando.de
Kivy
• Cross platform framework for innovative user interfaces
• Multi-touch
• Runs on Android, iOS, Linux, Windows, Mac OSX
• Graphics engines uses OpenGL ES2
• Open Source
• Website: http://kivy.org
EuroPython 2012, Florence, 03.07.2012 Slide 37 www.medando.de
Kivy Hello World
from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):
def build(self):
return Button(text='Hello World')
TestApp().run()
Source: Kivy Website kivy.org
EuroPython 2012, Florence, 03.07.2012 Slide 38 www.medando.de
See Kivy Poster Outside…
Poster by Mathieu Virbel
EuroPython 2012, Florence, 03.07.2012 Slide 39 www.medando.de
PySide for Android
• For writing GUI applications for Android using Python
• Based on
• Python for Android (Py4A)
• Qt for Android (Necessitas)
• Python bindings for Qt (PySide)
• Website: http://thp.io/2011/pyside-android/
EuroPython 2012, Florence, 03.07.2012 Slide 40 www.medando.de
PySide for Android Example
import sys
import traceback
def main():
from PySide.QtCore import *
from PySide.QtGui import *
app = QApplication(sys.argv)
w = QLabel('Hello World!')
w.show()
app.exec_()
if __name__=="__main__":
main()
EuroPython 2012, Florence, 03.07.2012 Slide 41 www.medando.de
Pygame Subset for Android
• Subset of Pygame for the Android platform
• Good for developing simple games
• Website: http://pygame.renpy.org/
EuroPython 2012, Florence, 03.07.2012 Slide 42 www.medando.de
iOS
EuroPython 2012, Florence, 03.07.2012 Slide 43 www.medando.de
Apple iOS
iOS
• Mobile operating system by Apple
• Multi-touch user interface
• OS layer: Core OS layer, Core Services,
Media layer, Cocoa Touch layer
Programming iOS
• Apps are written in Objective-C
• Software Development Kit and IDE Xcode
• Python on iOS almost not possible
EuroPython 2012, Florence, 03.07.2012 Slide 44 www.medando.de
Python for iOS – A Python IDE for the iOS
http://pythonforios.com/
EuroPython 2012, Florence, 03.07.2012 Slide 45 www.medando.de
Python for iOS – On iPhone
EuroPython 2012, Florence, 03.07.2012 Slide 46 www.medando.de
Python for iOS – On iPad
EuroPython 2012, Florence, 03.07.2012 Slide 47 www.medando.de
Python for iOS – On iPad
EuroPython 2012, Florence, 03.07.2012 Slide 48 www.medando.de
Python for iOS – On iPad
EuroPython 2012, Florence, 03.07.2012 Slide 49 www.medando.de
Kivy
• You can publish Kivy Apps
in the Apple App Store
• No dynamic linking
• First App: Deflectouch
EuroPython 2012, Florence, 03.07.2012 Slide 50 www.medando.de
Windows Phone
Windows Phone
• Mobile operating system by Microsoft
• Successor to Windows Mobile
Programming for Windows Phone
• Apps must be based on XNA or Silverlight
• Windows Phone Developer Tools
EuroPython 2012, Florence, 03.07.2012 Slide 51 www.medando.de
IronPython
IronPython
• Python implementation for the .NET platform
• Since version 2.7.2 (March 2012):
• Preliminary support for Windows Phone 7.5
• No documentation yet
• http://blog.ironpython.net/2012/03/whats-new-in-ironpython-272.html
EuroPython 2012, Florence, 03.07.2012 Slide 52 www.medando.de
Everything else…
EuroPython 2012, Florence, 03.07.2012 Slide 53 www.medando.de
Other Mobile Devices
Many other devices with Apps
• Livescribe
• Amazon Kindle
• No Python support
• Maybe support via Jython
EuroPython 2012, Florence, 03.07.2012 Slide 54 www.medando.de
Summary
Symbian Android iOS Windows
Phone
Python Yes Yes, with Via Kivy Not now
support restrictions
EuroPython 2012, Florence, 03.07.2012 Slide 55 www.medando.de
Comparison Matrix by Thomas Perl (@thp4)
Source: http://thp.io/2012/mobile-matrix/
EuroPython 2012, Florence, 03.07.2012 Slide 56 www.medando.de
Questions?
@onyame
Conclusions
• Python on mobile phone not ready for production
development of apps
• Some solutions for scripting and interactive interpretation
EuroPython 2012, Florence, 03.07.2012 Slide 57 www.medando.de