Search for:

Android-Arsenal – Kotlin

Eine einfache Android-Vorlage, mit der Sie erstellen k├Ânnen Android Projekt schnell.

Wie benutzt man ­čĹú

Einfach anklicken Schaltfl├Ąche, um ausgehend von dieser Vorlage ein neues Repo zu erstellen.

Fassung komponieren ÔşÉ

F├╝r die Compilation-Version, die sich in Entwicklung befindet, wechseln Sie zu Funktion / Montage Ast.

Eigenschaften ­čĽ╣

In Entwicklung ­čÜž

  • CI hinzuf├╝gen
  • Verwenden Sie Kotlin-DSL
  • F├╝gen Sie Espresso, Instrumentierung und Komponententests hinzu. Um einige der ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Verwenden Sie Animationen. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Verwenden Sie Griff. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Migrieren nach Griff 2.31. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Verwenden Sie Paging V3. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Verwenden Sie ViewBinding. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Migrieren nach JetPack Compose
  • Verwenden Sie den Detektor. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Quark hinzuf├╝gen und flie├čen lassen. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Ersetzen Sie die DataStore-Einstellungen. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • Migrieren Sie von RxJava 2 zu RxJava 3. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.
  • F├╝gen Sie einen benutzerdefinierten Rx-Adapter hinzu, um die Netzwerkantwort zu verarbeiten. Um die ├änderungen anzuzeigen, klicken Sie auf Hier.

KI ­čĆş

Diese Vorlage wird verwendet GitHub-Aktionen als CI.

Verf├╝gbare Workflows sind wie folgt aufgelistet:

Aufgaben ­čöž

  • Gradle-Arzt: dependencyUpdates – Zeigt Abh├Ąngigkeitsaktualisierungen f├╝r das Projekt an.
  • Erkennen: detektAll – Statische Analyse des Kotlin-Codes f├╝r das gesamte Projekt auf einmal ausf├╝hren.

Verweise ­čžĚ

Beitrag ­čĄŁ

F├╝hlen Sie sich frei, ein Problem zu ├Âffnen oder eine Auszahlung f├╝r Fehler / Verbesserungen zu beantragen.

Das Ergebnis ­čô║

Komponieren

Lizenz ÔÜľ´ŞĆ

Kotlin Multiplatform Mobile und So teilen Sie ViewModel: Ein Architekturvorschlag L├Ąhde: Federico Torres | Januar 2022

  • iOS und Android: Diese Module enthalten iOS- und Android-Anwendungen (Xcode- und Android Studio-Projekte). Der Gro├čteil des Codes sollte nur aus SwiftUI und ComposeUI bestehen.
  • Kotlin teilt den Code: Dies ist ein Modul, das das KMM-Projekt enth├Ąlt, hier werden wir unsere Gesch├Ąfts- und Pr├Ąsentationslogik implementieren. Der Kern unserer App wird also hier sein.
  • Zwiebel: Dies ist die KMM-Bibliothek, die ich erstellt habe und die wir als Abh├Ąngigkeit zu unserem gemeinsamen Code hinzuf├╝gen werden.

Bogen ist eine kleine und leichtgewichtige Kotlin-Multiplattform-Bibliothek, die uns bei der Architektur mobiler Anwendungen hilft, sie basiert auf der Spotify Mobius-Bibliothek, aber anstatt sich auf RxJava zu verlassen, verl├Ąsst sie sich auf Roots, SharedFlow ich StateFlow

Wir werden die grundlegenden Konzepte der Bibliothek wiederholen, ich werde einige Themen auslassen, wie z Veranstaltungen und Umgang mit Fehlern nur der Einfachheit halber.

Hauptmerkmale:

  • Fluss in eine Richtung
  • Einfache Zustandsverwaltung
  • Jetpack-Unterst├╝tzung ViewModel (unter Verwendung des tats├Ąchlichen / erwarteten Protokolls)

Anwendungsablauf mit Arch

Dieses Diagramm zeigt, wie die Komponenten in dieser Architektur interagieren, schauen wir uns jede von ihnen an und geben eine kurze Erkl├Ąrung:

  • Aktionen: action ist eine Anforderung, den Status der Anwendung (oder eines Teils davon) zu ├Ąndern, Aktionen werden von iOS- und Android-Code gesendet.
  • Aktualisieren: Sie k├Ânnen sich das Update als reine Funktion vorstellen, die die Aktion und den aktuellen Zustand entgegennimmt und den neuen Zustand wiederherstellt. Neben der ├änderung der Bedingung hat Updater Ich kann senden Nebenwirkungen ich Veranstaltungen
  • Nebenwirkungen: Im Allgemeinen ist ein Nebeneffekt eine Operation, die einen Zustand au├čerhalb seiner lokalen Umgebung in unserer Architektur ├Ąndert Nebenwirkungen sind Operationen wie HTTP-Anforderungen, Datenbanktransaktionen oder beliebige I/O-Operationen.
  • Prozessor: der Prozessor ist das Element, das er verarbeitet Nebenwirkungen ist f├╝r die Ausf├╝hrung einer Datenbanktransaktion, einer HTTP-Anfrage oder irgendetwas Empfangenem verantwortlich Nebenwirkung solltest. Wenn die Aufgabe abgeschlossen ist (erfolgreich oder nicht), sendet der Prozessor eine neue Aktion um den Status zu aktualisieren.

Lassen Sie uns in den eigentlichen Code eintauchen, wir werden eine sehr einfache Anwendung f├╝r Filme mit dieser vorgeschlagenen Architektur schreiben film db api

Schritte

  • Definiere den Zustand
  • Definieren Aktionen
  • Nebenwirkungen definieren
  • Erstellen Sie ein Ansichtsmodell
  • Implementieren Updater
  • Implementieren Prozessor
  • Beobachten Sie die Zustands├Ąnderungen in den Ansichten SwiftUI und ComposeUI.

Mit Ausnahme des letzten werden alle diese Schritte in unserem gemeinsamen Valley-Modul implementiert.

Zustand

F├╝r diese App m├╝ssen wir nur zwei Dinge in unserem Zustand speichern:

  • Liste der Filme
  • Ausgew├Ąhlter Film, da wir die Details des Films anzeigen m├Âchten, wenn der Benutzer ihn in der Liste ber├╝hrt.

Aktionen

Wir brauchen nur drei Aktionen:

Die ersten beiden Aktionen werden an Benutzerereignisse gesendet (z. B. Ber├╝hren oder ├ľffnen einer App), die letzte wird gesendet Prozessor wenn wir eine Antwort von der API erhalten.

Nebenwirkungen

Wir haben eine Single Nebenwirkung: Holen Sie sich eine Liste von Filmen. Wir k├Ânnten festlegen, auf welcher Reihe von Dispatchern oder Cornets wir laufen m├Âchten Nebenwirkungwird standardm├Ą├čig verwendet viewModelScope auf Android und benutzerdefinierter Bereich auf iOS

Updater

Hier entscheiden wir wie Wir wollen den Zustand basierend auf der empfangenen Aktion ├Ąndern, wir m├╝ssen eine Klasse erstellen, die implementiert Updater Schnittstelle, die nur eine Methode hat, die einen neuen Zustand und (vielleicht) einen neuen zur├╝ckgibt Nebenwirkungen eingewickelt in a N├Ąchste Objekt.

Beachte das Filme abrufen () Methode gibt a zur├╝ck N├ĄchstesErgebnis ein Objekt, das a enth├Ąlt Nebenwirkung, besonders Filme laden eins. So Prozessor werden ├╝ber diesen neuen Beitrag benachrichtigt Nebenwirkung und f├╝hrt eine HTTP-Anforderungsoperation aus

Prozessor

Jetzt m├╝ssen wir umsetzen Prozessor Schnittstelle die eine einzigartige Suspend-Funktion hat, die die Aktion wiederherstellt.

TMDApi Klasse ist daf├╝r verantwortlich, HTTP-Anforderungen zu erstellen, um Filme abzurufen, und json-Antworten in eine Reihe von Filmen umzuwandeln. Es ist uns egal, wie es implementiert wird, aber wenn Sie neugierig sind, k├Ânnen Sie sich jederzeit das vollst├Ąndige Democode-Repository unter der Haube ansehen von Ktor verwendet.

Sobald wir die Liste der Filme erhalten haben, senden wir einfach eine Aktion, um sie im Status zu speichern.

ViewModel

Wir haben es fast geschafft, jetzt m├╝ssen wir all diese Klassen, die wir implementiert haben, zusammenf├╝hren ViewModel die erben m├╝ssen ArchViewModel

Ja! das ist unser ganzer Code ViewModel braucht.

Beachten Sie, dass wir den Anfangszustand und den Anfangseffekt eingestellt haben.

Beobachten Sie Änderungen in der Situation

Der letzte Schritt, beobachten Sie einfach die Zustands├Ąnderung! aber wie?

ArchViewModel entlarvt a Flie├čen die alle Zustands├Ąnderungen ausgibt, also m├╝ssen wir sie nur sammeln.

Auf Android sammeln a Flie├čen ist einfach, aber nicht so einfach auf iOS, daher implementiert die Arch-Bibliothek Folgendes FlowWrapper

Wenn Sie eine bessere L├Âsung f├╝r dieses Problem des Sammelns von Kotlina haben Flie├čt aus Swift-Code, ich w├╝rde ihn gerne lesen.

Schauen wir uns den endg├╝ltigen Code an:

Und das ist alles! Denken Sie daran, dass es sich um einen vollst├Ąndigen Code handelt Hier

Aus der Perspektive von Android-Entwicklern ist die Entwicklungserfahrung mit KMM (und diesem Ansatz) so ziemlich die gleiche wie bei der reinen Entwicklung von Android. Aber f├╝r iOS-Entwickler ist die Erfahrung nicht so gut wie f├╝r Android-Entwickler, auf iOS m├╝ssen wir uns um Dinge wie Gleichzeitigkeit k├╝mmern, Unver├Ąnderlichkeitsausnahme und andere Inkompatibilit├Ątsprobleme, die auftreten k├Ânnen.

Jetbrains ist sich dieser Probleme bewusst und arbeitet daran, das Erlebnis f├╝r iOS-Entwickler zu verbessern. Am 31. August 2021 haben sie eine Vorschauversion ver├Âffentlicht neuer Speichermanager Dies sollte uns von der Notwendigkeit befreien, Artikel einzufrieren.

Diese Architektur eignet sich hervorragend f├╝r Teams, die gro├če native Apps f├╝r iOS und Android verwalten, insbesondere wenn die Entwickler in Ihrem Team ├╝ber Kenntnisse beider Plattformen verf├╝gen.

Normalerweise haben iOS- und Android-Versionen derselben Anwendung unterschiedliche Architekturen wie MVC, MVP, MVVM, VIPER oder Redux. Die Beibehaltung derselben Architektur auf beiden Plattformen hat viele Vorteile, erfordert weniger Arbeit und hilft, Aufgaben besser auf Ihr Team zu verteilen, sogar Entwickler k├Ânnen dies tun sehr einfach auf beiden Plattformen funktionieren.

Alles in allem glaube ich nicht, dass es die perfekte L├Âsung gibt, jedes Team muss sich ├╝berlegen, welche f├╝r seine Bed├╝rfnisse am besten geeignet ist.