写点什么

【最强】Android 项目集成 Flutter 实战分享,精通 android 游戏开发

用户头像
Android架构
关注
发布于: 2021 年 11 月 05 日

[](

)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


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


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 国内访问不了?




  1. “学会科学上网”

  2. [使用国内镜像](


)


[](


)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 中除了releasedebug之外有自定义的 variant 那么在打包的时候可能会报错,因为在 flutter module 并没有你定义的 variant 类型,但是releasedebug这两种 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 的区别以及使用建议

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
【最强】Android 项目集成 Flutter 实战分享,精通android游戏开发