安卓原生集成flutter,通过flutter扩展调用原生项目代码

前言

flutter的试错过程

需求架构

  1. 通过flutter module集成到安卓原生,但是这个module的安卓代码是可变或者说会被覆盖的,所以不能在这个模块里写原生调用。

  2. 在这个flutter module创建一个本地扩展,通过这个扩展的android模块调用主项目的代码,它在项目中扮演一个代理者的角色。

问题与方案

  1. 在本地扩展中,如果只运行flutter module,扩展的安卓模块就无法调用到主项目的代码,这里指的是项目的:app模块代码。如果以依赖的方式引入:app模块,会导致环形依赖,导致sync失败无法运行。

    • 解决方案:将:app中需要被flutter调用的代码,拆分成一个新的安卓模块:abc,然后在flutter扩展的android依赖中添加这个模块,此时不会出现环形依赖,sync可顺利通过。
  2. 运行flutter module时,出现找不到我们主项目拆分的:abc模块

    • 解决方案:在flutter module.android目录的setting.gradle引入:abc,即:
      include ':abc'
      project(':abc').projectDir = new File('../../abc') // 注意这是扩展相对于主项目根目录的路径
  3. 此时单独运行flutter模块进行调试已经没问题了,但是如果增删flutter依赖时,flutter modulesetting.gradle配置会被重置,需要手动重新把上述的代码加回去。

结语

写flutter必须要有一点原生基础,不然很多稀奇古怪的问题你根本没办法处理。


安卓原生集成flutter,通过flutter扩展调用原生项目代码
http://blog.icy8.cn/posts/1881310679/
作者
icy8
发布于
2023年11月6日
许可协议