日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flutter 混合开发实战问题记录(三)打包并上传flutter aar(包含三方plugin) 到maven...

發布時間:2025/3/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flutter 混合开发实战问题记录(三)打包并上传flutter aar(包含三方plugin) 到maven... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于Android老項目來說接入flutter的最佳方式就是添加 flutter module,讓主module通過模塊依賴方式來依賴flutter。

回顧下小步驟,因為網上資料很多,不詳細描述了。

1 創建 flutter module

在當前project下 運行命令

flutter create -t module my_flutter(my_flutter為生成的flutter module名稱) 復制代碼

2增加配置代碼

在工程的settings.gradle增加以下配置

setBinding(new Binding([gradle: this])) // new evaluate(new File( // newsettingsDir.parentFile, // new'yq_flutter/.android/include_flutter.groovy' // new )) 復制代碼

在app 的gradle里添加

implementation project(':my_flutter') 復制代碼

這樣就可以邊開發,邊編譯看效果了。



合成中間產物

不過隨之而來的問題是:現在flutter畢竟屬于小眾開發,團隊內部只有幾個人來做,而其他人不需要關注flutter的東西,上邊的依賴方式需要安裝flutter 環境,下載sdk等,否則無法編譯項目,所以還需要以依賴jar/aar的方式來集成。



下邊具體描述一下。 你新建的flutter module可以用另一個Android studio 窗口獨立打開,基本的目錄結構是

在as終端里輸入

flutter build apk 復制代碼

可以生成一個release的apk,同時在rootProj/.android/Flutter/build/outputs/aar/目錄下生成aar,把這個aar拷出來直接放到你原生項目里取依賴便可以擺脫依賴module的麻煩。 不過要規范點的話還需要在你們公司的自建nexus maven(或jcenter)上上傳aar,通過地址依賴。參考普通aar的打包上傳方式會發現能生成aar,但是運行會失敗,因為aar中沒有打包進Flutter的編譯產物。 正常生成的aar中結構圖

assets 文件夾中的 isolate_snapshot_instr , isolate_snapshot_data, vm_snapshot_data , vm_snapshot_instr 為Flutter編譯中間產物,flutter_assets 內為資源文件,包含字體,圖片,此外還有需要的插件部分原生代碼和sdk的jar等。

普通的gradle構建無法打包進中間產物和資源文件,所以參考flutter 項目中的gradle 文件內容,可以看到,是在普通的gradle構建過程中加入了flutter gradle腳本

具體內容可以進入sdk目錄去查看,它的工作其實就是copy那些產物進你的apk文件,所以我們可以先本地構建apk,然后解壓它,取出產物,復制到你的項目中,然后重新構建然后上傳到maven,參考網上的一些資料,修改了一個腳本供使用。其中你可能需要修改的部分就是你們公司自用的uploadArchives腳本了。

構建腳本

然后在你的項目中依賴,甚至增加配置開關控制是aar依賴還是module依賴

gradle.properties 開關

FLUTTER_DEBUG = true 復制代碼

原生module中依賴

if(FLUTTER_DEBUG.equals("true")){implementation project(':flutter')}else {implementation 'com.xxx.xxx:my-flutter:1.0.0.@aar'} 復制代碼

附:

1、遇到的gradle版本兼容問題

我目前用的andrdoid studio 3.1.4, android gradle plugin 插件版本是3.2.1, gradle版本是4.10.2,打包aar的時候報錯提示:本地gradle是4.4,最低要求4.6,我很是不解,本地明明比4.6還高,查看了下官網gradle和plugin的匹配版本,貌似也沒問題。一番折騰后,把plugin版本降低到了3.1.2,gradle改為4.4才運行正常,查看了flutter sdk的gradle版本也是3.1.2。只是這個報錯提示讓我很無奈。

2、我本地的flutter 環境,供參考

[?] Flutter (Channel master, v1.5.9-pre.235, on Mac OS X 10.13.6 17G65, locale zh-Hans-CN)[?] Android toolchain - develop for Android devices (Android SDK version 28.0.3) [?] iOS toolchain - develop for iOS devices (Xcode 10.1) [?] Android Studio (version 3.2) [?] VS Code (version 1.30.2) [?] Connected device (1 available)復制代碼

【更新】

2019.5.27

之前的打包有個問題,假如你的flutter module又依賴了三方的flutter plugin,打包之后沒法把plugin內容也打進去。

戀貓的小郭給了一個方案: github.com/CarGuo/flut…, 借助fat-aar來構建。

一、 flutter module 中1 使用插件apply plugin: 'com.kezong.fat-aar'2 在dependencies 中添加def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()def plugins = new Properties()def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')if (pluginsFile.exists()) {pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }}plugins.each { name, _ ->println nameembed project(path: ":$name", configuration: 'default')}二、 project 中的 build.gradle 里添加classpath 'com.kezong:fat-aar:1.0.3'三、setting.gradle 中 添加def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()def plugins = new Properties()def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')if (pluginsFile.exists()) {pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }}plugins.each { name, path ->def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()include ":$name"project(":$name").projectDir = pluginDirectory}復制代碼

此外,我又優化了下腳本,打包aar時中間產物和asset資源直接生成,不再需要去解壓本地生成好的apk來獲取了。 構建腳本

轉載于:https://juejin.im/post/5cd51f61f265da039c056e39

總結

以上是生活随笔為你收集整理的Flutter 混合开发实战问题记录(三)打包并上传flutter aar(包含三方plugin) 到maven...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。