【最强】Android 项目集成 Flutter 实战分享,精通 android 游戏开发
[](
)1. 组织目录结构
因为绝大多数的现有 Android、iOS 项目都是作为独立项目使用 svn 或 git 进行版本管理的(这里以 git 为例)。在不改变原有项目管理方式的前提下集成 Flutter 需要将 Flutter 的代码作为独立的工程使用 git 进行管理,并在 Android 项目中以 module 的形式进行依赖。其目录结构如下。
workspace
├── android_project
└── flutter_module
android_project
是我们现有的 Android 工程代码目录。flutter_module
是我们新增的 fluuter 模块代码目录,将两个工程放到同一目录下。为了统一配置,建议必须按照这个目录结构进行管理两个工程的代码。
注意:flutter_module是 module,不是 project 类型,在 Android Studio 中一定要选择 File > New > New Module > Flutter Module,不要选择File > New > New Flutter Project
创建 flutter module 也可以使用如下命令:
$ flutter create -t module name_of_module
[](
)2. 配置 settings.gradle
在 Andr
oid 工程的 settings.gradle 做如下修改
// Include the host app project.
include ':app' // assumed existing content
setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir.parentFile, // new
'my_flutter/.android/include_flutter.groovy' // new
)) // new
[](
)3. 依赖 flutter 模块
在 Android 模块的 build.gradle 中加入如下依赖。
dependencies {
implementation project(':flutter')
}
然后单击Sync Now
同步 Gradle 即可。
完成这一步就可以在 Android 原生代码中使用 flutter 模块了。
[](
)4. 配置 AndroidManifest.xml
启动 flutter 模块需要使用FlutterActivity
,所以需要在 AndroidManifest.xml 中注册一下。
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"/>
[](
)5. 启动 Flutter 模块
在任意地方执行如下代码即可启动 Flutter 模块。
startActivity(FlutterActivity
.withNewEngine()
.initialRoute("splashRoute") // 启动指定 Flutter page,没有可以省略
.build(requireContext()))
[](
)注意事项
=======================================================================
[](
)1. abiFilters 配置
因为 Flutter 目前仅支持 x86_64、armeabi-v7a 和 arm64-v8a 架构. 所以为了避免运行时崩溃建议在 build.gradle 中做如下配置。
android {
//...
defaultConfig {
ndk {
// Filter for architectures supported by Flutter.
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
}
}
}
[](
)2. Java 8 要求
因为 Flutter Android 引擎需要使用 Java 8。所以需要在宿主 Android 工程的 build.gradle 中做如下配置。
android {
//...
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
[](
)3. storage.googleapis.com 国内访问不了?
“学会科学上网”
[使用国内镜像](
)
[](
)4. Android 模块改过名字?
Android Studio 默认创建的模块名称是app
。在 settings.gradle 中有如下配置。
include ':app'
只有在这里 include 的模块才能通过 gradle 进行构建。
模块的名字是可以修改的,如果你改过 app 模块的名字,则在集成 flutter 时会报错。
java.lang.AssertionError: Project :app doesn't exist. To custom the host app project name, set org.gradle.project.flutter.hostAppProjectName=<project-name> in gradle.properties.. Expression: (appProject != null). Values: appProject = null
因为 flutter 默认会认为名为“app”的模块依赖自己,如果你修改过名字则会报错,此时只需要根据报错信息提示在宿主工程的gradle.properties
中加入如下配置即可。
flutter.hostAppProjectName = your_module_name
将your_module_name
修改成你真是的模块名称即可。
[](
)5. flutter module 不支持自定义 buildType?
如果 app module 的 buildType 中除了release
、debug
之外有自定义的 variant 那么在打包的时候可能会报错,因为在 flutter module 并没有你定义的 variant 类型,但是release
、debug
这两种 variant 是所有 module 都包含的。所以可以在 app module 的 buildType 中的自定义 buildType 中增加如下配置。
matchingFallbacks = ['debug', 'release']
例如:
buildTypes {
release {...}
debug {...}
beta {
...
matchingFallbacks = ['debug', 'release']
}
}
[](
)笔者总结
=======================================================================
作为一个多年经验的移动开发者,我深以为,想学好 Flutter,我们不应该仅停留细节层面,更要深入它的原理、设计思路和通用理念。
下面的是一张大佬分享出来的 Flutter 核心知识图谱,里面涵盖了开发、调试、测试、发布、线上运维及工程管理。相信大家如果可以掌握其中 80%的知识点,就可以搞懂 Flutter 了。
作为辅助,为了让大家快速无痛上手 Flutter,在这里免费分享给大家一份来自阿里大佬 Git 高星的 Flutter 学习笔记。
[](
)整理大纲
为什么 Flutter 是跨平台开发的终极之选
在 Windows 上搭建 Flutter 开发环境
编写您的第一个 Flutter App
Flutter 开发环境搭建和调试
Dart 语法篇之基础语法(一)
Dart 语法篇之集合的使用与源码解析(二)
Dart 语法篇之集合操作符函数与源码分析(三)
Dart 语法篇之函数的使用(四)
Dart 语法篇之面向对象基础(五)
Dart 语法篇之面向对象继承和 Mixins(六)
Dart 语法篇之类型系统与泛型(七)
Flutter 中的 widget
_注:鉴于目前网上没有比较规范、系统的整理,该学习手册中的内容都是根据笔者的一个框架在网上进行的搜集整理。本文开源,仅用于技术交流分享,感谢大佬[熊猫先生](
)对Dart语法
部分的博客分享,感谢一同整理资料的小伙伴。大家可以动动小手,点波关注,了解更多 flutter 内容!_
**有需要的朋友给个免费的【一键三连】,然后点击【[此处](
)】进入群共享资源自取,或者直接通过下方代码块找我领取。**
// Wechat number(可复制):
study5233
[](
)资料详情
[](
)为什么 Flutter 是跨平台开发的终极之选
这是为什么?
跨平台开发
什么是 Flutter
Flutter 的特性
Flutter 构建应用的工具
使用 Flutter 构建的热门应用
构建 Flutter 应用的成本
……
[](
)在 Windows 上搭建 Flutter 开发环境
使用镜像
系统要求
获取 Flutter SDK
编辑器设置
Android 设置
起步: 配置编辑器
起步: 体验
体验热重载
创建新的应用
运行应用程序
……
[](
)第三章 编写您的第一个 Flutter App
第 1 步: 创建 Flutter app
第 2 步: 使用外部包(package)
第 3 步: 添加一个 有状态的部件(Stateful widget)
第 4 步: 创建一个无限滚动 ListView
第 5 步: 添加交互
第 6 步: 导航到新页面
第 7 步:使用主题更改 UI
……
[](
)第四章 Flutter 开发环境搭建和调试
开发环境的搭建
模拟器的安装与调试
开发环境的搭建
模拟器的安装与调试
……
[](
)第五章 Dart 语法篇之基础语法(一)
Hello Dart
数据类型
变量和常量
集合(List、Set、Map)
流程控制
运算符
异常
函数
……
[](
)第六章 Dart 语法篇之集合的使用与源码解析(二)
List
Set
Map
Queue
LinkedList
HashMap
Map、HashMap、LinkedHashMap、SplayTreeMap 区别
命名构造函数 from 和 of 的区别以及使用建议
评论