簡介
Flutter更新速度還是很快的為了避免帶來的一些沒必要的問題,這邊文章是基於的版本為
感謝Flutter的先行者們對Flutter的專案的促進,以便讓我們這些後來者能少跳一些坑。這篇文章之前已經有許多談論這方面的文章了。最具代表性的就是 閒魚技術組 的系列文章了。而這篇文章更多的是個人在實際專案中的運用與總結。Flutter 原碼整合
官方原始碼整合方式 Add Flutter to existing apps
這種方式是我在完成 Flutter 層開發後,為了接入原生最先嚐試的方式,畢竟官方永遠是最先選擇的大大,官方的 Add-to-App可以看到他們在這方面的進度。而且這方式結合 flutter attach
除錯更為方便
aar產物整合
Flutter專案是通過flutter create -t module my_flutter
生成的module工程,此工程可以為我們生成一個 arr 檔案,避免自己手動建立module工程帶來的不必要的坑(如果你想,也是可以,參照 flutter.gradle將相應的原始碼和外掛打包就行,畢竟 閒魚技術組 的文章就是這麼幹的)
看一下目錄:
./gradlew assembleRelease
為我們生成一個aar
檔案
這裡建議打release
包。
Flutter 模式
對於Flutter,它支援常見的debug,release,profile等模式,但它又有其不一樣。
Debug模式:對應了Dart的JIT模式,又稱檢查模式或者慢速模式。支援裝置,模擬器(iOS/Android),此模式下開啟了斷言,包括所有的除錯資訊,服務擴充套件和Observatory等除錯輔助。此模式為快速開發和執行做了優化,但並未對執行速度,包大小和部署做優化。Debug模式下,編譯使用JIT技術,支援廣受歡迎的亞秒級有狀態的hot reload。
Release模式:對應了Dart的AOT模式,此模式目標即為部署到終端使用者。只支援真機,不包括模擬器。關閉了所有斷言,儘可能多地去掉了除錯資訊,關閉了所有除錯工具。為快速啟動,快速執行,包大小做了優化。禁止了所有除錯輔助手段,服務擴充套件。
Profile模式:類似Release模式,只是多了對於Profile模式的服務擴充套件的支援,支援跟蹤,以及最小化使用跟蹤資訊需要的依賴,例如,observatory可以連線上程式。Profile並不支援模擬器的原因在於,模擬器上的診斷並不代表真實的效能。
在 Android中引用 aar 包
//app:build.gradle
//name:與我們aar檔名一樣
// ext: 此檔案格式
dependencies {
...
implementation(name: 'flutter-release', ext: 'aar')
...
}
複製程式碼
aar包放到 libs資料夾內
執行Sync Project with Gadle Files
此目錄中將看到引用的包
aar遠端依賴
這裡我將 庫放到 github 上,提供原生開發遠端依賴,好處是讓Android開發人員只關注自己的業務開發,flutter層相關更新對他們來說是無感變化的。
- 在flutter專案中開啟 .android/Flutter/build.gradle
dependencies {
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:support-v13:27.1.1'
implementation 'com.android.support:support-annotations:27.1.1'
}
//新增以下程式碼
apply plugin: 'maven'
ext {
// 從Github上clone下來的專案的本地地址
GITHUB_REPO_PATH = "D:\\f\\github\\test"
PUBLISH_GROUP_ID = 'com.test'
PUBLISH_ARTIFACT_ID = 'flutter_library'
PUBLISH_VERSION = '1.0.0-SNAPSHOT'//SNAPSHOT 為了原生開發時不用管具體版本
}
uploadArchives {
repositories {
mavenDeployer {
//本地maven倉庫地址,也可以使用遠端maven倉庫
def deployPath = file(project.GITHUB_REPO_PATH)
repository(url: "file://${deployPath.absolutePath}")
pom.project {
groupId project.PUBLISH_GROUP_ID
artifactId project.PUBLISH_ARTIFACT_ID
version project.PUBLISH_VERSION
}
}
}
}
複製程式碼
- .android/ 目錄下執行
./gradlew uploadArchives
複製程式碼
- 提交
"D:\\f\\github\\test"
該目錄下的內容到github上 - Android 專案 project:build.gradle
allprojects{
repositories {
...
maven{ url 'https://raw.githubusercontent.com/自己github使用者名稱/庫名/master'}
...
}
}
複製程式碼
- Android 專案 app:build.gradle
dependencies {
...
implementation 'com.test:flutter_library:1.0.0-SNAPSHOT'
...
}
複製程式碼
Sync Project with Gadle Files
同步完後應該就能看到 External Libraries中相應的包
梳理
- SNAPSHOT版本 gradle 預設快取 24h,如果想每次 build 前檢查版本 在build.gradle中加入
configurations.all {
...
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
...
}
複製程式碼
- 由於自己對原生以及gradle不是很熟悉,在做整合的時候可能有些方式欠妥
- 遠端依賴aar包的時候,在flutter專案中更改了build.gradle,這也是有弊端的
官方明確告訴我們不要修改這個檔案。。。
至少每次更新Flutter時,這個檔案會被官方重置
so... 如果有更好的方式,還望告知。。。
參考
更多關於使用Flutter知識筆記在我的 Github -- HybridApp ,持續更新,歡迎點個 star 訂閱收藏。