
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
- Pilih perpustakaan Kotlin Mobile Shared

- Selanjutnya

- 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

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

- Struktur proyek, ubah nama paket dari
sample
habr.example

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

- Jalankan dari terminal
./gradlew publishToMavenLocal

- Setelah itu, di repositori maven lokal, kita akan memiliki 4 folder tempat perpustakaan kita berada

Bagian 2
Membuat Aplikasi Android
Buat proyek android
Semuanya standar di sini. - Pada saat penulisan, proyek sedang dihasilkan dengan ketergantungan "rusak", jadi kami menghapusnya pada akhir
jre7
, kami mendapatkan koltin-stdlib
, setelah itu proyek mulai membangun

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

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

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

- Di
MainActivity.kt
cukup atur teks di TextView
ini

- Hebat, saat ini kami memiliki aplikasi Android yang dapat menggunakan fungsi
hello()
dari library kami
Bagian 3
Buat proyek iOS
- Memilih Aplikasi Tampilan Tunggal

- 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


- 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

- 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
- Buka proyek melalui file
Awesome App.xcworkspace

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

- Pilih Target

- Dan untuk Target ini kita tambahkan biner

- Pilih Tambah Lainnya

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


- Sekarang dalam proyek
framework
ini harus ditampilkan

- Pergi ke
Build Settings
dan nonaktifkan Enable Bitcode

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

- 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

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

- Tambahkan
Script Phase
baru

- 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

- Kami mendorong
build phase
kami ke atas, tepat setelah target dependencies

- Sekarang buka
ViewController
dan tambahkan panggilan ke fungsi kami dari perpustakaan

- Kami meluncurkan proyek kami dan melihat

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
- Pergi ke folder root di mana semua proyek kami berada dan lakukan
flutter create -t module flutter_ui

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

- Buka file build.gradle dan tambahkan proyek kami tergantung

MainActivity.kt
menjadi FlutterActivity

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

- Ubah manifes dan katakan bahwa kita sekarang memiliki kelas untuk
Application

- Pastikan untuk menambahkan
java8
, tanpa flutter ini tidak akan mulai

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


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

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

- Kami mendapatkan

Bagian 5
Menambahkan Flutter ke Aplikasi iOS
- 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)


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

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
- 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

AppDelegate
kami dengan FlutterAppDelegate

- Perbarui
ViewController

- Bungkus
ViewController
kami di NavigatorController

- Sekarang aplikasi dimulai. Tapi, untuk saat ini, kami tidak memiliki koneksi antara perpustakaan dan bergetar

- Tambahkan tautan ini menggunakan
FlutterMethodChannel

- 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
- kelompok proyek
- bergetar-ui
- ios
- android
- perpustakaan umum
Daftar tautan yang membantu saya, tetapi tidak langsung
- Dirinya bergetar
- Hubungan antara kode asli dan UI bergetar saluran-saluran
- Tambahkan bergetar ke aplikasi github yang ada
- Ikhtisar asli Kotlin