Flutter可以算是當(dāng)下最火熱的新技術(shù)之一,我現(xiàn)在所在團(tuán)隊(duì)也準(zhǔn)備將Flutter技術(shù)應(yīng)用到線上工程中。

成都創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元湖南做網(wǎng)站,已為上家服務(wù),為湖南各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
關(guān)于混合工程,官方文檔其實(shí)寫的已經(jīng)比較清楚了,按著文檔走一般問題不大,
但是有一點(diǎn)值得注意的是,F(xiàn)lutter工程引入的庫的gradle的 buildTypes 要與原工程保持一致,如果不一致需要手工添加。
進(jìn)入正題,現(xiàn)在Flutter官方默認(rèn)只提供armeabi-v7a、arm64-v8a、x86和x86-64,其中x86和x86-64是為模擬器準(zhǔn)備的。目前我們使用的SDK大部分只使用了armeabi架構(gòu),直接使用我們會(huì)遇見找不到 libflutter.so,libapp.so 的情況,所以我們需要對(duì)FlutterSDK做一定的改造。
首先我們要了解下Flutter編譯產(chǎn)物,因?yàn)椴煌姹井a(chǎn)物是不同的,這里我們只針對(duì)Flutter 1.9.1-hotfixes來說。除了資源文件之外,F(xiàn)lutter打包會(huì)生成兩個(gè)非常重要的so庫,他們分別是 libflutter.so,libapp.so 。其中 libflutter.so 是Flutter的SDK產(chǎn)物而 libapp.so 正是我們編寫的dart文件的產(chǎn)物。默認(rèn)情況下,這兩個(gè)文件都會(huì)出現(xiàn)在armeabi-v7a中,因此我們要作出對(duì)應(yīng)的改造。
libflutter.so 位于FlutterSDK中,這里順帶提一句,除了這對(duì)不同CPU架構(gòu),它還分為Debug版和Release版,它們的區(qū)別在于Debug是為JIT編譯方式打造的,體積較大而Release是為AOT編譯方式打造的,體積很小。對(duì) libflutter.so 的改造,只要將其移動(dòng)文件路徑即可,運(yùn)行以下腳本即可,此腳本來自美團(tuán)分享的Flutter文章。
移動(dòng)完了 libflutter.so 之后我們打包發(fā)現(xiàn), libapp.so 仍然會(huì)出現(xiàn)在armeabi-v7a中,所以第二部我們就是移動(dòng) libapp.so 。這個(gè)需要更改 flutter.gradle ,我們在 flutter.gradle 的45行可以看到如下定義,它定義了我們的環(huán)境。
在524行我們可以看到,abiValue的取值就是根據(jù)上述定義值。
所以結(jié)論很簡單,只要將
private static final String ARCH_ARM32 = "armeabi-v7a";
改為
private static final String ARCH_ARM32 = "armeabi";
就可以完成對(duì)與 libflutter.so 的移動(dòng)。
前期工作我們都做好了,打成aar就非常簡單了
直接使用 flutter build aar --target-platform android-arm
打出來后可以解壓檢查下 libflutter.so,libapp.so 是否都在armeabi文件夾下即可。
說完了armeabi適配問題,這里下說下有關(guān)于有關(guān)于FlutterBoost的接入。這個(gè)東西接入有兩點(diǎn)要注意。
在主app內(nèi)加上即可,常規(guī)操作,強(qiáng)制統(tǒng)一support包的版本號(hào)
注釋flutter.gradle第655行。因?yàn)榫幾g過程中,會(huì)去初始化插件項(xiàng)目的buildType下面的debug配置,而插件項(xiàng)目下并未配置debug,導(dǎo)致報(bào)錯(cuò)。
如果發(fā)現(xiàn)文章中有錯(cuò)誤或者有更好的解決方案歡迎指正留言,當(dāng)然如果本篇文章幫助你解決了問題,也不要吝嗇你的感謝。謝謝各位。
細(xì)心的開發(fā)者會(huì)發(fā)現(xiàn)flutter構(gòu)建的App體積比native的大一些,是什么原因造成App體積大呢?
其實(shí)flutter 在release時(shí)App體積和native的大小差不多,而debug時(shí)體積通常會(huì)大。debug版本體積較大是為了Hot reload和快速編譯。如果有flutter開發(fā)經(jīng)驗(yàn)的朋友都體驗(yàn)過,如果您修改一下App的背景顏色,只需save一下就可以立刻看到修改后效果。我稱之為“像藝術(shù)家一樣在創(chuàng)造App”,因此為了實(shí)現(xiàn)這些目標(biāo),提高開發(fā)的效率,debug將占用全部資源。而當(dāng)我們構(gòu)建release版時(shí),flutter又會(huì)采用AOT策略,提高App運(yùn)行效率,release版只打包必需的資源,因而體積又會(huì)減少。
另外,flutter團(tuán)隊(duì)也一直在尋找減小程序大小的方法。
在Flutter中,我們可以使用Image控件來顯示圖片,一般來講我們的圖片資源都來源于網(wǎng)絡(luò)或者本地圖片。
Flutter中的Image也是類似。
我們先來看看Image的構(gòu)造方法
下面我們來看看其常用的屬性
可以看到,其常用屬性跟前端中的css很像。
下面我們來簡單用一用Image控件
首先是必填參數(shù)image,它接收一個(gè)ImageProvider類型的值。ImageProvider是一個(gè)抽象類,他下面有下圖這些實(shí)現(xiàn)類,由下面這些實(shí)現(xiàn)類可以看出,image是可以從資源,內(nèi)存,網(wǎng)絡(luò),和文件中獲取圖片。
我們先來試試加載網(wǎng)絡(luò)圖片
首先看看NetworkImage構(gòu)造方法,很簡單,傳個(gè)url就可以了
如下:
嗯,就是這么簡單。其他3種情況使用也是類似的,自行看源碼即可。
實(shí)際上,F(xiàn)lutter給我們提供了擴(kuò)展方法,使用起來更加簡單,通常我們直接使用提供的擴(kuò)展方法即可
如下
可以看到,他們的構(gòu)造方法基本類似。
所以我們也可以這樣寫,跟上面的效果是一致的。
大致分為一下幾步
1.創(chuàng)建一個(gè)文件夾,用于存放圖片,如圖,我創(chuàng)建了一個(gè)imgs的文件夾,放了一張圖片
2.在pubspec.yaml中聲明資源,注意聲明的時(shí)候路徑和前面的-是有間隔的,不然的話會(huì)報(bào)#/properties/flutter/properties/assets: type: wanted [array] got -imgs/code.png
類似的錯(cuò)誤,聲明完成后點(diǎn)擊右上方的packages get
或
下面我們再來看看其他屬性。
width,height
寬高沒什么好說的,就是設(shè)置寬度和高度
配合color使用,用于設(shè)置顏色的混合模式。BlendMode是一個(gè)枚舉,他有很多值
詳細(xì)解析還是看官方文檔吧,值太多了,我們隨便用用
用于設(shè)置圖片的填充方式,當(dāng)圖片本身小于設(shè)置的寬高或者比父控件的寬高小時(shí),我們可以設(shè)置該屬性控制圖片的顯示。
其值的類型是BoxFit。是個(gè)枚舉
具體含義還是直接看文檔即可
設(shè)置圖片的對(duì)齊方式,接收一個(gè)Alignment類型的值,值如下,很好理解
為了方便看效果我們在外邊套了個(gè)Container,簡單的把它理解為一個(gè)容器布局就可以了,類似于html中的div或android中的Layout,我們給Container設(shè)置了寬高和背景顏色。
bottomLeft效果如下,其他的自行嘗試
相對(duì)于Image,ICON可以像web一樣使用字體圖標(biāo),并且可以使用矢量圖,無需擔(dān)心失真的問題,并且體積相對(duì)較小。
我們先來看看其構(gòu)造方法
很簡單,我們直接來用一用
默認(rèn)情況下,pubspec.yaml中uses-material-design的值為true.我們默認(rèn)就可以使用Material Design字體圖標(biāo)
LayUI
由職業(yè)前端傾情打造,面向全層次的前后端開發(fā)者,低門檻開箱即用的前端 UI 解決方案,layui是一個(gè)采用自身模塊規(guī)范化編寫的前端UI框架,它依照原生HTML/CSS/JS的書寫與組織形式,入門簡單,使用也非常簡單。從核心代碼到API的每一處細(xì)節(jié)都經(jīng)過精心雕琢,非常適合界面的快速開發(fā)。
JEUI
它是一款國產(chǎn)前端UI框架,遵循原生HTML/CSS/JS的書寫與組織形式,國內(nèi)很多程序員javascript不熟, 大大影響了開發(fā)速度. 因此JEUI不需要開發(fā)人員去關(guān)心javascript怎么寫, 只要寫標(biāo)準(zhǔn)html就可以了,門檻極低,拿來即用。其外在極簡,卻又不失飽滿的內(nèi)在,體積輕盈,組件豐盈,從核心代碼到API的每一處細(xì)節(jié)都經(jīng)過精心雕琢,非常適合界面的快速開發(fā)。
JEUI基于jQuery的UI框架,包括表單、布局、表格等等常用UI控件,使用JEUI可以快速輕松地創(chuàng)建風(fēng)格統(tǒng)一的界面效果。
瀏覽器兼容非常牛皮,能兼容IE8以上的瀏覽器。
DWZ
DWZ富客戶端框架(jQuery RIA framework), 是中國人自己開發(fā)的基于jQuery實(shí)現(xiàn)的Ajax RIA開源框架. 設(shè)計(jì)目標(biāo)是簡單實(shí)用,快速開發(fā),降低ajax開發(fā)成本。
DWZ 支持用 html 擴(kuò)展的方式來代替 javascript 代碼, 基本可以保證程序員不董 javascript, 也能使用各種頁面組件和 ajax 技術(shù). 如果有特定需求也可以擴(kuò)展 DWZ 做定制化開化.
MDUI
MDUI 是一個(gè)基于 Material Design 的前端框架。
19 種主色、16 種強(qiáng)調(diào)色、1 種夜間主題,只需添加一個(gè) CSS 類即可切換。CSS 僅 26.7KB,JavaScript 僅 14KB,加載更迅速。移動(dòng)優(yōu)先,從小屏逐步擴(kuò)展到大屏,最終實(shí)現(xiàn)所有屏幕適配。不依賴任何第三方庫,節(jié)約網(wǎng)絡(luò)流量,使加載更迅速,提高用戶體驗(yàn)。使用 CSS3 來做動(dòng)畫交互,平滑、高效,讓 Web 應(yīng)用的動(dòng)畫更流暢。提供自定義打包功能,按需打包需要的主題和組件,使文件體積驟然減小。MDUI 包含了 20 余個(gè)組件,且每個(gè)組件都可以適應(yīng)不同主題。
只需懂一點(diǎn) HTML、CSS、JS 的基礎(chǔ)知識(shí),就能使用 MDUI。
ElementUI
element ui框架的按鈕組件,這款由餓了么前端開源的UI框架,一經(jīng)面世,就收獲大量程序員的芳心,在github 上更是高達(dá)29.8k的star早已說明一切,用于開發(fā)PC端的頁面還是綽綽有余的,如果說你是用vue開發(fā)者,卻沒用過element UI,那你肯定不是合格的vue開發(fā)者。
WeUI
jQuery WeUI 是專為微信公眾賬號(hào)開發(fā)而設(shè)計(jì)的一個(gè)簡潔而強(qiáng)大的UI庫,包含全部WeUI官方的CSS組件,并且額外提供了大量的拓展組件,豐富的組件庫可以極大減少前端開發(fā)時(shí)間。
jQuery WeUI 的最大特點(diǎn)是它只提供UI組件,并不會(huì)對(duì)項(xiàng)目所使用的框架和其他庫有任何的限制,幾乎可以在任何環(huán)境下使用。無論你的項(xiàng)目是基于jQuery,還是 React, Angular, Vue, 你都會(huì)發(fā)現(xiàn) jQuery WeUI 能非常方便的和他們結(jié)合使用。既是你的項(xiàng)目是一個(gè)有很悠久歷史的老項(xiàng)目,也幾乎可以做到拿來即用。
Flutter
Flutter是谷歌的移動(dòng)UI框架,可以快速在iOS和Android上構(gòu)建高質(zhì)量的原生用戶界面,前端對(duì)于 Flutter 的熱忱度之高一度讓人有點(diǎn)驚訝,事實(shí)上在 Flutter 社區(qū)內(nèi)見到的客戶端開發(fā)者遠(yuǎn)多于前端開發(fā),不過前端對(duì)于跨端解決方案確實(shí)有著天然的渴求。
Flutter可以與現(xiàn)有的代碼一起工作。在全世界,F(xiàn)lutter正在被越來越多的開發(fā)者和組織使用,并且Flutter是完全免費(fèi)、開源的。
iView ui
iViewui一套基于 Vue.js 的高質(zhì)量 UI 組件庫,搭配使用 iView UI 組件庫形成的一套后臺(tái)集成解決方案,由 TalkingData 前端可視化團(tuán)隊(duì)部分成員開發(fā)維護(hù)。iView Admin 遵守 iView 設(shè)計(jì)和開發(fā)約定,風(fēng)格統(tǒng)一。
Mint UI
Mint UI 包含豐富的 CSS 和 JS 組件,能夠滿足日常的移動(dòng)端開發(fā)需要。通過它,可以快速構(gòu)建出風(fēng)格統(tǒng)一的頁面,提升開發(fā)效率。
真正意義上的按需加載組件。可以只加載聲明過的組件及其樣式文件,無需再糾結(jié)文件體積過大。
考慮到移動(dòng)端的性能門檻,Mint UI 采用 CSS3 處理各種動(dòng)效,避免瀏覽器進(jìn)行不必要的重繪和重排,從而使用戶獲得流暢順滑的體驗(yàn)。
依托 Vue.js 高效的組件化方案,Mint UI 做到了輕量化。即使全部引入,壓縮后的文件體積也僅有 ~30kb (JS + CSS) gzip。
YDUI Touch
YDUI Touch 專為移動(dòng)端打造,在技術(shù)實(shí)現(xiàn)、交互設(shè)計(jì)上兼容主流移動(dòng)設(shè)備,保證代碼輕、性能高。
使用 Flex 技術(shù),靈活自如地對(duì)齊、收縮、擴(kuò)展元素,輕松搞定移動(dòng)頁面布局。
實(shí)現(xiàn)強(qiáng)大的屏幕適配布局,等比例適配所有屏幕。什么?用得不開心?輕松切換 px。
自定義Javascript組件、Less文件、Less變量,定制一份屬于自己的YDUI。
SUI Mobile
SUI Mobile 是一套基于 Framework7 開發(fā)的UI庫。它非常輕量、精美,只需要引入我們的CDN文件就可以使用,并且能兼容到 iOS 6.0+ 和 Android 4.0+,非常適合開發(fā)跨平臺(tái)Web App。輕量的UI庫
SUI Mobile 非常輕量,核心庫壓縮Gzip后的JS、CSS網(wǎng)絡(luò)傳輸體積總共只有52K,卻提供了20+個(gè)常用的組件。
Amaze ~ 妹子 UI
中國首個(gè)開源 HTML5 跨屏前端框架
Amaze UI 以移動(dòng)優(yōu)先(Mobile first)為理念,從小屏逐步擴(kuò)展到大屏,最終實(shí)現(xiàn)所有屏幕適配,適應(yīng)移動(dòng)互聯(lián)潮流。
Amaze UI 含近 20 個(gè) CSS 組件、20 余 JS 組件,更有多個(gè)包含不同主題的 Web 組件,可快速構(gòu)建界面出色、體驗(yàn)優(yōu)秀的跨屏頁面,大幅提升開發(fā)效率。
相比國外框架,Amaze UI 關(guān)注中文排版,根據(jù)用戶代理調(diào)整字體,實(shí)現(xiàn)更好的中文排版效果;兼顧國內(nèi)主流瀏覽器及 App 內(nèi)置瀏覽器兼容支持。
Amaze UI 面向 HTML5 開發(fā),使用 CSS3 來做動(dòng)畫交互,平滑、高效,更適合移動(dòng)設(shè)備,讓 Web 應(yīng)用更快速載入。
cube-ui
質(zhì)量可靠:由滴滴內(nèi)部組件庫精簡提煉而來,歷經(jīng)考驗(yàn),并且每個(gè)組件都有充分單元測試,為后續(xù)集成提供保障。
體驗(yàn)極致:以迅速響應(yīng)、動(dòng)畫流暢、接近原生為目標(biāo),在交互體驗(yàn)方面追求極致。
標(biāo)準(zhǔn)規(guī)范:遵循統(tǒng)一的設(shè)計(jì)交互標(biāo)準(zhǔn),高度還原設(shè)計(jì)效果;接口標(biāo)準(zhǔn)化,統(tǒng)一規(guī)范使用方式,開發(fā)更加簡單高效。
擴(kuò)展性強(qiáng):支持按需引入和后編譯,輕量靈活;擴(kuò)展性強(qiáng),可以方便地基于現(xiàn)有組件實(shí)現(xiàn)二次開發(fā)。
問題算是解決了,但是為什么會(huì)這樣呢,我們習(xí)以為常的use_frameworks!有什么作用呢,知其然也要知其所以然,帶著疑問我進(jìn)行了下一步的探索 。
首先我們要了解下靜態(tài)庫和動(dòng)態(tài)庫還有Framework。
靜態(tài)庫:(.a)在編譯時(shí)會(huì)將庫copy一份到目標(biāo)程序中,編譯完成之后,目標(biāo)程序不依賴外部的庫,也可以運(yùn)行。缺點(diǎn): 會(huì)使應(yīng)用程序變大。
動(dòng)態(tài)庫:(.dylib)編譯時(shí)只存儲(chǔ)了指向動(dòng)態(tài)庫的引用。可以多個(gè)程序指向這個(gè)庫,在運(yùn)行時(shí)才加載,不會(huì)使應(yīng)用體積變大,但是運(yùn)行時(shí)加載會(huì)損耗部分性能,并且依賴外部的環(huán)境,如果庫不存在或者版本不正確則無法運(yùn)行(我的項(xiàng)目無法運(yùn)行就是這一步出問題了)。
Framework:實(shí)際上是一種打包方式,將庫的二進(jìn)制文件,頭文件和有關(guān)的資源文件打包到一起,方便管理和分發(fā)。
CocoaPods 通過use_frameworks來控制是否是用Framework。
如果不使用use_frameworks!則會(huì)使用static libraries 方式生成.a文件。
如果使用use_frameworks!則會(huì)使用dynamic frameworks 方式生成.framework文件。
在純oc的項(xiàng)目中,一般不使用frameworks,但是在pod導(dǎo)入的swift項(xiàng)目,必須要使用use_frameworks!,我這個(gè)flutter項(xiàng)目也是用pod導(dǎo)入的第三方庫,所以必須加入use_frameworks!,特此記錄下,免得以后踩同樣的坑!
騰訊課堂14M
今日頭條3M
閑魚22M
百度貼吧13M
螞蟻財(cái)富56.8M
百度網(wǎng)盤14M
手機(jī)淘寶15M
貝殼找房8M
由粗粒度小組件動(dòng)態(tài)拼裝出頁面,Native端已經(jīng)有很多成熟的框架,如天貓的Tangram。
開發(fā)語言:iOS、Android
適用場景:快速迭代的活動(dòng)營銷頁面
優(yōu)點(diǎn):無侵入,更新簡單
缺點(diǎn):提前預(yù)埋,擴(kuò)展性差,靈活性差
以webview作為容器的app,歷史悠久,最早到2011年。
開發(fā)語言:HTML
適用場景:雙端嚴(yán)格一致的銀行類app,容器類的支付寶小程序等
優(yōu)點(diǎn):動(dòng)態(tài)更新,跨平臺(tái)
缺點(diǎn):性能,加載速度
UI用Xml+JS表達(dá),用Native View渲染。
開發(fā)語言:Xml+JS
適用場景:雙端嚴(yán)格一致的銀行類app,容器類的支付寶小程序等
優(yōu)點(diǎn):native組件,生態(tài)成熟
缺點(diǎn):三方庫crash,性能缺陷
UI用Dart表達(dá),用Dart engine渲染。
Flutter官方不支持動(dòng)態(tài)化。原因是Flutter在 Release 模式下構(gòu)建的是 AOT 編譯產(chǎn)物,在 Debug 模式下構(gòu)建的是 JIT ,AOT 依賴的 Dart VM 和 JIT 并不一樣, JIT Release 并不支持 iOS 設(shè)備。可行的方案是:AOT 需要一個(gè)編譯后的 “Dart VM”。抽離一份 DartVM 獨(dú)立編譯,再以動(dòng)態(tài)庫的形式引入項(xiàng)目。
開發(fā)語言:Dart
適用場景:iOS、Android、Web、Desktop、Embed
優(yōu)點(diǎn):性能最佳
缺點(diǎn):增大包體積 20MB+
大廠的主流方案。UI用JS表達(dá),用Dart engine渲染。
開發(fā)語言:JS、類JS
適用場景:iOS、Android
優(yōu)點(diǎn):性能最佳
缺點(diǎn):需要掌握J(rèn)S、Dart兩個(gè)語言和框架
大廠的主流方案。UI用Dart表達(dá),用Dart engineX渲染。
開發(fā)語言:Dart
適用場景:iOS、Android
優(yōu)點(diǎn):性能最佳
缺點(diǎn):需要改造Dart engine
1、 美團(tuán)外賣Flutter動(dòng)態(tài)化實(shí)踐
2、 攜程App 首頁動(dòng)態(tài)化探索
3、 Flutter 動(dòng)態(tài)化在最右 App 中的實(shí)踐
4、 Flutter 動(dòng)態(tài)化熱更新的思考與實(shí)踐
5、 NOW直播Flutter動(dòng)態(tài)搜索列表頁實(shí)現(xiàn)
6、 Flutter動(dòng)態(tài)化的方案對(duì)比及最佳實(shí)現(xiàn)-閑魚
7、 基于JavaScript 的MXFlutter
網(wǎng)站欄目:flutter體積,fluent體積
分享網(wǎng)址:http://chinadenli.net/article36/dsgedsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、Google、網(wǎng)站維護(hù)、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)