2021-12-23 flutter module源码方式集成流程分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-12-23 flutter module源码方式集成流程分析相关的知识,希望对你有一定的参考价值。
参考技术A 官方文档将 Flutter module 集成到 ios 项目
https://flutter.cn/docs/development/add-to-app/ios/project-setup
(1)这时候还没有App.framework , podspec文件是有了
(2)有engine,Flutter.framework。
(3)有插件列表 podspec FlutterPluginRegistrant.podspec,这时没有symlinks/plugins目录软链接
(4)导出当前的环境变量 flutter_export_environment.sh
flutter-plugins-dependencies
执行 podHelper.rb 脚本
做2件事情:
/Volumes/huc/opt/fvm/versions/2.2.0/packages/flutter_tools/bin/xcode_backend.sh build
多了.symlinks 和App.framework,重新拷贝了Flutter.xcframework
Pods-HouseCommercialCube-frameworks.sh
执行 xcode_backend.sh
做3件事情:
AppFrameworkInfo.plist
assets_path 这个后面也没有人用啊!
放到.ios下面
.ios/Flutter/engine/Flutter.xcframework
编译前, 把这个下面添加一个空文件, engine被覆盖了,那么那个空文件就没了?
对比了一下大小。 release
debug 版本的Flutter.xcframework 255M
ios-release 1.03 GB
一开始是1.03G, run之后, 变成了255M
说明确实拷贝到这里了
.ios下面App.framework 没有变
App.framework 61Mb
Flutter.framework 35Mb
"$PODS_ROOT/Target Support Files/Pods-HouseCommercialCube/Pods-HouseCommercialCube-frameworks.sh"
Flutter Module Android的构建流程
对于目前市场上的集成方式来说最常用的就是原生工程+Flutter Module实现部分业务逻辑的跨平台开发,这里我们一起来分析一下Flutter Module是如何参与到Android的构建流程当中的;
首先如果对Flutter APP构建流程不熟悉的可以先熟悉:“深度了解Flutter APP的构建流程”
我们分一下几个步骤了解
- settings.gradle
- include_flutter.groovy
- module_plugin_loader.gradle
- build.gradle
对于第3,4点,与Flutter APP构建流程相似,在"深度了解Flutter APP的构建流程"文中有解析,这里不再重复,重点看前两个步骤
1. settings.gradle核心部分
//导入配置.android/include_flutter.groovy
// inculde_flutter.groovy内部会引入":flutter"
rootProject.name = 'android_generated'
setBinding(new Binding([gradle: this]))
evaluate(new File(settingsDir, 'include_flutter.groovy'))
2. include_flutter.groovy核心部分
include_flutter.groovy是创建flutter module是自动生成,一帮情况下无需手动修改
// 查找项目根路径
def scriptFile = getClass().protectionDomain.codeSource.location.toURI()
def flutterProjectRoot = new File(scriptFile).parentFile.parentFile
// 导入flutter module名称为相对当前目录的flutter
gradle.include ":flutter"
// flutter module android真正的实现位于.android/Flutter目录下
gradle.project(":flutter").projectDir = new File(flutterProjectRoot, ".android/Flutter")
// 获取 配置文件.android/local.properties
def localPropertiesFile = new File(flutterProjectRoot, ".android/local.properties")
def properties = new Properties()
assert localPropertiesFile.exists(), "❗️The Flutter module doesn't have a `$localPropertiesFile` file." +
"\\nYou must run `flutter pub get` in `$flutterProjectRoot`."
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
// 获取flutter sdk路径,导入module_plugin_loader.gradle
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
gradle.apply from: "$flutterSdkPath/packages/flutter_tools/gradle/module_plugin_loader.gradle"
到了这里,整个流程比较简单,后续的module_plugin_loader.gradle, app/build.gradle,flutter.gradle都在上一篇文中"深度了解Flutter APP的构建流程"有做分析,这里不再阐述。
以上是关于2021-12-23 flutter module源码方式集成流程分析的主要内容,如果未能解决你的问题,请参考以下文章
找不到通过 Flutter Module 构建的本地 aar
Android项目创建Flutter module后运行编译失败问题