Flutter 三天搞定混合開發持續化集成平臺(一)
前言: Flutter目前在客戶端的生態中以一個快速大面積覆蓋的情況下,如何做到能快速穩定的集成到我們現有的工程,這一系列的文章就以這個命題為大家做一些分享。
目錄:
(一)Flutter編譯產物,Native如何集成
(二)plugin 快速集成篇
(三)版本控制篇
Flutter編譯產物,Native如何集成
我們新建一個Flutter工程,執行 flutter build 命令。
aar Build a repository containing an AAR and a POM file.
aot Build an ahead-of-time compiled snapshot of your app's Dart code.
apk Build an Android APK file from your app.
appbundle Build an Android App Bundle file from your app.
bundle Build the Flutter assets directory from your app.
ios Build an iOS application bundle (Mac OS X host only).
-iOS
flutter build ios
demo_job/build/ios/Release-iphoneos/Runner.app/Frameworks/App.framework
下會生成對應的編譯framework產物
App.framework 是我們需要的對應的Flutter 業務代碼產物部分,當然我們還需要引入Flutter engine部分,Flutter.framework.
獲取這兩個編譯產物后就能正常引入至我們的iOS工程,屆時iOS混入Flutter功能
-Andriod
flutter build apk
在對應的文件夾下面會生成對應的lib.jar文件,但此時還缺少Flutter engine對應產物,我們需要到對應版本內dart tool 文件內獲取對應的flutter.jar部分。
"flutter/bin/cache/artifacts/engine/android-arm-release/flutter.jar"
Android項目再引入對應的資源部分(images這些資源文件)
到這個一步我們Android項目也能正常使用Flutter功能。
優化改進
如果作為一個程序員能接受這種【人工智能】方式接入Flutter的部分的話,我們可能要招兩個小伙伴(iOS、Android)單獨負責打包接入,比較繁瑣移植性差
改進點:
- 自動持續化集成
- 遠端發布編譯產物部分
1.1 針對如何進行自動化持續化集成,CI框架/jenkins+webhook 方式都可以很好的解決自動持續集成
1.2 使用腳本代碼代替【人工智能】方式
目前完成上訴部分后我們可能可以比較優雅的接入Flutter至Native工程之中,我們解決了繁瑣部分的問題但是并沒有解決了可移植性的問題。
對于移植性這個問題我們該如何解決?這個問題其實一直在客戶端開發中存在,功能模塊如何做到復用,不通工程移植性好。當然是組件化了~
-iOS
遠端發布選擇Cocoapods方式引入,產物pod庫
iOS 工程 pod 直接依賴這個工程pod庫,但是這樣子缺少版本控制,我們需要對不通的版本功能開發迭代進行把控,因此我們還需要將這個pod發布到我們的對應的組件pod庫
-Android
同理對應Android項目我們也是希望直接一句代碼配置接入Flutter。選擇maven作為遠端發布的工具,上傳我們對應的aar包,項目直接依賴 flt-business.aar 。
但是我們發現目前我們能獲取到的Android的產物是 libs.jar 文件而不是aar。所以我們要做到如何生成aar文件(包含lib.so flutter.so 資源文件),通過gradle uploadArchive方式上傳到我們自己的maven庫。
- 新建packageflutter library module 來生成aar
- gradle buildFlutterPlugin 進行dependency flutter jar ,資源文件的依賴
- 執行uploadArchive 上傳至我們的maven 庫
總結
該文章是記錄自己從接觸Flutter后一步一步接入到native的歷程,一步一步踩坑總結出的經驗,當然只是完成這些步奏我們在快速開發flutter項目的時候還是不能完全完成 自動 持續 混合等概念,因為flutter項目還有個plugin概念,native 插件部分,這些也是要完成持續集成部分,在后面的文章我會帶來如何完成這一部分的持續集成部分。
Q&A
1.為什么iOS不需要引入資源文件buAndroid需要,可以觀察發現App.framework中我們已經有資源文件部分了,而lib.jar中并不存在對應的資源文件,因此我們需要自己再引入一次