Aplikasi untuk iOS dan Android di Kotlin + Flutter UI

gambar

Entri


Halo semuanya. Beberapa waktu lalu, saya memutuskan untuk membuat proyek saya untuk Android dan iOS pada saat yang sama. Secara alami, muncul pertanyaan tentang pilihan teknologi. Beberapa minggu saya melihat tumpukan populer dan memilih Kotlin / Asli. Karena saya seorang pengembang Android, saya sudah lama mengenal Kotlin, tetapi tidak ada banyak pengalaman dengan Swift dan saya ingin mendapatkan sebagian besar kode yang sama untuk kedua platform. Karena itu, pertanyaan segera muncul, tetapi bagaimana menulis UI untuk iOS. Melihat pasar dengan cepat menunjukkan bahwa ada Flutter, yang memungkinkan Anda menulis UI untuk dua platform secara bersamaan. Sebenarnya, cerita ini dimulai.

Artikel ini menjelaskan pengalaman membangun Flutter sebagai UI dan Kotlin untuk logika inti. Penting: di bawah kucing ada banyak gambar dan instruksi tentang cara merakit proyek

Daftar isi



Bagian 1


Membuat perpustakaan bersama di Kotlin


  1. Pilih perpustakaan Kotlin Mobile Shared

    gambar
  2. Selanjutnya

    gambar
  3. Tentukan folder kerja kami, di sini saya membuat folder terpisah untuk proyek tersebut. Karena saya akan memiliki 4 proyek berbeda dan lebih mudah menyimpannya di satu tempat

    gambar
  4. Masih menentukan path ke sdk.dir di sdk.dir dan proyek mulai dibangun, saya memiliki path /Users/vlad/Library/Android/sdk

    gambar
  5. Struktur proyek, ubah nama paket dari sample habr.example

    gambar
  6. Saatnya untuk mulai menerbitkan, panggil wrapper . Setelah itu, .gradlew .gradlew akan muncul di proyek kami dan akan memungkinkan untuk bekerja dengannya dari terminal

    gambar
  7. Jalankan dari terminal ./gradlew publishToMavenLocal

    gambar
  8. Setelah itu, di repositori maven lokal, kita akan memiliki 4 folder tempat perpustakaan kita berada

    gambar

Bagian 2


Membuat Aplikasi Android


Buat proyek android

Semuanya standar di sini.

gambar

gambar

gambar

gambar

  1. Pada saat penulisan, proyek sedang dihasilkan dengan ketergantungan "rusak", jadi kami menghapusnya pada akhir jre7 , kami mendapatkan koltin-stdlib , setelah itu proyek mulai membangun

    gambar
  2. Buka build.gradle dan tambahkan mavenLocal repositories . Penting! Bagian repositories harus menjadi satu di dalam semua allprojects dan bukan di buildScript

    gambar
  3. Sekarang kita dapat menambahkan perpustakaan kita sebagai ketergantungan
    implementation 'habr.example:commonLibrary-jvm:0.0.1'

    gambar
  4. Kami membuka activity_main.xml dan kami tentukan di TextView id main_activity_text

    gambar
  5. Di MainActivity.kt cukup atur teks di TextView ini

    gambar
  6. Hebat, saat ini kami memiliki aplikasi Android yang dapat menggunakan fungsi hello() dari library kami
    halo () pada emulator
    gambar

Bagian 3


Buat proyek iOS


  1. Memilih Aplikasi Tampilan Tunggal

    gambar
  2. Isi informasi dasar dan pilih folder. Penting untuk memilih folder root untuk proyek kami yang lain, karena di dalamnya Xcode akan membuat subfolder dengan nama proyek

    gambar

    gambar
  3. Pertama, tambahkan CocoaPods . Untuk melakukan ini, jalankan pod init di folder proyek, tutup proyek dalam Xcode dan jalankan pod install . Kami melihat bahwa instalasi selesai dengan sukses

    gambar
  4. Penting! CocoaPods tidak merekomendasikan menambahkan folder /Pods ke .gitignore , tetapi saya tetap melakukannya. Karena setelah menambahkan flutter , kami akan mengkonfigurasi ulang dependensi untuk setiap build . Sejauh ini, saya suka solusi ini lebih dari penyumbatan .git
  5. Buka proyek melalui file Awesome App.xcworkspace

    gambar
  6. Kami membuka terminal, di dalamnya buka folder commonLibrary kami dan jalankan ./gradlew linkDebugFrameworkIos . Setelah itu, iOSFramework muncul di folder build kami iOSFramework

    gambar
  7. Pilih Target

    gambar
  8. Dan untuk Target ini kita tambahkan biner

    gambar
  9. Pilih Tambah Lainnya

    gambar
  10. Tentukan path ke framework yang Anda terima di langkah 6 ( commonLibrary.framework )

    gambar

    gambar
  11. Sekarang dalam proyek framework ini harus ditampilkan

    gambar
  12. Pergi ke Build Settings dan nonaktifkan Enable Bitcode

    gambar
  13. Sekarang Anda perlu menentukan dengan tepat di mana mencari framework kami, buka Framework Search Path

    gambar
  14. Tentukan jalur "${PODS_ROOT}/../../commonLibrary" . Pastikan untuk memilih recursive . Tentu saja, Anda dapat melakukannya tanpa ini, jika Anda mengkonfigurasi jalur dengan lebih akurat. Tetapi, karena ini hanyalah awal dari proyek, sekarang penting bagi kami untuk memastikan bahwa semua ini akan berhasil. Dan kita bisa mengubah cara lalu

    gambar
  15. Kita perlu memastikan bahwa dengan setiap build di Xcode framework kita framework menggunakan gradle . Buka Build Phases

    gambar
  16. Tambahkan Script Phase baru

    gambar
  17. Tambahkan kode skrip.

     cd "${PODS_ROOT}/../../commonLibrary" echo $(pwd) ./gradlew linkIos 

    Di sini kita cukup pergi ke folder proyek perpustakaan kita dan menjalankan ./gradlew linkIos . Panggilan echo $(pwd) hanya diperlukan untuk menampilkan di folder tertentu folder mana yang harus kita kunjungi

    gambar
  18. Kami mendorong build phase kami ke atas, tepat setelah target dependencies

    gambar
  19. Sekarang buka ViewController dan tambahkan panggilan ke fungsi kami dari perpustakaan

    gambar
  20. Kami meluncurkan proyek kami dan melihat

    gambar

Hebat, ini artinya kita menghubungkan Perpustakaan Kotlin dengan benar ke proyek iOS.
Yang tersisa adalah menambahkan flutter, sebagai kerangka kerja untuk menulis UI, ke dalam aplikasi kami dan Anda dapat mulai mengembangkan produk

Bagian 4


Menambahkan Flutter ke Aplikasi Android


Kemudian sebuah artikel tentang github banyak membantu saya

  1. Pergi ke folder root di mana semua proyek kami berada dan lakukan flutter create -t module flutter_ui

    gambar
  2. Buka settings.gradle dan aktifkan flutter-module kami sebagai sub-proyek

    gambar
  3. Buka file build.gradle dan tambahkan proyek kami tergantung

    gambar
  4. MainActivity.kt menjadi FlutterActivity

    gambar
  5. Tambahkan App.kt , di mana kita akan menginisialisasi Flutter saat startup aplikasi

    gambar
  6. Ubah manifes dan katakan bahwa kita sekarang memiliki kelas untuk Application

    gambar
  7. Pastikan untuk menambahkan java8 , tanpa flutter ini tidak akan mulai

    gambar
  8. Kita melihat UI di Hello dari log JVM , yang berarti bahwa kita mengumpulkan UI pada Flutter dan perpustakaan utama di Kotlin / Asli



    gambar
  9. Tambahkan metode ke MainActivity.kt yang akan kita panggil dari Flutter. Di sini, pada sebuah acara dari Flutter, kami mengembalikan hello() dari kotlin-library

    gambar
  10. Dan tambahkan kode ke main.dart yang akan memanggil metode di bagian iOS/Android- aplikasi

    gambar
  11. Kami mendapatkan


Bagian 5


Menambahkan Flutter ke Aplikasi iOS


  1. Memperbarui Podfile kami
     flutter_application_path = File.expand_path("../flutter_ui", File.dirname(path)) eval(File.read( File.join( flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')), binding) 

    gambar

    gambar
  2. Itu penting . Tambahkan $(inherited) ke baris pertama dari framework search paths . Pastikan untuk memeriksa bahwa framework search paths Anda tidak kosong

    gambar

    Ketika Anda mengubah dependensi di some/path/my_flutter/pubspec.yaml , Anda perlu menjalankan flutter packages get dari some/path/my_flutter untuk memperbarui dependensi di podhelper.rb . Setelah itu, jalankan pod install dari some/path/MyApp
  3. Tambahkan 1 Build Phase lainnya, hanya untuk Flutter. Di atas apa yang kami tambahkan di bagian 3 dari Script phase

     "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed 

    gambar
  4. AppDelegate kami dengan FlutterAppDelegate

    gambar
  5. Perbarui ViewController

    gambar
  6. Bungkus ViewController kami di NavigatorController

    gambar
  7. Sekarang aplikasi dimulai. Tapi, untuk saat ini, kami tidak memiliki koneksi antara perpustakaan dan bergetar
  8. Tambahkan tautan ini menggunakan FlutterMethodChannel

    gambar
  9. Hebat, sekarang aplikasi iOS menggunakan flutter untuk UI dan kotlin untuk logika utama.



Kesimpulan


Apa yang penting untuk dikatakan di sini: Saya tidak berpura-pura bahwa Anda telah mempelajari sesuatu yang baru atau unik. Saya baru saja membagikan pengalaman saya, karena untuk membuat semuanya bekerja bersama, saya menghabiskan sekitar 4 hari kerja. Dan saya tidak dapat menemukan contoh kode proyek yang menggunakan Kotlin / Native dan Flutter

Proyek akhir

  1. kelompok proyek
  2. bergetar-ui
  3. ios
  4. android
  5. perpustakaan umum

Daftar tautan yang membantu saya, tetapi tidak langsung

  1. Dirinya bergetar
  2. Hubungan antara kode asli dan UI bergetar saluran-saluran
  3. Tambahkan bergetar ke aplikasi github yang ada
  4. Ikhtisar asli Kotlin

Source: https://habr.com/ru/post/id437176/


All Articles