Seit der ersten droidcon in Berlin im Jahr 2009 ist die Messe ein fester Anlaufpunkt für alle Android-Entwickler:innen. Auch wir von adesso mobile waren in diesem Jahr als Besucher und Aussteller vertreten. An dieser Stelle möchten wir einen kleinen Rückblick auf unseren Messebesuch geben.
Inhaltsverzeichnis
droidcon Berlin
Die droidcon ist eine dreitägige Konferenz, die sich ganz den Themen Android, Flutter und der mobilen Softwareentwicklung im Allgemeinen widmet. Die droidcon hat ihre Wurzeln in Berlin, findet aber mittlerweile auch in vielen anderen Städten wie London, Lissabon oder San Francisco statt. In diesem Jahr zählte die droidcon in Berlin etwa 2000 Besucher:innen, welche sich in über 95 Vorträgen zu den verschiedensten Themen weiterbilden und austauschen konnten. Das Einzugsgebiet beschränkt sich dabei nicht nur auf Deutschland oder Europa, so dass die unterschiedlichsten Nationen vertreten sind.
adesso mobile als Sponsor
21 mobile Expert:innen aus unserem Team haben sich dieses Jahr gemeinsam auf den Weg in die Hauptstadt gemacht, um sich über neue Themen in der Android-Welt zu informieren, zu lernen und sich mit Gleichgesinnten auszutauschen. Die Berliner Kolleginnen und Kollegen begrüßten uns herzlich in unserer Geschäftsstelle mit einem Grillbuffet. Eine gute Gelegenheit, die verschiedenen Gesichter Kolleg:innen wieder zu sehen, die über unsere 19 Standorte verteilt sind.
Auch für adesso mobile gab es eine Premiere: Als Sponsor waren wir mit einem eigenen Stand auf dem Messegelände vertreten. So hatten wir die Möglichkeit, viele tolle Gespräche mit den Besucherinnen und Besuchern zu führen, die durch den Duft von frischem Popcorns zu uns gelockt wurden. Auch mit langjährigen Partnern wie Saucelabs konnten wir uns über neue Entwicklungen und Möglichkeiten austauschen. An dieser Stelle ein herzliches Dankeschön an alle, die uns besucht, sich interessiert und uns neue Impulse gegeben haben.
Neben unserem Stand konnten wir auch einen inhaltlichen Beitrag zur droidcon leisten. Mein Kollege Roman Zimmer und ich haben jeweils ein interessantes Thema in 20-minütigen Lightning Talks präsentiert. Sobald die Aufzeichnungen der droidcon veröffentlicht sind, seid ihr herzlich eingeladen euch über diese Themen weiter zu informieren.
Convention Plugins
Ein Bild, welches viele Android Entwickler:innen schon einmal gesehen und gefürchtet haben. Gradle-Build-Dateien von Android-Projekten neigen dazu, schnell groß, unübersichtlich und mit zu viel Boilerplate-Code überladen zu werden. Mit zunehmender Modularisierung der Projekte wiederholen sich auch immer mehr Dinge, sodass viele Build-Dateien gepflegt warden müssen. Um dieses Problem zu umgehen wurde vor einigen Jahren der buildSrc Ordner in Gradle-Projekten eingeführt. Dieser bringt jedoch seine eigenen Probleme mit sich, insbesondere längere Build-Zeiten aufgrund von Performance-Einbußen.
Daher ist ein neuer Ansatz notwendig.
Die Lösung
Die hier vorgestellte Lösung ist inspiriert von einem Blogartikel von Square und der von Google entwickelten App Now In Android.
Convention Plugins sind im Grunde eine Sammlung von Gradle-Plugins, die ein bestimmtes Feature Set oder eine Konfiguration durchführen, und im eigentlichen Projekt verwendet werden können. Die Plugins können in einem separaten Gradle-Projekt innerhalb des App Projekt Ordners erstellt werden, oder als Artefakt über ein (Maven) Repository ausgeliefert werden.
Die einzelnen Plugins
Die Plugins werden mit regulärem Kotlin Code geschrieben, und sehen zum Beispiel so aus:
So können weitere benötigte Gradle-Plugins angewendet, konfiguriert oder auch Abhängigkeiten zu Bibliotheken hinzugefügt werden. Anschließend wird das Plugin mit einer ID registriert, so dass es in den eigenen Modulen verwendet werden kann.
Die Plugins anwenden
Die selbst erstellten Convention Plugins können nun in den Feature-Modulen genutzt werden. Das Ergebnis sind deutlich aufgeräumtere Build-Dateien mit weniger Boilerplate-Code. Nach unseren empirischen Erfahrungen reduziert sich der Inhalt der einzelnen Build-Dateien um bis zu zwei Drittel.
Die Plugins sollten möglichst atomar geschnitten sein. Dadurch können bei der Anwendung pro Modul selektiv nur die Build-Features hinzugefügt werden, die für dieses Modul auch wirklich benötigt werden.
Fazit
Convention Plugins bieten große Vorteile bei der Entwicklung von modularen Android Apps. Neben der Vermeidung von sich wiederholendem Boilerplate-Code sorgen sie für eine bessere Übersichtlichkeit und Wartbarkeit, falls z.B. durch Gradle-Updates Änderungen vorgenommen werden müssen. Bietet man die Convention Plugins als Artefakt an, ergibt sich zudem ein Standard für Build-Prozesse, der Ordnung und Struktur in viele parallel laufende Projekte bringt und Synergieeffekte nutzt.
Predictive Back Gesture
Die Navigation innerhalb einer App ist ein elementarer Bestandteil der Entwicklung. Die Navigation zur vorherigen Ansicht ist wahrscheinlich die am häufigsten verwendete Navigation. In den letzten Jahren hat sich im Android-Ökosystem einiges getan. Neben der Einführung der gestenbasierten Navigation ist die neueste Entwicklung die Predictive Back Gesture. Dieses System ermöglicht es Android, die nachfolgende Navigation bereits vor der ausgeführten Aktion zubestimmen. So kann die Geste der Nutzer:innen zur Steuerung von Animationen verwendet werden.
Im direkten Vergleich kann so ein Übergang geschaffen werden, der die Geste der Nutzer:innenn begleitet und so bereits während der Aktion verdeutlicht, was passieren wird.
Ohne Predictive Back
Mit Predictive Back
Implementierung
Dieses neue System wird durch eine neue Komponente im Android SDK namens OnBackAnimationCallback ermöglicht. Dieser Callback informiert über drei Methoden über den aktuellen Status der Zurück-Geste.
Hinweis: Auch wenn dieser Callback erst in Android 14 eingeführt wurde, muss man sich nicht darum kümmern, solange man den OnBackDispatcher der androidx.activity Bibliothek verwendet.
Natürlich gibt es von der androidx.activity.compose Bibliothek auch eine Variante, die wir mit Compose nutzen können.
Jetzt muss dieser PredictiveBackHandler nur noch an die eigene Architektur angebunden werden. Für alle, die die Bibliothek Jetpack Navigation verwenden, ist nichts weiter zu tun, alsauf eine Version größer oder gleich 2.8.0-alpha02 zu wechseln. Danach wird der PredictiveBackHandler automatisch verwendet.
Das Ergebnis könnte dann beispielsweise wie in der obigen Animation aussehen. Der genaue Übergang hängt von der Konfiguration des NavGraph ab.
Was aber, wenn man eine andere Navigation verwendet? Oder wenn man die Geste einfach so auf seinem Screen verwenden möchte?
Dazu können wir uns eine fiktive Implementierung eines NavHosts überlegen und an diesem Beispiel die Integration des PredictiveBackHandler veranschaulichen.
Eine Besonderheit ist die Verwendung des SeekableTransitionState. Diese Komponente ist ein spezieller TransitionState, der nicht nur von einem Start- zu einem Zielzustand animiert werden, sondern auch auf einen bestimmten Fortschritt gesetzt werden kann. Diese Eigenschaft können wir uns nun in der BackHandler-Funktion zunutze machen.
Hinweis: Diese Implementierung ist unvollständig und soll beispielhaft einen kleinen Teil dessen darstellen, der für eine vollständige Implementierung der Predictive Back-Geste notwendig wäre.
Weitere Beispiele
Shared Element
Custom shader
(RGB dissolve)
Clipping with special shape
Default Material component
(Bottomsheet in this case)