Slide 1

Slide 1 text

Developing Apps for Android and Other Platforms with Kivy and Python Andreas Schreiber droidcon 2013, Berlin, 09. April 2013 www.DLR.de • Chart 1 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 2

Slide 2 text

Outline • Introduction • Python • Kivy • Demos • Limitations • Credits www.DLR.de • Chart 2 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 3

Slide 3 text

Me www.DLR.de • Chart 3 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 Scientist, Head of department Founder, CEO Enthusiastic about Python

Slide 4

Slide 4 text

DLR German Aerospace Center − Research Institution − Space Agency − Project Management Agency www.DLR.de • Chart 4 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 5

Slide 5 text

Locations and employees 7400 employees across 32 institutes and facilities at 16 sites. Offices in Brussels, Paris, Tokyo and Washington. ~1400 employees develop software  Cologne  Oberpfaffenhofen Braunschweig   Goettingen Berlin   Bonn  Neustrelitz Weilheim  Bremen   Trauen Lampoldshausen  Stuttgart  Stade  Augsburg   Hamburg Juelich  www.DLR.de • Chart 5 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 6

Slide 6 text

Python www.DLR.de • Chart 6 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 7

Slide 7 text

Python • General-purpose, high-level programming language • Object-oriented, aspect-oriented, functional • Dynamic type system • Easy-to-learn with clear and expressive syntax def faculty(x): if x > 1: return x * faculty(x - 1) else: return 1

Slide 8

Slide 8 text

Python on Mobile Devices Early Mobile Development with Python • PyS60 for Symbian • Python CE for Windows Mobile Current Mobile Development with Python • Scripting Layer for Android (SL4A) • Python for Android (Py4A) • PySide / Qt for Android • WinRT / IronPython for Windows 8 • Kivy… www.DLR.de • Chart 8 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 9

Slide 9 text

Kivy www.DLR.de • Chart 9 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 10

Slide 10 text

Kivy • Platform-independent Python-Framework • Available for • Android • iOS • Meego • Windows • Linux • OSX • (Raspberry Pi) • Development in Python on all platforms • Not emulated! www.DLR.de • Chart 10 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 kivy.org

Slide 11

Slide 11 text

Kivy Basics • Framework for Natural User Interfaces (NUI) • Touchscreens / Multi-Touch • GPU accelerated graphics • Based on OpenGL ES 2.0 • Suitable for prototypes as well as products • Porting to new platforms is easy www.DLR.de • Chart 11 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 12

Slide 12 text

Kivy Software • Open Source (LGPL), 7 Core developer • Source code: https://github.com/kivy • Documentation: http://kivy.org/docs • Kivy on Google Play: https://play.google.com/store/apps/details?id=org.kivy.pygame www.DLR.de • Chart 12 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 13

Slide 13 text

Kivy says Hello! www.DLR.de • Chart 13 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 from kivy.app import App from kivy.uix.button import Button class HelloApp(App): def build(self): return Button(text='Hello Berlin') HelloApp().run()

Slide 14

Slide 14 text

www.DLR.de • Chart 14 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 15

Slide 15 text

Development with Kivy • Python for widgets, input, program logic • Language KV for layout und graphics • Cython for low-level access to graphic routines www.DLR.de • Chart 15 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 16

Slide 16 text

“Hello Berlin” with KV www.DLR.de • Chart 16 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 from kivy.app import App class HelloApp(App): pass HelloApp().run() #:kivy 1.0 Button: text: ‘Hello Berlin’ File hello.kv defines root widget

Slide 17

Slide 17 text

Example: Pong www.DLR.de • Chart 17 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 import kivy from kivy.app import App from kivy.uix.widget import Widget class PongGame(Widget): pass class PongApp(App): def build(self): return PongGame() if __name__ == '__main__': PongApp().run()

Slide 18

Slide 18 text

Pong Graphics www.DLR.de • Chart 18 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 #:kivy 1.6.0 : canvas: Rectangle: pos: self.center_x - 5, 0 size: 10, self.height Label: font_size: 70 center_x: root.width / 4 top: root.top - 50 text: "0" Label: font_size: 70 center_x: root.width * 3 / 4 top: root.top - 50 text: "0"

Slide 19

Slide 19 text

Pong www.DLR.de • Chart 19 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 Full example: http://kivy.org/docs/tutorials/pong.html

Slide 20

Slide 20 text

Accessing Java Classes from Python • Smartphones have many APIs • Camera, Compass, Contacts, Location, … • Access from Python via PyJNIus • https://github.com/kivy/pyjnius • Implemented with JNI and Java reflection Example www.DLR.de • Chart 20 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 from jnius import autoclass Hardware = autoclass('org.renpy.android.Hardware') print 'DPI is', Hardware.getDPI()

Slide 21

Slide 21 text

Packaging • Creating packages for Windows, OSX, Android und iOS: http://kivy.org/docs/guide/packaging.html www.DLR.de • Chart 21 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 22

Slide 22 text

Build Tools Tool chain • Python-for-android • Cross compiler for ARM • Android SDK & NDK • Python and some Python packages Buildozer • Hides the complexity: Downloads, compiles, packages Kivy source code • https://github.com/kivy/buildozer www.DLR.de • Chart 22 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 % buildozer android debug deploy run

Slide 23

Slide 23 text

Demos www.DLR.de • Chart 23 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 24

Slide 24 text

Kivy Showcase www.DLR.de • Chart 24 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 25

Slide 25 text

Kivy Pictures www.DLR.de • Chart 25 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 26

Slide 26 text

Small Dragon Luki Speech therapy game for kids www.DLR.de • Chart 26 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 27

Slide 27 text

Small Dragon Luki www.DLR.de • Chart 27 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 28

Slide 28 text

MQTT Client www.DLR.de • Chart 28 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 29

Slide 29 text

Steering Plant Growth • Webcam takes picture of plants • Computer detects plant • Computer generates an image for lighting • Light source (e.g., a projector) illuminates the plant using the generated image mobile.cologne > Andreas Schreiber • Plattformübergreifende Apps entwickeln mit Kivy und Python > 08.11.2012 www.DLR.de • Folie 29

Slide 30

Slide 30 text

www.DLR.de • Chart 30 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 31

Slide 31 text

www.DLR.de • Chart 31 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 32

Slide 32 text

www.DLR.de • Chart 32 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 33

Slide 33 text

www.DLR.de • Chart 33 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 34

Slide 34 text

Other Examples… www.DLR.de • Chart 34 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 35

Slide 35 text

iOS-App Deflectouch https://itunes.apple.com/de/app/deflectouch/id505729681

Slide 36

Slide 36 text

iOS/Android-App ProcessCraft https://itunes.apple.com/gb/app/processcraft/id526377075 http://showgen.com

Slide 37

Slide 37 text

Limitations www.DLR.de • Chart 37 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 38

Slide 38 text

Missing, but Planned (or In Progress) User Interface Designer • Design tool for Kivy Language KV • Planned for GSoC Abstraction of mobile APIs • Platform-independent Python wrapper for platform APIs (Android, iOS, Linux/Mac/Windows) • Project Plyer will start as GSoC project maybe Porting to Raspberry Pi • Useful for small/cheap standalone systems • Founded via Crowdsourcing (bountysource.com) www.DLR.de • Chart 38 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 39

Slide 39 text

Credits Thanks to the Kivy developers • Mathieu Virbel (@mathieuvirbel) • Thomas Hansen (@hansent) • Gabriel Pettier (@tshirtman) • and many others www.DLR.de • Chart 39 > droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013

Slide 40

Slide 40 text

> droidcon 2013 > A. Schreiber • Developing Apps for Android and Other Platforms with Kivy and Python > 09.04.2013 www.DLR.de • Chart 40 Questions? Andreas Schreiber Twitter: @onyame http://www.dlr.de/sc Summary • Kivy allows platform-independent development of apps for Android, iOS, Meego, Windows, OSX and Linux • Suitable for multi-touch and graphics applications, such as kiosk systems, exhibits, games, …