Die erste Developer-Preview von Android 15 steht zur Verfügung, weshalb wir die Gelegenheit ergreifen, einen Blick auf die Neuigkeiten und Zukunftspläne zu werfen, die Android-Entwicklern ins Haus stehen.
In der Sturm-und-Drang-Zeit von Android war jedes Update von Googles Handcomputerbetriebssystem ein wahrer Albtraumgenerator. Mittlerweile hat sich die Situation – wohl auch durch den Druck seitens Huaweis Harmony OS – ein wenig beruhigt. Trotzdem gilt insbesondere für Entwickler von mit externer Hardware interagierenden Applikationen immer, dass jedes Android-Update mit einem gewissen Stress einhergeht. Schauen wir also, wie hoch – oder niedrig – das Stresslevel bei Android 15 werden könnte.
Google setzt im Bereich der Android-Entwicklung seit einiger Zeit konsequent auf das in Abbildung 1 gezeigte Verfahren. Google verspricht dabei, dass Breaking Changes immer unwahrscheinlicher werden und beim Erreichen des als Platform Stability bezeichneten Zustands so gut wie ausgeschlossen sind. Für die eigentliche Entwicklung mit Android 15 ist die jüngste Android-Studio-Jellyfish-Version verpflichtend, die unter [1] zum Download bereitsteht. Der Autor hat in den folgenden Schritten mit der Version Jellyfish 2023.3.1 Canary 10 gearbeitet.
Abb. 1: Die Meinung der Entwickler ist gefragt
Unschön ist, dass Google im .tar.gz-Archiv seit einiger Zeit den Ordnernamen android-studio vergibt. Das ist insofern problematisch, als man im Downloadverzeichnis eine Preview- und eine Finalversion nicht mehr direkt nebeneinander ablegen kann. Um dieses Problem zu umgehen, bietet es sich an, das Archiv an einen beliebigen Ort im Dateisystem zu extrahieren und den Ordner android-studio in android-studiopreview umzubenennen. Dieser wandert dann wie gewohnt in den Download-Ordner der Workstation, wo der Start von Android Studio über das von der normalen Variante bekannte Startskript avisiert wird:
tamhan@TAMHAN18:~/Downloads/android-studiopreview/bin$ ./studio.sh
Beim ersten Start fordert Android Studio wie üblich zur Aktualisierung veralteter Teile des lokal installierten Android SDK auf. Nachdem die Benutzeroberfläche zur Verfügung steht, muss im SDK Installer das Herunterladen der diversen zu Android 15 gehörenden Komponenten in Angriff genommen werden (Abb. 2). Interessant ist, dass Google die jeweiligen Komponenten derzeit noch als VanillaIceCream bezeichnet, wie in der Abbildung zu sehen ist.
Abb. 2: Komponenten auswählen
Für Experimente mit realer Hardware wird derzeit nur Googles Pixel-Hardware ab Version 6 unterstützt:
Pixel 6 and 6 Pro
Pixel 6a
Pixel 7 and 7 Pro
Pixel 7a
Pixel Fold
Pixel Tablet
Pixel 8 and 8 Pro
Alle anderen müssen auf ein Emulator Image setzen. Dabei ist die Nutzung eines X86-Images gegenüber einem Arm64-Image aus Performancegründen so gut wie immer vorzuziehen. Die praktische Erfahrung des Autors lehrt außerdem, dass das Industrie-Android Emteria vergleichsweise häufig mit Betaversionen der neuen Betriebssysteme vorprescht – wer einen Raspberry Pi im Haus hat, ist gut beraten, Emteria im Blick zu behalten [2].
Google ist seit einiger Zeit dazu übergegangen, neue Funktionen nicht mehr nur bei Betriebssystemupdates an die User zu bringen. Ab Android 12 steht beispielsweise ein Google-Play-Update zur Verfügung, das verschiedene im Open JDK seit längerer Zeit zur Verfügung stehende Programmierschnittstellen auch für die Handcomputerentwicklung ansprechbar macht. Der Zweck dieser Erweiterungen ist dabei vor allem, die Plattform einheitlich zu halten und die Portierung von auf anderen Java-Systemen laufendem Code in Richtung Android-Applikationen zu erleichtern.
Zunächst verdient das unter [3] detailliert beschriebene Update der Runtime Erwähnung: Es verbessert verschiedene Details der JVM und führt auf unterstützten Geräten mitunter zu einer besseren Performance des Applikationscodes.
Die erste funktionale Erweiterung betrifft dann die ByteBuffer-Klasse, die gut ein halbes Dutzend nach folgendem Schema aufgebaute Methoden eingeschrieben bekommt:
public ByteBuffer get (int index, byte[] dst)
public ByteBuffer put (int index, byte[] src)
Gegenüber den schon bisher in der Klasse implementierten get- und put-Funktionen ist beachtenswert, dass die Quelle bzw. Senke, die von den Operationen angesprochen wird, fortan ein zweites Bytearray darstellt – eine nicht unerhebliche Erleichterung, wenn es beispielsweise um Swizzling geht.
Einen ähnlichen Weg dürfte die neu eingeführte DoubleStream.DoubleMapMultiConsumer-Erweiterung des DoubleStreams darstellen: Fließkommazahlen im Double-Format kommen beispielsweise im Internet der Dinge häufiger vor und sind in Android 15 nun bequemer zu verarbeiten.
Zu guter Letzt verdient auch die Klasse X500PrivateCredential Erwähnung; sie erleichtert das Auswerten von X509-Zertifikaten und stellt die Private-Key-Anteile der kryptografischen Primitiva zur bequemeren Auswertung zur Verfügung.
Dass am Client befindliche Informationen immer verwundbar durch Angreifer sind, darf als bekannt vorausgesetzt werden. Die von Google mit dem Android-API-Level 30 erstmals partiell eingeführte Klasse bekommt in Android 15 einerseits neue Funktionen eingeschrieben, wird andererseits aber auch um ein paar implementierte Features erleichtert.
Erstens wurde die Methode isAppSourceCertifica...