Flutter項目實戰(zhàn):方案有三
- 純Flutter項目勺鸦,需要投入大量人力進入到Flutter編程中荚孵,且現有原生項目需要完全摒棄
- Flutter項目混編爷辙,暫且不說Flutter所支持的框架左权,與原生交互的坑也暫時還沒有填完拘领,且Flutter一旦更新,需要手動進行更新后重新放入原生項目烫罩,對現有原生操作較多掘鄙,代價較大
- Flutter項目組件化,iOS通過cocoapods引入嗡髓,安卓通過aar包引入操漠,對現有原生項目影響不大
也就可以看出最簡單的方法就是將Flutter項目進行相對應打包,產生產物分別對應iOS和安卓進行組件化生成饿这,也就完成了Flutter現有項目的開發(fā)浊伙,同時也不會對現有原生項目產生較大影響的方法是最為可行的。
現新創(chuàng)建一個Flutter項目
新建一個文件夾长捧,用于放置Flutter項目嚣鄙,進入后,運行
flutter create -t module my_flutter
完成后會在文件夾中生成一個my_flutter文件串结,進入my_flutter文件中哑子,運行
flutter packages get
繼續(xù)運行
flutter run
如果此時可以顯示界面,說明創(chuàng)建Flutter沒有問題肌割,這里不做過多贅述卧蜓,詳細可以看 Flutter官網
iOS打包產物
通過以上命令,生成了對應的Flutter項目文件后把敞,我們本需要通過build命令來一步步生成iOS產物弥奸,這里通過一個我寫的shell腳本來做這些步驟
#前提flutter一定要是app項目: pubspec.yaml里 不要加
#module:
# androidPackage: com.example.myflutter
# iosBundleIdentifier: com.example.myFlutter
echo "Clean old build"
find . -d -name "build" | xargs rm -rf
flutter clean
echo "開始獲取 packages 插件資源"
flutter packages get
echo "開始構建 release for ios"
flutter build ios
echo "構建 release 已完成"
echo "開始 處理framework和資源文件"
rm -rf build_for_ios
mkdir build_for_ios
cp -r build/ios/Release-iphoneos/*/*.framework build_for_ios
cp -r .ios/Flutter/App.framework build_for_ios
cp -r .ios/Flutter/engine/Flutter.framework build_for_ios
cp -r .ios/Flutter/FlutterPluginRegistrant/Classes/GeneratedPluginRegistrant.* build_for_ios
#下一步處理 如何自動生成podspec
#下下一步處理 如何自動發(fā)布pod
這里聲明一下,Flutter在1.2.1版本之后奋早,把flutter_assets文件放入到了App.Framework中盛霎,所以這里無需進行相關操作,執(zhí)行上述腳本耽装,會在同級目錄下獲得一個文件夾
文件夾包含三個產物愤炸,即Flutter.framework,App.Framework以及GeneratedPluginRegistrant類文件(用于調用注冊Flutter引擎)
生成這幾個產物后掉奄,iOS的Flutter編譯暫時到此為止规个。
iOS cocoapods私有庫制作
一、遠程私有索引倉庫
1挥萌、在github上面創(chuàng)建一個倉庫绰姻,用來存放索引文件。以后使用CocoaPods查找私有組件也是從這里獲取引瀑。創(chuàng)建后在本地新建一個文件夾狂芋,使用git命令進行相關git的init等操作,不做贅述
2憨栽、本地鏈接遠程索引倉庫
- 查看本地倉庫
pod repo
- 添加遠程索引倉庫
pod repo add 倉庫名 倉庫SSH(HTTPS)地址
- 驗證是否添加成功
pod repo
二帜矾、創(chuàng)建一個自定義組件遠程代碼倉庫
1翼虫、創(chuàng)建一個文件夾,用來保存要制作的組件代碼倉庫
2屡萤、創(chuàng)建pod的一個git本地倉庫珍剑,終端cd至該文件夾下
3、創(chuàng)建代碼倉庫
pod lib create 倉庫名
會進行幾個問題的回答死陆,創(chuàng)建成功后招拙,會自動彈出項目
此時再回到之前flutter打包iOS運行腳本后生成的build_for_ios文件夾,開始將產物加入
注意措译,該步驟關系到pod能否成功install且項目能否運行1鸱铩!领虹!
將產物的GeneratedPluginRegistrant類文件放到Classes文件夾內规哪,同時在Classes文件夾同級手動創(chuàng)建一個Frameworks文件夾,將App.framework和Flutter.framework框架放入塌衰,然后
打開podspec文件
配置如圖所示诉稍,根據自己的倉庫地址進行相關配置,然后cd到剛才生成的pod的demo文件夾中最疆,即Example文件夾
運行
pod install
后會生成如上圖所示杯巨,這些文件都放入成功,那么到這一步肚菠,Flutter生成的產物就成功導入你的私有庫中了舔箭,接下來就是pods庫的操作
回到放置podspec文件所在目錄,關聯上你的遠程代碼倉庫蚊逢,然后進行
git add .
git commit -m '上傳代碼'
git push
將代碼上傳后,標記tag
git tag 0.1.0
git push --tags
注意這里的tag要和你的podspec文件中的版本version要一致箫章,podspec離得s.name要和你的文件夾的名字保持一致烙荷,否則pod會驗證失敗
運行
pod spec lint
驗證成功后如上圖所示,我這里使用的是另一個pod私有庫檬寂,其他驗證出來的問題自行百度终抽,這里不做贅述
驗證成功后,即可上傳到私有庫
pod repo push <索引庫名> <podspec文件名>
注:如果有警告上傳報錯可以用下面的方法
pod repo push <索引庫名> <podspec文件名> --allow-warnings
到了這一步桶至,如果上傳成功昼伴,會顯示
到此cocoapods私有庫創(chuàng)建上傳完成。
三镣屹、創(chuàng)建一個demo工程(即現有的原生工程)
在podfile文件中添加
# 遠程私有索引地址(這里就是之前所創(chuàng)建的索引倉庫所在的地址)
source 'https://...'
# 公共庫索引
source 'https://...'
一定要添加公共庫索引圃郊,即https://github.com/CocoaPods/Specs.git,因為項目中其他的三方庫是通過cocoapods查找女蜈,如果不添加持舆,cocoapods通過私有庫是找不到你的其他的庫的色瘩,然后
pod install
完成后,調用flutter界面逸寓,即可看到你的flutter編寫的界面
Have done居兆!
注意:
1、flutter更新1.9版本之后竹伸,由于會對Flutter.Framework進行簽名泥栖,無法編譯成功,需要將sdk版本切換為master分支版本勋篓,編譯成功后聊倔,新版本的flutter clean命令會將.ios文件刪除,所以腳本中打包時候生巡,flutter clean命令需要去除
2耙蔑、如果你的工程添加了flutter_boost組件,當前最新版本是1.5.4孤荣,如果你升級了flutter甸陌,那么就先退回去吧,flutter_boost暫不支持1.8以上的flutter版本盐股,否則無法編譯通過
3钱豁、由于本人之前未更新flutter1.7.8版本,用的是1.5.4版本疯汁,所以此次本人回退至1.7.8版本也著實踩了不少的坑牲尺,flutter的release build ios會自動生成armv7,需要去除幌蚊,否則引入了flutter_boost的同學會打不出release包的