【最强】Android 项目集成 Flutter 实战分享

├── flutter_release

│ ├── 1.0

│ │ ├── flutter_release-1.0.aar

│ │ ├── flutter_release-1.0.aar.md5

│ │ ├── flutter_release-1.0.aar.sha1

│ │ ├── flutter_release-1.0.pom

│ │ ├── flutter_release-1.0.pom.md5

│ │ └── flutter_release-1.0.pom.sha1

│ ├── maven-metadata.xml

│ ├── maven-metadata.xml.md5

│ └── maven-metadata.xml.sha1

├── flutter_profile

│ ├── …

└── flutter_debug

└── …

如果要引用本地仓库中的 aar 包则需要在宿主应用的 build.gradle 中做如下配置即可:

android {

// …

}

repositories {

maven {

url ‘some/path/my_flutter/build/host/outputs/repo’

// This is relative to the location of the build.gradle file

// if using a relative path.

}

maven {

url ‘https://storage.googleapis.com/download.flutter.io’

}

}

dependencies {

// …

debugImplementation ‘com.example.flutter_module:flutter_debug:1.0’

profileImplementation ‘com.example.flutter_module:flutter_profile:1.0’

releaseImplementation ‘com.example.flutter_module:flutter_release:1.0’

}

2. 使用 Android Studio

第二种生成 AAR 包的方式就是使用 Android Studio,这用方式比较简单,依次选择 AS > Build > Flutter > Build AAR 然后等着就行了。剩下的步骤和使用 flutter 命令一样。

2. 将 Flutter 源码视为 Gradle Module 引入现有项目。


这种方式是推荐的方式,因为在团队协作过程中这种方式更方便,相对于 AAR 方式可以省掉每次单独构建 AAR 包的步骤。可以一键构建 Android、Flutter 代码。

使用此种集成方式可以按照如下步骤进行。

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

在 Android 工程的 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 学习笔记。

整理大纲

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

总结

找工作是个很辛苦的事情,而且一般周期都比较长,有时候既看个人技术,也看运气。第一次找工作,最后的结果虽然不尽如人意,不过收获远比offer大。接下来就是针对自己的不足,好好努力了。

最后为了节约大家的时间,我把我学习所用的资料和面试遇到的问题和答案都整理成了PDF文档,都可以分享给有需要的朋友,如有需要私信我【资料】或者**【点这里】免费领取**

《Android面试复习资料汇总》

喜欢文章的话请关注、点赞、转发 谢谢!

885207944)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-5WRd46Sb-1710885207945)]

总结

找工作是个很辛苦的事情,而且一般周期都比较长,有时候既看个人技术,也看运气。第一次找工作,最后的结果虽然不尽如人意,不过收获远比offer大。接下来就是针对自己的不足,好好努力了。

最后为了节约大家的时间,我把我学习所用的资料和面试遇到的问题和答案都整理成了PDF文档,都可以分享给有需要的朋友,如有需要私信我【资料】或者**【点这里】免费领取**

《Android面试复习资料汇总》

喜欢文章的话请关注、点赞、转发 谢谢!

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值