将Flutter module集成到Android项目(Android Studio Arctic Fox 2020.3.1/Flutter 2.8.1)

配置Flutter开发环境

参考 在macOS Catalina(10.15.5)上搭建Flutter开发环境

新建Android工程

手动集成

如果想要在不使用 FlutterAndroid Studio 插件的情况下手动将 Flutter 模块与现有的 Android 应用集成,可以参考以下步骤:

创建 Flutter 模块

假设你在 ~/Source/MyApplication6 路径下已有一个 Android 应用,并且你希望 Flutter 项目作为同级项目:

完成后的工程目录如下:

如果编译的时候报错:

原因为Java版本问题,可以执行如下操作调整Java版本。

接下来,配置原来项目的 settings.gradle 增加如下内容:

修改后的结果如下图:

如果编译的时候报错:

则删除或注释掉原来的 settings.gradle 中的内容:

最后的结果如下图:

接下来在原来项目的 build.gradle 中增加配置

最后的结果如图:

如果编译的时候报错:

则在项目的根 build.gradle 的尾部增加maven配置:

调整后的代码如下:

预热FlutterEngine

创建自定义Application

源代码如下:

配置AndroidManifest.xml,增加自定义的类的引用

预热Flutter引擎

在我们刚刚新建的MyApplication.java中增加如下代码:

添加的效果如下图:

具体的代码如下:

代码混淆,符号分离

在实际开发过程中,我们打包出的代码需要进行混淆(obfuscate),同时为了缩小应用下载大小,需要进行符号分离(split-debug-info)。

gradle.properties 增加参数:

效果如下图:

代码混淆,符号分离配置
代码混淆,符号分离配置

最后生成的文件在 my_flutter 目录下。

对于 iOS 来说,可以通过在 iOSRelease.xcconfig 里增加

来实现代码混淆,如下图:

上面的配置对于通过 Add Flutter to existing app 实现集成的项目意义较大,可以在原项目的构建流程中自动集成混淆功能。

也可以通过命令行实现代码混淆功能,如下:

更详细的参考 Obfuscating Dart Code

注意,官方版本的引擎已经实现符号分离,因此再次被压缩的空间已经不大。

一般情况下我们使用的是官方版本的引擎,如果需要调试 libflutter.so里面的符号,可以在flutter_infra页面直接下载带有符号表的SO文件,根据打包时使用的Flutter工具版本下载对应的文件即可。

比如2.8.1版本:

拿到引擎版本号后在https://console.cloud.google.com/storage/browser/flutter_infra_release/flutter/890a5fca2e34db413be624fc83aeea8e61d42ce6/ 看到该版本对应的所有构建产物,下载android-arm-release、android-arm64-release和android-x86目录下的symbols.zip。

参考链接


发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注