Flutter更新速度仍是很快的爲了不帶來的一些不必的問題,這邊文章是基於的版本爲java
感謝Flutter的先行者們對Flutter的項目的促進,以便讓咱們這些後來者能少跳一些坑。這篇文章以前已經有許多談論這方面的文章了。最具表明性的就是 閒魚技術組 的系列文章了。而這篇文章更多的是我的在實際項目中的運用與總結。官方源碼集成方式 Add Flutter to existing apps
android
這種方式是我在完成 Flutter 層開發後,爲了接入原生最早嘗試的方式,畢竟官方永遠是最早選擇的大大,官方的 Add-to-App能夠看到他們在這方面的進度。並且這方式結合 flutter attach
調試更爲方便git
Flutter項目是經過flutter create -t module my_flutter
生成的module工程,此工程能夠爲咱們生成一個 arr 文件,避免本身手動建立module工程帶來的沒必要要的坑(若是你想,也是能夠,參照 flutter.gradle將相應的源碼和插件打包就行,畢竟 閒魚技術組 的文章就是這麼幹的)
看一下目錄:github
./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並不支持模擬器的緣由在於,模擬器上的診斷並不表明真實的性能。bash
//app:build.gradle
//name:與咱們aar文件名同樣
// ext: 此文件格式
dependencies {
...
implementation(name: 'flutter-release', ext: 'aar')
...
}
複製代碼
aar包放到 libs文件夾內 app
執行Sync Project with Gadle Files
此目錄中將看到引用的包
這裏我將 庫放到 github 上,提供原生開發遠程依賴,好處是讓Android開發人員只關注本身的業務開發,flutter層相關更新對他們來講是無感變化的。maven
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
}
}
}
}
複製代碼
./gradlew uploadArchives
複製代碼
"D:\\f\\github\\test"
該目錄下的內容到github上allprojects{
repositories {
...
maven{ url 'https://raw.githubusercontent.com/本身github用戶名/庫名/master'}
...
}
}
複製代碼
dependencies {
...
implementation 'com.test:flutter_library:1.0.0-SNAPSHOT'
...
}
複製代碼
Sync Project with Gadle Files
同步完後應該就能看到 External Libraries中相應的包configurations.all {
...
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
...
}
複製代碼