柚子快報(bào)邀請碼778899分享:Flutter v1
? flutter_module flutter build ios-framework --no-debug --no-profile Building framework for com.example.flutterModule.cc in release mode… ├─Populating Flutter.framework… 1,486ms ├─Building Dart AOT for App.framework… 121.1s (!) ├─Assembling Flutter resources for App.framework… 0.2s └─Moving to build/ios/framework/Release 0.0s
cd 到framework,使用xcrun bitcode_strip -r app -o app抽離bitcode
app 為App.framework 里面的那個(gè)可執(zhí)行文件
同理也給Flutter.framework做相同操作xcrun bitcode_strip -r Flutter -o Flutter
抽離之后App.framework(10.6MB)和Flutter.framework(39.2MB)
安卓混合開發(fā)代碼遷移
add-to-app官方文檔 喵在Flutter 升級(jí) 1.12 適配教程中提到了關(guān)于插件注冊的變化,這部分我就不再提了。
FlutterActivity 設(shè)置透明 官方api有問題,BackgroundMode枚舉并沒有暴露出來
FlutterActivity .withNewEngine() .backgroundMode(FlutterActivity.BackgroundMode.transparent) .build(context)
暫時(shí)可以通過下面代碼來設(shè)置
Intent intent = FlutterActivity.withNewEngine().initialRoute(‘route’).build(activity); intent.putExtra(“background_mode”,“transparent”); activity.startActivity(intent);
官方支持緩存引擎
但是我沒有發(fā)現(xiàn)初始化route的方法,如果從原生進(jìn)一個(gè)flutter頁面就要new一個(gè)引擎,那么這個(gè) FlutterEngineCache的作用是?希望有知道的小伙伴能答疑一下。
更新
你可以通過 flutterEngine.getNavigationChannel().setInitialRoute('my/route');
但是頁面堆載管理就比較復(fù)雜了,這也是咸魚flutter_boost為我們做的事情了。
創(chuàng)建
// Instantiate a FlutterEngine. flutterEngine = new FlutterEngine(this);
// Start executing Dart code to pre-warm the FlutterEngine. flutterEngine.getDartExecutor().executeDartEntrypoint( DartEntrypoint.createDefault() );
// Cache the FlutterEngine to be used by FlutterActivity. FlutterEngineCache .getInstance() .put(“my_engine_id”, flutterEngine);
使用
startActivity( FlutterActivity .withCachedEngine(“my_engine_id”) .build(currentActivity) );
混合開發(fā)調(diào)試熱重載
混合開發(fā)一般都是安卓aar,ios framework這種方式,v1.12.13里面支持調(diào)試和熱重載等功能。
方法很簡單,以安卓為例子。
打debug的flutter aar,引用到安卓項(xiàng)目中,你可以用maven本地引用,也可以上傳到自己的maven庫中遠(yuǎn)程引用。debug運(yùn)行安卓項(xiàng)目vscode中打開你的flutter module項(xiàng)目,vscode的command palette中找到
debug:flutter attach to process(devices) 4. 進(jìn)去你安卓項(xiàng)目中的flutter模塊,這個(gè)時(shí)候vscode會(huì)同步文件到設(shè)備中。
我試了下可以debug,可以熱重載,但是感覺有bug,第一次進(jìn)去不會(huì)進(jìn)斷點(diǎn),必須熱重載一下。
ios的話,有bug,熱重載報(bào)錯(cuò)
對于之前苦逼進(jìn)行混合調(diào)試的我來說,已經(jīng)很不錯(cuò)了,將就用了,希望官方繼續(xù)完善。
安卓華為設(shè)備閃退
華為設(shè)備閃退
Huawei DUB AL00AHuawei DUB AL00Honor BKK AL10Huawei ARS AL00Huawei DUB AL20
issue里面已有大佬提出了解決方案,回滾引擎。官方也做了回滾,坐等hotfix。
在官方回復(fù)的這段時(shí)間,嘗試了接觸了一下flutter引擎這個(gè)東西(本來想通過重新打包引擎來去掉bitcode,Creating-an-iOS-Bitcode-enabled-app,以及重新打包引擎來解決安卓華為閃退),可以不用,但是要會(huì)。
編譯引擎官方文檔 準(zhǔn)備編譯引擎環(huán)境
注意下交叉編譯平臺(tái)只有mac同時(shí)支持安卓和ios
Linux supports cross-compiling artifacts for Android, but not iOS. macOS supports cross-compiling artifacts for Android and iOS. Windows doesn’t support cross-compiling artifacts for either Android or iOS.
mac真香?能交叉編譯安卓和ios的只有mac,讓我大窗戶兒用戶情何以堪。后面為mac上面操作
設(shè)置這個(gè),你懂的
export http_proxy=http://127.0.0.1:1087 export https_proxy=http://127.0.0.1:1087
下載google的depot_tools工具包
depot_tools是個(gè)工具包,里面包含gclient、gn和ninja等工具。是Google為解決Chromium源碼管理問題為Chromium提供的源代碼管理的一個(gè)工具。
clone代碼
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
設(shè)置環(huán)境變量
export PATH="$PATH:/xxx/xxx/depot_tools"
到github.com/flutter/eng… 下載代碼到本地,官方建議你fork,這樣可以方便更新,看個(gè)人情況在engine目錄下面創(chuàng)建.gclient文件
可以使用fork的branch,添加下面內(nèi)容,替換你fork的名字
solutions = [ { “managed”: False, “name”: “src/flutter”, “url”: “git@github.com:
也可以指定一個(gè)某個(gè)版本,比如我們指定回滾奔潰的版本
solutions = [ { “managed”: False, “name”: “src/flutter”, “url”: “https://github.com/flutter/engine.git@2994f7e1e682039464cb25e31a78b86a3c59b695”, “custom_deps”: {
最后
目前已經(jīng)更新的部分資料:
《Android學(xué)習(xí)筆記總結(jié)+移動(dòng)架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》,點(diǎn)擊傳送門,即可獲??! 8)] [外鏈圖片轉(zhuǎn)存中…(img-ygFO0wrS-1714958276138)] [外鏈圖片轉(zhuǎn)存中…(img-UlPkLehM-1714958276138)]
《Android學(xué)習(xí)筆記總結(jié)+移動(dòng)架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》,點(diǎn)擊傳送門,即可獲??!
柚子快報(bào)邀請碼778899分享:Flutter v1
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。