原生Android项目集成Flutter Module踩坑记录

2023-11-10

按照官网的手动集成步骤一步一步完成,但是在运行打开 FlutterActivity 时出现了了如下错误:

E/flutter: [ERROR:flutter/runtime/dart_vm_data.cc(18)] VM snapshot invalid and could not be inferred from settings.
E/flutter: [ERROR:flutter/runtime/dart_vm.cc(250)] Could not setup VM data to bootstrap the VM from.
E/flutter: [ERROR:flutter/runtime/dart_vm_lifecycle.cc(84)] Could not create Dart VM instance.
A/flutter: [FATAL:flutter/shell/common/shell.cc(274)] Check failed: vm. Must be able to initialize the VM.
    

百度该错误定位到的问题解释有两种:

即:1、因为app模块名称不是 app ;2、存在变体;

我的项目中模块名称是app,故排除 1 。我的项目中存在多构建模式与多变体,便尝试方案2,但是结果很残酷并不能正常运行,依旧报该错误。

在尝试的过程中我发现,当构建模式在debug模式下,是可以正常拉起 Flutter 页面的,在我自定义的构建模式下才会报错,思考该问题的出现可能是 flutter 模块不支持我们自定义的构建模式。

参考方案1的解决思路,找到 $flutterRoot/packages/flutter_tools/gradle/flutter.gradle,搜索 buildTypes,定位到代码块:

project.android.buildTypes {
            // Add profile build type.
            profile {
                initWith debug
                if (it.hasProperty("matchingFallbacks")) {
                    matchingFallbacks = ["debug", "release"]
                }
            }

            release {
                // Enables code shrinking, obfuscation, and optimization for only
                // your project's release build type.
                minifyEnabled true
                // Enables resource shrinking, which is performed by the
                // Android Gradle plugin.
                // NOTE: The resource shrinker can't be used for libraries.
                shrinkResources isBuiltAsApp(project)
                // Fallback to `android/app/proguard-rules.pro`.
                // This way, custom Proguard rules can be configured as needed.
                proguardFiles project.android.getDefaultProguardFile("proguard-android.txt"), flutterProguardRules, "proguard-rules.pro"
            }
        }

可以看到,果不其然,在 flutter 中,默认只支持三种构建模式,分别是debugprofilerelease

考虑到我们的原生Android 项目是基于多构建模式实现的多衍生版本,显然从多构建模式重构到只使用变体实现多衍生需要做大量的工作。是否我们可以采用一种取巧的方式来实现在当前原生项目中集成Flutter,那就是直接修改 flutter.gradle 文件,手动的添加我们当前项目使用的 buildtypes 。

flutter.gradle

我们参考 profile 的写法,添加自己项目中使用的构建模式到该代码块中,在回到原生项目,选择 Invalidata cache / Restart ,重新打开后,将flutter模块的构建模式选择成与项目一直即可。

提示:在测试过程中,使用initWith debug ,这样可以享受Flutter的热加载等功能,在发布时使用 initWith release 提升性能、减小包体积。
app层级的build.gradle
此时如果没有别的情况,你可以正常的使用flutter模块了,但是你还有可能遇到另一个问题,报错日志:

Transform's input file does not exist: /Users/houwenjun/dev/my_flutter/.android/Flutter/build/intermediates/flutter/qaRelease/libs.jar

这种情况请尝试修改 gradle 版本为 5.6.2com.android.tools.build:gradle 版本修改为 3.5.0,我在这样修改后解决了该问题。

总结:

在使用多构建模式+多变体的原生项目中,如果需要集成 Flutter Module,需要修改 Flutter SDK 中的 flutter.gradle 文件,添加等同配置,否则无法使用。


关联另一个报错日志,便于遇到该问题的同学搜索到这篇答案,解决问题的方法都是一样的:

Could not determine the dependencies of task ':app:compileDevCeshiJavaWithJavac'.
> Could not resolve all task dependencies for configuration ':app:devCeshiCompileClasspath'.
   > Could not resolve project :flutter.
     Required by:
         project :app
      > Unable to find a matching variant of project :flutter:
          - Variant 'debugApiElements' capability com.example.my_flutter:flutter:1.0:
              - Incompatible attribute:
                  - Required com.android.build.api.attributes.BuildTypeAttr 'ceshi' and found incompatible value 'debug'.
              - Other attributes:
                  - Found com.android.build.api.attributes.VariantAttr 'debug' but wasn't required.
                  - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
                  - Required environment 'dev' but no value provided.
                  - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
                  - Required org.jetbrains.kotlin.platform.type 'androidJvm' but no value provided.
          - Variant 'debugRuntimeElements' capability com.example.my_flutter:flutter:1.0:
              - Incompatible attribute:
                  - Required com.android.build.api.attributes.BuildTypeAttr 'ceshi' and found incompatible value 'debug'.
              - Other attributes:
                  - Found com.android.build.api.attributes.VariantAttr 'debug' but wasn't required.
                  - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
                  - Required environment 'dev' but no value provided.
                  - Required org.gradle.usage 'java-api' and found compatible value 'java-runtime'.
                  - Required org.jetbrains.kotlin.platform.type 'androidJvm' but no value provided.
          - Variant 'profileApiElements' capability com.example.my_flutter:flutter:1.0:
              - Incompatible attribute:
                  - Required com.android.build.api.attributes.BuildTypeAttr 'ceshi' and found incompatible value 'profile'.
              - Other attributes:
                  - Found com.android.build.api.attributes.VariantAttr 'profile' but wasn't required.
                  - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
                  - Required environment 'dev' but no value provided.
                  - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
                  - Required org.jetbrains.kotlin.platform.type 'androidJvm' but no value provided.
          - Variant 'profileRuntimeElements' capability com.example.my_flutter:flutter:1.0:
              - Incompatible attribute:
                  - Required com.android.build.api.attributes.BuildTypeAttr 'ceshi' and found incompatible value 'profile'.
              - Other attributes:
                  - Found com.android.build.api.attributes.VariantAttr 'profile' but wasn't required.
                  - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
                  - Required environment 'dev' but no value provided.
                  - Required org.gradle.usage 'java-api' and found compatible value 'java-runtime'.
                  - Required org.jetbrains.kotlin.platform.type 'androidJvm' but no value provided.
          - Variant 'releaseApiElements' capability com.example.my_flutter:flutter:1.0:
              - Incompatible attribute:
                  - Required com.android.build.api.attributes.BuildTypeAttr 'ceshi' and found incompatible value 'release'.
              - Other attributes:
                  - Found com.android.build.api.attributes.VariantAttr 'release' but wasn't required.
                  - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
                  - Required environment 'dev' but no value provided.
                  - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
                  - Required org.jetbrains.kotlin.platform.type 'androidJvm' but no value provided.
          - Variant 'releaseRuntimeElements' capability com.example.my_flutter:flutter:1.0:
              - Incompatible attribute:
                  - Required com.android.build.api.attributes.BuildTypeAttr 'ceshi' and found incompatible value 'release'.
              - Other attributes:
                  - Found com.android.build.api.attributes.VariantAttr 'release' but wasn't required.
                  - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
                  - Required environment 'dev' but no value provided.
                  - Required org.gradle.usage 'java-api' and found compatible value 'java-runtime'.
                  - Required org.jetbrains.kotlin.platform.type 'androidJvm' but no value provided.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 801ms

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原生Android项目集成Flutter Module踩坑记录 的相关文章

随机推荐

  • 使用docker-compose启动docker镜像报错exec ./docker-entrypoint.sh: no such file or directory

    报错原因 exec docker entrypoint sh no such file or directory 我们可以在linux下通过cat v命令查看 sh文件 例 cat v Dockerfile WORKDIR tools M
  • 二维向量叉积的几何意义

    叉乘 cross product 相对于点乘 叉乘可能更有用吧 2维空间中的叉乘是 V1 x1 y1 X V2 x2 y2 x1y2 y1x2看起来像个标量 事实上叉乘的结果是个向量 方向在z轴上 上述结果是它的模 在二维空间里 让我们暂时
  • Zotero 知网 PDF与CAJ 抓取模式切换

    Zotero可以通过安装茉莉花插件 jasminum 一键安装https github com l0o0 translators CN内的中文翻译器 从而实现对知网文献元数据以及相应PDF的抓取 但是在使用过程中我发现 由于知网对于学位论文
  • Visual Studio开始Python编程 && Windows下用PyCharm

    Windows搭建python开发环境 首先需要去python的官网下载环境 鼠标移动到Downloads的tab上 在这里可以下载 python的环境还是很人性化的 没有那么多罗里吧嗦的配置什么的 下载好以后直接无脑next就行了 直到f
  • VS中为QT项目添加多个ui

    在VS中创建QT项目 如下图所示 这里已经有一个 ui文件 现在的目标是再添加一个 ui文件并使之在项目中可用 添加新的 ui文件 右击项目 gt 添加 gt 新建项 gt Visual C gt QT 选择一个模板 如 Qt Dialog
  • 目标检测模型从训练到部署,其实如此简单

    目标检测的任务是找出图像中所有感兴趣的目标 物体 确定它们的类别和位置 是计算机视觉领域的核心问题之一 目标检测已应用到诸多领域 比如如安防 无人销售 自动驾驶和军事等 在许多情况下 运行目标检测程序的设备并不是常用的电脑 而是仅包含必要外
  • 分布式事务管理(Seata)

    文章目录 1 概述 分布式事务问题 什么是Seata Seata术语 怎么用 Windows安装 Docker安装 MySQL nacos seata 2 配置官网案例 分析业务逻辑 创建数据库 订单模块 建Module POM YML f
  • Qt 的一些心得

    一 背景刷成黑色 前景色设为白色 方法一 paltette方式 经测试 该方法不会影响到其他控件 推荐使用 QPalette bgpal palette bgpal setColor QPalette Background QColor 0
  • Vue.js基本指令

    目录 插值表达式 v html和v text指令 例1 v on指令 例1 v model指令 例1 v if指令 例1 判断二月份有几天 例2 比较两个数的大小 v show指令 v if和v show的区别 v for 指令 遍历数组
  • 【skynet】 skynet 之 snax

    local skynet require skynet local snax require snax local p calc nil 初始化函数 function init local seed math floor skynet ti
  • xss挑战之旅level 1 - level 4

    Level 1 观察url中的 name参数 向网站提交数据 然后返回到页面上 Level 2 第二关是可以在输入框中输入一个数据提交给服务器 然后提交的数据是会被显示到页面上的 此时再使用第一关的payload已经是不行了 看一下源码 在
  • GitHub建立个人网站(一)

    github可以当做自己的个人博客网站 做一个这样的网站的好处有哪些 装 X 如果网站够炫的话 ps 以后抽空闲下来了 肯定要弄个好看的页面 好好装X 很好的用来总结自己所学的知识 可能因为流量的问题 github上面确实只能当做记载的 但
  • 探索App保活黑科技

    我们来聊聊目前可用的App保活技术 这些方法在目前看来都还可以用 并且效果也很好 但无法保证长期可用 因为Android操作系统本身可能会更改其策略 而且各厂商在定制Android时也会引入自家节电策略 这些都有可能破坏我们原本可用的保活逻
  • 在C#中怎么设置一个全局变量,方便我在其他的窗口中可以调用

    大家按照下面的步骤就可以啦 1 首先我们进入program cs 2 在Program类后面添加一个类 注意要是静态类 如下 public static class user11 public static string yhm 3 进入其
  • 《人工智能(智能系统指南,第二版)》读书笔记——3、第二章

    1 introduction to knowledge based intelligent systems summary questions for review references 2 rule based expert system
  • STM32 一灯大师——寄存器点亮流水灯

    目录 1 配置端口输出数据寄存器 ODR 2 配置低寄存器 CRL 3 配置复位和时钟控制寄存器 RCC 4 拓展 如何让PC2和PC3两个LED灯同时闪烁 5 总结 GPIO功能框图和常用的寄存器 1 CRL和CRH寄存器 2 IDR和O
  • HP380 G9服务器RAID划分

    第一步 配置iLO口IP地址 由于HP服务器刚买回来的时 管理口的状态是自动获取IP地址 管理口没有IP地址 该如何去配置管理口IP地址 可以通过两种方式修改 首先登录到iLO口上 如何配置iLO口地址 两种方法 1 进入BIOS进行IP地
  • [Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • Java基础之运算符

    运算符介绍 运算符是一种特殊的符号 用以表示数据的运算 赋值和比较等 1 算术运算符 2 赋值运算符 3 关系运算符 4 逻辑运算符 5 三元运算符 算术运算符 算术运算符是对数值类型的变量进行运算的 在Java程序中使用的非常多 运算符
  • 原生Android项目集成Flutter Module踩坑记录

    按照官网的手动集成步骤一步一步完成 但是在运行打开 FlutterActivity 时出现了了如下错误 E flutter ERROR flutter runtime dart vm data cc 18 VM snapshot inval