bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

flutter工程結構,flutter目錄結構設計

Flutter初始化

新建一個Flutter工程,android模塊。

成都創新互聯主要從事成都網站設計、網站制作、網頁設計、企業做網站、公司建網站等業務。立足成都服務訥河,10年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:18982081108

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

2,Application配置FlutterApplication。

應用Application配置io.flutter.app.FlutterApplication類,App首次啟動時,初始化。

調用FlutterMain.startInitialization()方法。

initConfig方法,從AndroidManfest.xml配置的applicaion節點獲取meta-data數據,初始化以下默認值。

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

initResources方法, 初始化資源。

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

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

在目錄中創建一個時間戳文件,根據apk版本和包信息記錄的lastUpdateTime更新時間,第二次啟動時,若apk未更新,不需要再次抽取。

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

主頁面繼承FlutterActivity,配置啟動模式singleTop。

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

組件啟動,onCreate方法。

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

最后,根據Bundle路徑,runBundle()加載運行,

調用FlutterView的runFromBundle方法,入口點在dart的main方法,

通過FlutterNativeView,調用FlutterJNI的native方法。

nativeRunBundleAndSnapshotFromLibrary方法。

任重而道遠

Flutter發布Package(Pub.dev或私有Pub倉庫)

??因為我們使用Flutter跨平臺技術開發App時,會有很多公用組件,因為Flutter中一切皆為Widget,widget也比較細粒度,所以我們需要進行封裝,用于一個項目或者公司不同項目中去~

??那么今天寫寫如何發布package或者插件到Pub.dev上,扯扯談O(∩_∩)O哈哈~

《Flutter的撥云見日》系列文章如下:

1、Flutter中指定字體(全局或者局部,自有字庫或第三方)

2、Flutter發布Package(Pub.dev或私有Pub倉庫)

首先,我們知道flutter有四種工程模式:Flutter Application、Flutter Module、Flutter Plugin和Flutter Package。

我們這里就主要講Package 純Dart插件的發布吧,都差不多。

創建工程后,就可以編寫你的公共組件,或者公用字體庫呀啥的, 都行。

在更改下你的pubspec.yaml文件,修改下你的versionCode,項目名稱,項目描述,作者等

如果上傳失敗試試????的命令:

在執行該命令時,可能會中途調到網頁,要求你登錄google賬號,登錄授權,到時候登錄賬號并授權就可以了。

因為我們直接使用flutter packages pub publish是發布到Pub.dev上,并不是發布到私有倉庫,該怎么辦呢?

其實呢,也很簡單!像versionCode,項目名,等都和發布Pub.dev是一樣的。沒啥區別。

有兩種方式:

就是這么簡單o( @ )o

相信大家引用Pub.dev上的第三方庫都會了哈,到處都是這里不講了

在使用flutter pub get就可以拉到私有倉庫項目了

以上就差不多聊了聊package發布和獲取的事兒了,都很明了,大家可以試試,挺簡單的。

PS: 寫文不易,覺得沒有浪費你時間,請給個點贊~ ????

Flutter(六)Android與Flutter混合開發(Hybird)

如果我們目前的項目是Android的,但是接下來我們希望部分頁面可以使用Flutter進行開發,甚至我們希望在Native頁面中嵌入FlutterUI組件,那么我們該如何實現呢?

假設你現在Android項目的目錄的結構是這樣的

這時候如果你想創建一個Flutter模塊,使得Android模塊和Flutter模塊之間可以進行交互,我們可以通過Android Studio新建一個Flutter Module,具體過程是:File — New — New Module ,之后選擇Flutter Module,指定Project Location的路徑為

也就是說,最終你的項目結構會是這樣的

接下來在Android Module的 build.gradle 文件中添加flutter依賴

先創建一個Flutter頁面

這里比較重要的是 window.defaultRouteName 這個字段,這個字段可以接收從Native傳遞過來的參數 (下文我們會介紹原生傳遞參數的方法),也就是說通過這個字段我們就可以進行Flutter頁面的路由的分發

我們可以直接在Android的 MainActivity 中啟動一個 FlutterActivity ,這里的 initialRoute 方法中傳遞的參數就對應Flutter層的 window.defaultRouteName

注意:需要在 AndroidManifest.xml 注冊 FlutterActivity

自己創建一個 FlutterAppActivity 繼承自 FlutterActivity

在 MainActivity 中啟動 FlutterAppActivity (另外別忘了在 AndroidManifest.xml 中注冊 FlutterAppActivity )

兩種啟動方式的區別

如果單純只是想打開一個Flutter頁面,兩種方式實際上基本沒有太大區別,第一種方式也許還會更簡單一點。但是,在Flutter開發中,我們往往還需要開發一些Native插件供Flutter調用,如果使用復寫 FlutterActivity 的方式更有利于我們在 FlutterActivity 中注冊我們的Native插件,所以實際開發中一般推薦使用第二種方式

擴展思考

initialRoute 從名稱上看起來是Flutter提供給我們進行Native與Flutter交互的路由跳轉的,但是實際上他就是一個字符串,我們不僅僅可以傳遞一個路由名稱,有時候我們也可以通過這個參數傳遞一串JSON數據,然后在Flutter端進行解析,這樣我們就可以通過這個參數做更多的事情

activity_main.xml

FrameLayout 用于承載Flutter組件

MainActivity.java

使用 FragmentManager 將 FlutterFragment 添加到 FrameLayout 容器中

運行結果

上半部分是原生的TextView,下半部分是Flutter的Text組件

本節主要介紹了Native和Flutter之間的頁面跳轉,以及同一個頁面中Native與Flutter組件的組合。接下來會介紹如何編寫Android插件與Flutter進行數據交互

ios flutter 混編

最近在集成flutter進項目

以收集編譯產物并以cocopods方式集成

產物大概放入兩個pod庫

這個暫且叫pod1,pod1放flutter.framework,第三方plugin.a,自己寫的基礎plugin,比如networking,hud等等(由于是混編,不可避免存在很多原生基礎組件,所以能公用的基礎組件都會弄一個flutter-plugin橋接)

第二個pod2放編譯之后的app.framwork,注冊文件GeneratedPluginRegistrant,以及各個業務模塊.a(有可能沒有)結構大概如下面

podspec大概如下

主工程引入這兩個pod庫即可

接下來從零開始搭建上文所說的

先創建一個flutter module

這個是主flutter工程,用來集成businessModule以及生成app.framework

結構如下圖

再生成一個業務工程

注意此時還需要進入example生成ios和Android工程,不然無法單獨編譯運行

這樣 這個單獨的業務模塊就可以單獨跑起來了

此時主flutter工程和業務工程均搭建完畢

在主工程pubspec.ymal文件講兩個工程關聯

好了 接下來就是編寫腳本收集產物了

編譯完成之后會在flutter主工程product生成如下文件

將上面文件分類收集做成文章開頭的pod1,pod2 ,在native工程引入即可

在集成flutter的過程中 踩不少坑 也閱讀很多前輩的文章,在此一并感謝

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

Flutter可以算是當下最火熱的新技術之一,我現在所在團隊也準備將Flutter技術應用到線上工程中。

關于混合工程,官方文檔其實寫的已經比較清楚了,按著文檔走一般問題不大,

但是有一點值得注意的是,Flutter工程引入的庫的gradle的 buildTypes 要與原工程保持一致,如果不一致需要手工添加。

進入正題,現在Flutter官方默認只提供armeabi-v7a、arm64-v8a、x86和x86-64,其中x86和x86-64是為模擬器準備的。目前我們使用的SDK大部分只使用了armeabi架構,直接使用我們會遇見找不到 libflutter.so,libapp.so 的情況,所以我們需要對FlutterSDK做一定的改造。

首先我們要了解下Flutter編譯產物,因為不同版本產物是不同的,這里我們只針對Flutter 1.9.1-hotfixes來說。除了資源文件之外,Flutter打包會生成兩個非常重要的so庫,他們分別是 libflutter.so,libapp.so 。其中 libflutter.so 是Flutter的SDK產物而 libapp.so 正是我們編寫的dart文件的產物。默認情況下,這兩個文件都會出現在armeabi-v7a中,因此我們要作出對應的改造。

libflutter.so 位于FlutterSDK中,這里順帶提一句,除了這對不同CPU架構,它還分為Debug版和Release版,它們的區別在于Debug是為JIT編譯方式打造的,體積較大而Release是為AOT編譯方式打造的,體積很小。對 libflutter.so 的改造,只要將其移動文件路徑即可,運行以下腳本即可,此腳本來自美團分享的Flutter文章。

移動完了 libflutter.so 之后我們打包發現, libapp.so 仍然會出現在armeabi-v7a中,所以第二部我們就是移動 libapp.so 。這個需要更改 flutter.gradle ,我們在 flutter.gradle 的45行可以看到如下定義,它定義了我們的環境。

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

所以結論很簡單,只要將

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

改為

private static final String ARCH_ARM32 = "armeabi";

就可以完成對與 libflutter.so 的移動。

前期工作我們都做好了,打成aar就非常簡單了

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

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

說完了armeabi適配問題,這里下說下有關于有關于FlutterBoost的接入。這個東西接入有兩點要注意。

在主app內加上即可,常規操作,強制統一support包的版本號

注釋flutter.gradle第655行。因為編譯過程中,會去初始化插件項目的buildType下面的debug配置,而插件項目下并未配置debug,導致報錯。

如果發現文章中有錯誤或者有更好的解決方案歡迎指正留言,當然如果本篇文章幫助你解決了問題,也不要吝嗇你的感謝。謝謝各位。

Flutter是一個什么框架

Flutter是一個移動應用程序的軟件開發工具包(SDK),具有以下特征:

跨平臺應用的框架,沒有使用WebView或者系統平臺自帶的控件,使用自身的高性能渲染引擎自繪

簡化版的瀏覽器,最大限度在android和ios上統一UI,包括業務邏輯和用戶體驗

開發語言使用dart,結合C, C++, 和Skia(2D渲染引擎)構建

支持hot reload,包含著完整的控件和工具鏈

一切皆控件,控件是每個Flutter應用程序的基本構建塊,與分離視圖、控制器、布局和其他屬性的框架不同,Flutter具有一致的統一對象模型:控件。一個控件可以定義:結構元素(比如按鈕或菜單)、風格元素(比如字體或顏色方案)、布局的方面(比如填充)、一些業務邏輯等

組合大于繼承,控件本身通常由許多小型、單用途的控件組成,結合起來產生強大的效果,類的層次結構是扁平的,以最大化可能的組合數量

強化版的WebView,框架僅提供一個View層,大部分功能要依賴原生

目前只能夠運行大部分Dart代碼(不能引入dart:mirrors或dart:html庫)

文章題目:flutter工程結構,flutter目錄結構設計
標題路徑:http://vcdvsql.cn/article40/dsdjcho.html

成都網站建設公司_創新互聯,為您提供網站營銷App設計企業網站制作云服務器面包屑導航網頁設計公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設