Android – Eine Open-Source-Plattform für Embedded Systems (?) Jörg Pleumann Noser Engineering AG 31. August 2010 1 Agenda ● Einleitung ● Plattform ● Werkzeuge ● Hardware 2 Einleitung (I) ● Was ist Android? ● Kompletter Software-Stack (nicht nur) für Mobiltelefone – – – ● Kernel Middleware Applikationen ● Open Source (Apache u.a.) ● Keine Lizenzkosten Wer steht hinter Android? ● Open Handset Alliance (OHA) 3 Einleitung (II) ● Ein paar Zahlen... ● ● ● ● Über 50 verschiedene Geräte auf dem Markt Knapp 120.000 Apps im offiziellen Android Market Derzeit 14% US-Marktanteil im Smartphone-Segment (laut ComScore) Prognostiziert Nr. 2 nach Symbian im Jahr 2012 (laut Gartner) 4 Plattform (I) ● Erste Näherung ● Linux-Kernel ● Programmierung in Java ● Virtuelle Maschine (die keine JVM ist) ● Neues Applikations-Framework Wie Wiepasst passtdas dasalles alleszusammen? zusammen? 5 GPL GPL C++/ /Assembler Assembler CC/ /C++ Apache/ /BSD BSD Apache Java Java Plattform (II) 6 Dalvik VM (I) ● Bytecode-Interpreter für mobile Systeme ● Langsame CPU (250-500 MHz) ● Wenig RAM (64 MB) ● Kein Auslagerungsbereich ● Batteriebetrieb ● Mehrere VM-Instanzen ● Effizienz wichtig ● CPU / Batterie ● Speicher 7 Dalvik VM (II) ● Die Dalvik VM ist keine JVM! ● Register-Architektur (statt Stack) ● Eigener, optimierter Befehlssatz ● Kompakterer, effizienterer Code ● Dalvik Executable Format (DEX) ● Weitere Eigenschaften ● Bytecode-Verifikation ● Just-In-Time (JIT) Compiler ● Java Native Interface (JNI) 8 Plattform (III) 9 Core Libraries (II) ● Kompatibel zu Untermenge des JDK 1.5 FuF Vluloy llyls java.io sust java.io äpunp java.lang java.lang dopir o java.lang.annotation java.lang.annotation gtertde java.lang.ref java.lang.ref java.lang.reflect java.lang.reflect java.math java.math java.net java.net java.nio java.nio java.nio.channels java.nio.channels java.nio.channels.spi java.nio.channels.spi java.nio.charset java.nio.charset java.nio.charset.spi java.nio.charset.spi java.security java.security java.security.acl java.security.acl java.security.cert java.security.cert java.security.interfaces java.security.interfaces java.security.spec java.security.spec java.sql java.sql d FuF Vluloy llyls java.text sust java.text äpunp java.util java.util dopir ogter java.util.concurrent java.util.concurrent java.util.concurrent.atomictde FuF Vluloy llyls org.xml.sax sust org.xml.sax äpunp org.xml.sax.ext org.xml.sax.ext dopi org.xml.sax.helpers org.xml.sax.helpers rogtertde java.util.concurrent.atomicd java.util.concurrent.locks java.util.concurrent.locks java.util.jar java.util.jar java.util.logging java.util.logging java.util.prefs java.util.prefs java.util.regex java.util.regex java.util.zip java.util.zip d ÄOl Otlde lerder javax.xml evVr javax.xml eev javax.xml.parsers javax.xml.parsers rersriiso ino n javax.crypto javax.crypto javax.crypto.interfaces javax.crypto.interfaces javax.crypto.spec javax.crypto.spec javax.net javax.net javax.net.ssl javax.net.ssl javax.security.cert javax.security.cert javax.sql javax.sql PUaP rantlrv ytoly javax.security.auth javax.security.authsllusptu äpn javax.security.auth.callbck javax.security.auth.callbck opdro javax.security.auth.login javax.security.auth.loginitgertde javax.security.auth.x500 javax.security.auth.x500 d org.w3c.dom org.w3c.dom 10 Implementierung ● ● Beigesteuert von Noser Engineering ● 1900 API-Klassen, 3200 total ● Teilweise portiert von Apache Harmony ● Teilweise „from scratch“ entwickelt Optimierung ● java.util.regex ● java.text ● java.security ● java.math ICU ICU JNI JNI OpenSSL OpenSSL 11 C++/ /Assembler Assembler CC/ /C++ Java Java Plattform (IV) 12 Framework (I) ● Was ist es nicht? ● ● Was ist es dann? ● ● Kein Swing / AWT / SWT / LCDUI GUI-Toolkit für kleine (Touch-) Bildschirme Eigenschaften ● Lebenszyklus für Applikationen ● Deklarative Bildschirmlayouts (+ Übersetzung) ● Zentraler Begriff „Aktivität“ (etwa ein Bildschirm) ● Navigation über Anwendungsgrenzen hinweg 13 Framework (II) ● Einige Beispiele für GUI-Elemente... 14 C++/ /Assembler Assembler CC/ /C++ Java Java Plattform (V) 15 16 17 Werkzeuge ● Entwicklungsprozess (vereinfacht) IDE IDE ● ● JavaJavaCompiler Compiler Bestehende Werkzeuge und Wissen nutzbar Android SDK Package Package Tool Tool HelloWorld.apk HelloWorld.apk Dx Dx Converter Converter Dalvik Dalvik VM VM HelloWorld.apk HelloWorld.apk Hello.class classes.dex World.class strings.txt strings.txt image.png image.png 18 SDK ● Build-Werkzeuge ● Dokumentation ● Beispiele ● Emulator ● Konfigurierbar ● Erweiterbar ● Debugging Tools ● Eclipse Plugin 19 Hardware (I) ● ● ● State of the Art: Nexus One ● Von HTC produziert ● Von Google vertrieben Technische Daten ● 1 GHz, 384 MB RAM, WVGA ● UMTS, quad-band GSM ● Touchscreen, Trackball ● 5 MP, GPS, diverse Sensoren Zahlreiche andere Geräte 20 Hardware (II) ● ● Über Telefone hinaus ● Internet Tablet ● Mobiles Terminal ● Navigationssystem ● Set-Top Box Industrielle Anwendungen ● Ticket-Automat ● Automotive ● Anlagensteuerung ?? 21 Industrielle Hardware Toradex Colibri SoC Calyx-Basishardware 22 Einfaches Beispielsystem ● ● ● ● ● Drehende Scheibe Transparente Symbole Lichtschranke misst Umdrehungen LED für StroboskopEffekt Nur ein Symbol soll aufleuchten 23 Was fehlt? ● ● ● API für Sensoren / Aktoren / Busse ● GPIOs ● CAN, OneWire, ... ● Android Sensor API kann als Basis dienen Framework für industrielle Anwendungsfälle ● Messen, Steuern, Regeln ● User Interface Echtzeiterweiterungen ● Xenomai (Ziswiler, 2009) 24 Zusammenfassung ● ● Open-Source Plattform für mobile Systeme ● Vollständig ● Offen ● Lizenzkostenfrei www.noser.com Technologie ● Linux ● Java ● Mächtiges Set von Werkzeugen ● Jenseits von Mobiltelefonen nutzbar 25