Android der Dinge
Nichts wie los!
Wer heute ein Embedded-Betriebssystem auswählt, ohne sich Gedanken darüber zu machen, wie Updates zum Endkunden kommen, lebt in einem Zustand der Sünde. Google hat dies insofern erkannt, als der Suchmaschinenanbieter keine Stand-Alone-Betriebssystem-Images mehr anbietet: Wer heute Android Things einsetzen möchte, muss zwangsweise die unter https://partner.android.com/things/console/ bereitstehende Android Things-Konsole öffnen. Sie funktioniert laut Eigenbeschreibung am besten mit Chrome: Der Autor hat mit anderen Browsern ausser wenig lästigen Fehlermeldungen nur beim Uploaden von Bundes Probleme gehabt.
Nach dem Start und dem Abnicken der Lizenzbedingungen klicken Sie auf den grünen Plus-Knopf, um den Assistenten zur Generierung eines neuen Projekts auf den Bildschirm zu holen. Die Eingabe des Produktnamens ist hierbei wenig kritisch - es handelt sich dabei um einen String, der nur innerhalb des Unternehmens relevant ist. Wir wollen in den folgenden Schritten NMGThing1 annehmen. Im Feld SOM Type dürfen Sie auswählen, welche Art von Prozessrechner von Ihrem System unterstützt werden soll. Google unterstützt zum Zeitpunkt der Drucklegung eine Gruppe von Entwicklerboards aus dem Hause Freescale und den Raspberry Pi 3: Insbesondere in kleineren Serien kann es vernünftig sein, den Raspberry Pi wie in Bild 1 gezeigt einfach im umgekehrten Zustand mittels einiger Schrauben auf der Entwicklerplatine zu befestigen.
Wir wollen in diesem Artikel mit einem Raspberry Pi 3 arbeiten, weshalb dieser im Feld SOM Type markiert wird. Aktivieren Sie die Checkbox zum Inkludieren der Google Play-Services. Im Feld OEM Partition Size dürfen Sie auswählen, wieviel Speicherplatz auf dem generierten Image maximal zur Verfügung stehen soll: Wählen Sie hier 32 MB aus. Beachten Sie allerdings, dass sich diese Einstellungen nach dem Bestätigen nicht mehr rückgängigmachen lassen.
Klicken Sie sodann auf Create, um die Generierung des Projekts zu befehligen. Die Konsole lässt sich an dieser Stelle rund eine Minute Zeit- Google's Server sind mitunterüberlastet. Im nächsten Schritt finden Sie sich in der Settings-Seite wieder. Klicken Sie dort auf den Link Create Starter Build, um den Prozess der Erzeugung eines neuen Android Things-Images zu starten. Die Konsole reagiert darauf mit dem Einblenden des in Bild 2 gezeigten Konfigurationsfenster, in dem Sie die diversen Parameter des Images festlegen sollen. Wir wollen uns in der folgenden Schritten allerdings mit den von Google festgelegten Voreinstellungen zufrieden geben, weshalb wir im nächsten Schritt auf den Knopf Build Configuration klicken.
Nach der erfolgreichen Erzeugung einer Build-Konfiguration finden Sie weiter unten die Option Build Configuration List. Klicken Sie dort auf den Link Download Build, um den Kompilationsprozess zu starten. Der hinter der Android Things-Konsole stehende Server beginnt sodann mit der Erzeugung eines eigenen SD-Karten-Images für ihre Applikation: Die Bereitstellung kann, je nach Serververfassung, schon einmal die eine oder andere Minute in Anspruch nehmen.
Extrahieren Sie das Archiv sodann wie gewohnt, um das Image auf den Prozessrechner zu laden. Verbinden Sie diesen sodann per Ethernet mit ihrer Workstation, stecken Sie einen Monitor an und verbinden Sie das Gerät erst danach mit seiner Energieversorgung - wie bei fast allen Einplatinencomputern dauert der erste Start etwas länger, weil auch hier der Raspberry Pi im ersten Schritt die Speicherkarte und ihre Partitionstabelle an die neue Situation anpasst.
Die dritte Version von Android Studio bringt diverse Erweiterungen mit, die die Arbeit mit Android Things erleichtern. Der Autor nutzt in seiner täglichen Arbeit seit einiger Zeit die Beta 5, und kann bei Berücksichtigung des Locale-Bugs nicht von Stabilitätsproblemen berichten – in den folgenden Schritten gehen wir also davon aus, dass sie mit der aktuellsten Version der IDE arbeiten. Das einst in GitHub zum Download bereitgestellte Projektskelett wird von Google seit längerer Zeit nicht mehr gewartet und funktioniert dementsprechend mit aktuellen Versionen von Android Things eher schlecht als recht - ein Problem, mit dem Sie sich nach Möglichkeit nicht aufhalten sollten.
Klicken Sie nach dem Start der IDE auf Start a new Android Studio Project, und beginnen Sie mit der Erzeugung einer neuen Applikation nach dem hinreichend bekannten Schema. In den folgenden Schritten geht der Autor davon aus, dass Sie als Name NMGThings auswählen.
Bild 3 zeigt den Schritt, der für Sie relevant ist. Die neue Version der IDE unterstützt nämlich die Entwicklung von Android Things-Varianten direkt, weshalb sie im Projektassistenten die zu ihrem Image passende Version der API auswählen. Wer sich an Standardeinstellungen von Google orientiert, bekommt ein Gerät, das auf Android 7.0 basiert - passen Sie Einstellungen also an.
Legen Sie sodann eine neue leere MainActivity an, und klicken Sie sich durch den Assistenten, um die Erstellung des Projektskeletts abzuschliessen. Gradle lässt sich wie immer beim Herunterladen etwas Zeit - diesmal ist es noch langsamer, weil zusätzlich einige für Android Things dedizierte Bibliotheken samt der dazugehörenden Dokumentation von einem Google-Server heruntergeladen werden müssen.
Der erste erfreuliche Unterschied zum in GitHub befindliche Projektskelett ist, dass das von Android Studio 3.0 erstellte Basisprojekt eine Activity mitbringt - wir müssen uns also nicht mehr mit dem Ressourcensystem herumärgern, sondern können gleich mit der Programmierung beginnen.
In zum Modul der Applikation gehörenden gradle.build findet sich folgende Passage, die die Android Things-Unterstützung ins Projekt einbindet:
dependencies {
. . .
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
compileOnly 'com.google.android.things:androidthings:+'
}
Die Bibliothek findet sich auch in der Manifestdatei wieder, wo sie mittels uses-library importiert wird:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tamoggemon.nmgthing">
<application>
<uses-library android:name="com.google.android.things" />
Das in der Einleitung genannte Problem des Single-Use-Betriebssystems wird in Android Things insofern umgesetzt, als das von Google bereitgestellte Image ohne Programmstarter auskommt.
Der Entwickler des Geräts deklariert stattdessen eine Activity, die beim Betriebssystem als Startpunkt angemeldet wird und fortan im Rahmen des Hochfahrens des Geräts zum Einsatz kommt. Dies wird durch das Einschreiben eines zusätzlichen Intent-Filters im Manifest bewerkstelligt:
<activity android:name=".MainActivity">. . .
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.IOT_LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Das Vorhandensein des Intentfilters android.intent.category.IOT_LAUNCHER deklariert MainActivity hierbei als jenes Formular, das nach dem Start aktiviert wird. Beachten Sie, dass dies keine Einschränkung für die Anzahl der Activities darstellt: Sie können so viele Activities anlegen, wie sie wollen - wichtig ist nur, dass immer nur eine als Einsprungpunkt dient.
Da wir in den folgenden Schritten die Nutzung der Android Things-Konsole zur Aktualisierung eines „im Feld“ befindlichen Geräts demonstrieren wollen, müssen wir im ersten Schritt etwas generieren, was eine leicht verständliche Ausgabe erzeugt.