简介
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... 如果有更好的方式,还望告知。。。