You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在原生Android应用中将Flutter模块作为按需模块添加

Flutter 模块接入原生 Android 实现按需加载的实现方案

Flutter 模块完全可以配合 Android 的 Dynamic Feature 特性实现按需加载,这是目前成本最低、稳定性最好的实现方案,除此之外也有自研动态加载的可选方案,具体说明如下:

方案1:基于 Android Dynamic Feature (DFM) 实现

这是官方推荐的主流方案,实现步骤如下:

  • 先将现有 Flutter 模块编译为 release 版本的 AAR 产物,编译时添加 --no-debug --no-profile 参数,产出的 AAR 已包含 Flutter 运行时、业务代码、资源文件等全量依赖
  • 在原生 Android 项目中新建 Dynamic Feature 模块,将上一步得到的 Flutter AAR 作为依赖仅引入该 DFM 模块,不要在主 app 模块中添加任何 Flutter 相关依赖
  • 在 DFM 模块中封装 Flutter 引擎初始化、Flutter 页面跳转的桥接逻辑,主 app 模块仅保留触发 DFM 下载的入口,不感知 Flutter 相关实现
  • 接入 Play Core SDK 实现 DFM 的按需下载、安装逻辑,待 DFM 安装完成后再调用其内部封装的桥接逻辑即可打开 Flutter 页面

若为国内分发场景无法使用 Google Play 分发能力,可自行实现 DFM 安装包的下载、签名校验、动态加载逻辑,系统层面的 DFM 动态加载能力本身不受应用商店限制

该方案优势:

  • 完全符合 Android 官方开发规范,适配成本极低,无需修改 Flutter 引擎源码
  • 系统原生支持类加载、资源加载的隔离,稳定性有保障
  • 后续 Flutter 模块迭代仅需更新 DFM 包即可,无需修改主 app 逻辑

方案2:自研 Flutter 产物动态加载方案

如果有特殊定制需求不想使用 DFM,可自行实现全流程的动态加载:

  • 将 Flutter 编译产物(Flutter 引擎 so、业务代码 so、资源包)拆分打包为独立的压缩包,自行搭建分发服务
  • 原生端在需要使用 Flutter 模块时,下载对应压缩包,签名校验后存储到应用私有目录
  • 自定义 Flutter 引擎初始化逻辑,指定加载私有目录下的引擎 so、业务 so 以及资源路径,初始化完成后即可跳转 Flutter 页面

该方案适配成本较高,需要处理不同 CPU 架构的 so 适配、资源路径匹配、引擎版本兼容等问题,仅推荐有深度定制需求的场景使用

注意事项

  • 无论使用哪种方案,都需要保证动态加载的 Flutter 产物的引擎版本,和原生端依赖的 Flutter 引擎版本完全一致,否则会出现加载失败、崩溃等问题
  • 不同应用商店对动态下发代码的监管要求不同,上线前需要确认对应渠道的规则要求

内容的提问来源于stack exchange,提问作者Nandhakumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:15:02