【最强】Android 项目集成 Flutter 实战分享,android 开发笔试题
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()))
=======================================================================
因为 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'
}
}
}
因为 Flutter Android 引擎需要使用 Java 8。所以需要在宿主 Android 工程的 build.gradle 中做如下配置。
android {
//...
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
3. storage.googleapis.com 国内访问不了?
“学会科学上网”
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 的区别以及使用建议
……

第七章 Dart 语法篇之集合操作符函数与源码分析(三)
Iterable(Iterable 类关系图、Iterable 类方法图……)
forEach(介绍、使用方式、源码解析……)
map(介绍、使用方式、源码解析……)
any(介绍、使用方式、源码解析……)
every(介绍、使用方式、源码解析……)
where(介绍、使用方式、源码解析……)
firstWhere 和 singleWhere 和 lastWhere(介绍、使用方式、源码解析……)
join(介绍、使用方式、源码解析……)
take(介绍、使用方式、源码解析……)
takeWhile(介绍、使用方式、源码解析……)
……(内容太多)

第八章 Dart 语法篇之函数的使用(四)
函数参数
匿名函数(闭包,lambda)
箭头函数
局部函数
顶层函数和静态函数
main 函数
……

第九章 Dart 语法篇之面向对象基础(五)
属性访问器(accessor)函数 setter 和 getter
面向对象中的变量
构造函数
抽象方法、抽象类和接口
类函数
……

第十章 Dart 语法篇之面向对象继承和 Mixins(六)
类的单继承
基于 Mixins 的多继承
……

评论