flutterso庫(kù),Flutter 數(shù)據(jù)庫(kù)

Flutter初始化

新建一個(gè)Flutter工程,android模塊。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信平臺(tái)小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了隆陽(yáng)免費(fèi)建站歡迎大家使用!

1,只有一個(gè)Activity組件,它是Dart層繪制Widget的容器。

2,Application配置FlutterApplication。

應(yīng)用Application配置io.flutter.app.FlutterApplication類,App首次啟動(dòng)時(shí),初始化。

調(diào)用FlutterMain.startInitialization()方法。

initConfig方法,從AndroidManfest.xml配置的applicaion節(jié)點(diǎn)獲取meta-data數(shù)據(jù),初始化以下默認(rèn)值。

這些值都是使用中用到的name,例如,抽取apk中asset資源時(shí),flutter_assets打包目錄,打包產(chǎn)物data名稱。

initResources方法, 初始化資源。

在Flutter打包apk的asset目錄下,包括fluttter_asset目錄/資源項(xiàng),將資源從apk中抽取,保存在 Context.getDir("flutter", 0) 目錄下。

/data/user/0/包名/app_flutter目錄。

在目錄中創(chuàng)建一個(gè)時(shí)間戳文件,根據(jù)apk版本和包信息記錄的lastUpdateTime更新時(shí)間,第二次啟動(dòng)時(shí),若apk未更新,不需要再次抽取。

加載so庫(kù),libflutter.so,System.loadLibrary()。

主頁(yè)面繼承FlutterActivity,配置啟動(dòng)模式singleTop。

FlutterActivity類在io.flutter.app包, (區(qū)別io.flutter.embedding.android包), 組件生命周期委托給FlutterActivityDelegate類。

組件啟動(dòng),onCreate方法。

FlutterMain.ensureInitializationComplete方法,確保資源成功抽取完成,創(chuàng)建FlutterView視圖(io.flutter.view),繼承SurfaceView類,setContentView方法,設(shè)置組件主布局即FlutterView視圖。

最后,根據(jù)Bundle路徑,runBundle()加載運(yùn)行,

調(diào)用FlutterView的runFromBundle方法,入口點(diǎn)在dart的main方法,

通過(guò)FlutterNativeView,調(diào)用FlutterJNI的native方法。

nativeRunBundleAndSnapshotFromLibrary方法。

任重而道遠(yuǎn)

Flutter Android端集成排坑 - armeabi 適配 & FlutterBoost

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

關(guān)于混合工程,官方文檔其實(shí)寫(xiě)的已經(jīng)比較清楚了,按著文檔走一般問(wèn)題不大,

但是有一點(diǎn)值得注意的是,F(xiàn)lutter工程引入的庫(kù)的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ì)遇見(jiàn)找不到 libflutter.so,libapp.so 的情況,所以我們需要對(duì)FlutterSDK做一定的改造。

首先我們要了解下Flutter編譯產(chǎn)物,因?yàn)椴煌姹井a(chǎn)物是不同的,這里我們只針對(duì)Flutter 1.9.1-hotfixes來(lái)說(shuō)。除了資源文件之外,F(xiàn)lutter打包會(huì)生成兩個(gè)非常重要的so庫(kù),他們分別是 libflutter.so,libapp.so 。其中 libflutter.so 是Flutter的SDK產(chǎn)物而 libapp.so 正是我們編寫(xiě)的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)行以下腳本即可,此腳本來(lái)自美團(tuán)分享的Flutter文章。

移動(dòng)完了 libflutter.so 之后我們打包發(fā)現(xiàn), libapp.so 仍然會(huì)出現(xiàn)在armeabi-v7a中,所以第二部我們就是移動(dòng) libapp.so 。這個(gè)需要更改 flutter.gradle ,我們?cè)?flutter.gradle 的45行可以看到如下定義,它定義了我們的環(huán)境。

在524行我們可以看到,abiValue的取值就是根據(jù)上述定義值。

所以結(jié)論很簡(jiǎn)單,只要將

private static final String ARCH_ARM32 = "armeabi-v7a";

改為

private static final String ARCH_ARM32 = "armeabi";

就可以完成對(duì)與 libflutter.so 的移動(dòng)。

前期工作我們都做好了,打成aar就非常簡(jiǎn)單了

直接使用 flutter build aar --target-platform android-arm

打出來(lái)后可以解壓檢查下 libflutter.so,libapp.so 是否都在armeabi文件夾下即可。

說(shuō)完了armeabi適配問(wèn)題,這里下說(shuō)下有關(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過(guò)程中,會(huì)去初始化插件項(xiàng)目的buildType下面的debug配置,而插件項(xiàng)目下并未配置debug,導(dǎo)致報(bào)錯(cuò)。

如果發(fā)現(xiàn)文章中有錯(cuò)誤或者有更好的解決方案歡迎指正留言,當(dāng)然如果本篇文章幫助你解決了問(wèn)題,也不要吝嗇你的感謝。謝謝各位。

Flutter混合開(kāi)發(fā)實(shí)戰(zhàn)

之前開(kāi)發(fā)了一個(gè)純Flutter的項(xiàng)目,結(jié)果接到個(gè)新的需求需要使用Flutter單獨(dú)開(kāi)一個(gè)模塊集成到原有的android項(xiàng)目中

下面分享一下如何集成現(xiàn)有的項(xiàng)目和如何繼承以及碰到的問(wèn)題

1.首先第一步 修改gradle

因?yàn)?Flutter 當(dāng)前僅支持為 x86_64,armeabi-v7a 和 arm64-v8a 構(gòu)建預(yù)編(AOT)的庫(kù) 所以我們需要修改gradle的文件限制 APK 中支持的架構(gòu),從而避免 libflutter.so找不到引起的崩潰

2.新建一個(gè)FlutterModel的工程

2.使用aar文件 因?yàn)樗泄こ探y(tǒng)一使用jenkins打包所以我們放在本地肯定是不合適的

說(shuō)以我們需要 打包aar并上傳服務(wù)器

上傳完成后在android中引用

在開(kāi)發(fā)中遇到的問(wèn)題

1.關(guān)于android和Ios中的跳轉(zhuǎn)傳參問(wèn)題

這個(gè)問(wèn)題在android端還是比較方便的 但是的在Ios端并不怎么好實(shí)現(xiàn)

最終決定使用flutter_boost來(lái)完成android和Ios與Flutter的通信操作

flutter_boost github地址:

集成文檔:

集成文檔給出了 但是沒(méi)有android的 尷尬

下滿分享下android的集成

(1)在flutter的 pubspec.yaml工程中添加

(2)修改android工程

使用本地工程的時(shí)候需要在工程共添加

使用aar的時(shí)候不需要添加

(3)在android工程中添加對(duì)應(yīng)的條狀路由配置

(4)在使用默認(rèn)的flutter_boost啟動(dòng)界面的時(shí)候可能碰到狀態(tài)欄丟失的情況

所以最好集成BoostFlutterActivity寫(xiě)一個(gè)新的activity方便處理狀態(tài)欄和activity進(jìn)出動(dòng)畫(huà)

(5)跳轉(zhuǎn)并傳參

//params 傳多個(gè)參數(shù)可以使用json的形式

2.在flutter中的網(wǎng)絡(luò)框架使用的dio結(jié)果在ios的彈出loading的時(shí)候出現(xiàn)卡頓現(xiàn)象

解決方式:1.服務(wù)換證書(shū) (但是后臺(tái)太忙暫時(shí)沒(méi)有支持的人員)

2.ios使用原生的loading解決

3.在使用dio的時(shí)候出現(xiàn)ios部分手機(jī) 網(wǎng)絡(luò)請(qǐng)求緩慢問(wèn)題

解決方法:請(qǐng)求的時(shí)候使用http 2.0協(xié)議

插件地址:

分享名稱:flutterso庫(kù),Flutter 數(shù)據(jù)庫(kù)
鏈接URL:http://muchs.cn/article14/phiide.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、定制網(wǎng)站、搜索引擎優(yōu)化營(yíng)銷型網(wǎng)站建設(shè)、軟件開(kāi)發(fā)手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司