
Eintrag
Hallo an alle. Vor einiger Zeit habe ich beschlossen, mein Projekt gleichzeitig für Android und iOS zu erstellen. Natürlich stellte sich die Frage nach der Wahl der Technologie. Ein paar Wochen habe ich mir die beliebten Stacks angesehen und Kotlin / Native gewählt. Da ich ein Android-Entwickler bin, bin ich schon lange mit Kotlin vertraut, aber es gab nicht viel Erfahrung mit Swift und ich wollte den größten Teil des Codes für beide Plattformen gemeinsam haben. Daher stellte sich sofort die Frage, wie man eine Benutzeroberfläche für iOS schreibt. Ein kurzer Blick auf den Markt deutete darauf hin, dass es Flutter gibt, mit dem Sie die Benutzeroberfläche für zwei Plattformen gleichzeitig schreiben können. Eigentlich begann diese Geschichte.
Dieser Artikel beschreibt Flatters Build-Erfahrung als Benutzeroberfläche und Kotlin für die Kernlogik. 
Wichtig: Unter der Katze befinden sich viele Bilder und Anweisungen zum Zusammenbau des Projekts
Inhaltsverzeichnis
Teil 1
Erstellen einer gemeinsam genutzten Bibliothek auf Kotlin
- Wählen Sie Kotlin Mobile Shared Library
 
  
- Weiter
 
  
- Geben Sie unseren Arbeitsordner an. Hier habe ich einen separaten Ordner für das Projekt erstellt. Da ich 4 verschiedene Projekte haben werde und es bequemer ist, sie an einem Ort aufzubewahren
 
  
- Es bleibt der Pfad zu sdk.dirinsdk.dirund das Projekt beginnt zu erstellen. Ich habe den Pfad/Users/vlad/Library/Android/sdk
 
  
- Projektstruktur, ändern Sie die Paketnamen von samplehabr.example
 
  
- Es ist Zeit zu veröffentlichen, Call wrapper. Danach erscheint die .gradlew-.gradlewin unserem Projekt und es ist möglich, vom Terminal aus damit zu arbeiten
 
  
- Führen Sie das Terminal aus ./gradlew publishToMavenLocal
 
  
- Danach haben wir im lokalen Maven-Repository 4 Ordner, in denen unsere Bibliotheken liegen
 
  
Teil 2
Erstellen einer Android-Anwendung
Erstellen Sie ein Android-Projekt
- Zum Zeitpunkt des Schreibens wird das Projekt mit einer "defekten" Abhängigkeit generiert. jre7wir es am Ende vonjre7, erhalten wirkoltin-stdlibbeginnt das Projekt mit der Erstellung
 
  
- Öffnen Sie build.gradleund fügen SiemavenLocalAbschnittrepositories. Wichtig! Der Abschnitt "repositories" sollte sich inallprojectsund nicht inbuildScript
 
  
- Jetzt können wir unsere Bibliothek als Abhängigkeit hinzufügen
 implementation 'habr.example:commonLibrary-jvm:0.0.1'
 
  
- Wir öffnen activity_main.xmlund geben in derTextViewIDmain_activity_text
 
  
- In MainActivity.ktlegenMainActivity.kteinfach den Text in dieserTextView
 
  
- Großartig, zu diesem Zeitpunkt haben wir eine Android-Anwendung, die die Funktion hello()aus unserer Bibliothek verwenden kannhallo () auf dem emulator 
Teil 3
Erstellen Sie ein iOS-Projekt
- Auswählen einer Einzelansicht-App
 
  
- Geben Sie die grundlegenden Informationen ein und wählen Sie den Ordner aus. Es ist wichtig, den Ordnerstamm für unsere anderen Projekte auszuwählen, da Xcode darin einen Unterordner mit dem Namen des Projekts erstellt
 
  
 
  
- CocoaPodsSie zuerst- CocoaPods. Führen Sie dazu- pod initim Projektordner aus, schließen Sie das Projekt in- Xcodeund führen Sie die- pod install. Wir sehen, dass die Installation erfolgreich abgeschlossen wurde
 
  
- Wichtig! CocoaPodsempfiehlt nicht, den Ordner/Podszu.gitignore, aber ich habe es trotzdem getan. Da wir nach dem Hinzufügen vonflutterAbhängigkeiten für jedenbuildneu konfigurieren. Bisher gefällt mir diese Lösung mehr als das Verstopfen von.git
- Öffnen Sie das Projekt über die Datei Awesome App.xcworkspace
 
  
- Wir öffnen das Terminal, gehen in den Ordner unserer commonLibraryund führen./gradlew linkDebugFrameworkIos. Danach wirdiOSFrameworkin unserembuildOrdneriOSFramework
 
  
- Wählen Sie Ziel
 
  
- Und für dieses Ziel fügen wir die Binärdatei hinzu
 
  
- Wählen Sie Andere hinzufügen
 
  
- Geben Sie den Pfad zu dem framework, das Sie in Schritt 6 erhalten haben (commonLibrary.framework).
 
  
 
  
- Jetzt im Projekt sollte dieses frameworkangezeigt werden
 
  
- Gehen Sie zu Build Settingsund deaktivieren SieEnable Bitcode
 
  
- Jetzt müssen Sie genau angeben, wo nach unserem frameworkgesucht werden soll, und denFramework Search Pathöffnen
 
  
- Geben Sie den Pfad "${PODS_ROOT}/../../commonLibrary". Stellen Sie sicher, dass Sierecursivewählen. Natürlich können Sie darauf verzichten, wenn Sie den Pfad genauer konfigurieren. Da dies jedoch nur der Anfang des Projekts ist, ist es jetzt wichtig, dass wir sicherstellen, dass dieser ganze Haufen funktioniert. Und wir können den Weg ändern und dann
 
  
- Wir müssen sicherstellen, dass bei jedem buildinXcodeunserframeworkmitgradle. Öffnen SieBuild Phases
 
  
- Fügen Sie eine neue Script Phase
 
  
- Fügen Sie den Skriptcode hinzu.
 
  cd "${PODS_ROOT}/../../commonLibrary" echo $(pwd) ./gradlew linkIos
 
 Hier gehen wir einfach in den Projektordner unserer Bibliothek und führen./gradlew linkIos. Der Aufruf vonecho $(pwd)wird nur benötigt, um in der Konsoleecho $(pwd), in welchem Ordner wir uns befinden
 
  
- Wir verschieben unsere build phasedirekt nach dentarget dependenciesganz nach oben
 
  
- Öffnen Sie nun den ViewControllerund rufen Sie unsere Funktion aus der Bibliothek auf
 
  
- Wir starten unser Projekt und sehen
 
  
Das bedeutet, dass wir die Kotlin-Bibliothek korrekt mit dem iOS-Projekt verbunden haben.
Sie müssen nur noch Flattern als Framework für das Schreiben der Benutzeroberfläche in unsere Anwendungen einfügen, und Sie können mit der Entwicklung des Produkts beginnen
Teil 4
Hinzufügen von Flutter zu einer Android-App
Dann hat mir ein Artikel über 
Github sehr geholfen
- Gehen Sie zum Stammordner, in dem sich alle unsere Projekte befinden, und flutter create -t module flutter_ui
 
  
 
- Öffnen Sie settings.gradleund aktivieren Sie unser Flattermodul als Teilprojekt
 
  
 
- Öffnen Sie die Datei build.gradle und fügen Sie unser Projekt abhängig hinzu
 
  
 
- MainActivity.ktin- FlutterActivity
 
  
 
- Fügen Sie App.kt, in dem wirFlutterbeim Start der Anwendung initialisieren
 
  
 
- Ändern Sie das Manifest und sagen Sie, dass wir jetzt eine Klasse für die Application
 
  
 
- java8Sie sicher, dass Sie- java8hinzufügen, ohne dass dieses Flattern nicht startet
 
  
 
- Wir sehen die Benutzeroberfläche in den Hello from JVM- Protokollen, was bedeutet, dass wir die Benutzeroberfläche in Flutter und die Hauptbibliothek in Kotlin / Native zusammenstellen
 
  
 
  
 
- Fügen Sie MainActivity.kteine MethodeMainActivity.kt, die wir von Flutter aus aufrufen werden. Hier, auf einer Veranstaltung von Flutter, geben wir unserhello()aus der Kotlin-Bibliothek zurück
 
  
 
- main.dartder- main.dartCode- main.dart, der die Methode im- iOS/Android-Anwendung- main.dart
 
  
 
- Wir bekommen
  
 
Teil 5
Hinzufügen von Flutter zur iOS App
- Aktualisierung unserer Podfile
  flutter_application_path = File.expand_path("../flutter_ui", File.dirname(path)) eval(File.read( File.join( flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding)
 
  
 
  
- Es ist wichtig . Fügen Sie $(inherited)zur ersten Zeile derframework search paths. Stellen Sie sicher, dass Ihreframework search pathsnicht leer sind
 
  
 
 Wenn Sie die Abhängigkeiten insome/path/my_flutter/pubspec.yaml, müssen Sieflutter packages getfromsome/path/my_flutter, um die Abhängigkeiten inpodhelper.rbzu aktualisieren. Führen Sie danach diepod installuntersome/path/MyApp
- Füge 1 weitere Build Phase, nur für Flutter. Über dem, was wir in Teil 3 derScript phasehinzugefügt haben
 
  "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed
 
  
- AppDelegateunser- AppDelegatedurch- FlutterAppDelegate
 
  
- Aktualisieren Sie ViewController
 
  
- Wickeln Sie unseren ViewControllerin einenNavigatorController
 
    
- Jetzt startet die Anwendung. Derzeit haben wir jedoch keine Verbindung zwischen Bibliothek und Flattern  
- Fügen Sie diesen Link mit FlutterMethodChannel
 
  
 
- Großartig, jetzt verwendet die iOS-Anwendung flutterfür dieUIundkotlinfür diekotlin.
 
  
 
Fazit 
Was hier zu sagen ist: Ich behaupte nicht, dass Sie etwas Neues oder Einzigartiges gelernt haben. Ich habe gerade meine Erfahrungen geteilt, weil ich ungefähr 4 Arbeitstage verbracht habe, damit alles zusammenarbeitet. Und ich konnte keine Beispiele für Projektcode finden, der sowohl Kotlin / Native als auch Flutter verwendet
Abschlussprojekte
- Projektgruppe
- flattern-ui
- ios
- android
- gemeinsame Bibliothek
Liste der Links, die mir geholfen haben, aber nicht sofort
- Selbst flattern
- Die Beziehung zwischen nativem Code und UI- Flattern-Plattformkanälen
- Fügen Sie der vorhandenen Github- App ein Flattern hinzu
- Kotlin Native native-Übersicht