flutter项目构建常见问题

news/2025/2/25 7:42:55

最近在研究一个验证码转发的app,原理是尝试读取手机中对应应用的验证码进行自动转发。本次尝试用flutter开发,因为之前没有flutter开发的经验,遇到了诸多环境方面的问题,汇总一些常见的问题如下。希望帮助到入门的flutter开发者,避免踩坑。

problems

1. running failed

1.1. Bug Description

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':gradle:compileGroovy'.
> BUG! exception in phase 'semantic analysis' in source unit 'C:\dev\flutter\packages\flutter_tools\gradle\src\main\groovy\app_plugin_loader.groovy' Unsupported class file major version 65

* 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 31s
Running Gradle task 'assembleDebug'...                             32.3s

┌─ Flutter Fix ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐  
│ [!] Your project's Gradle version is incompatible with the Java version that Flutter is using for Gradle.                                      │  
│                                                                                                                                                │
│ If you recently upgraded Android Studio, consult the migration guide at https://flutter.dev/to/java-gradle-incompatibility.                    │  
│                                                                                                                                                │  
│ Otherwise, to fix this issue, first, check the Java version used by Flutter by running `flutter doctor --verbose`.                             │  
│                                                                                                                                                │  
│ Then, update the Gradle version specified in D:\Project\Verify_Code_App\verify_code_app\android\gradle\wrapper\gradle-wrapper.properties to be │  
│ compatible with that Java version. See the link below for more information on compatible Java/Gradle versions:                                 │  
│ https://docs.gradle.org/current/userguide/compatibility.html#java                                                                              │  
│                                                                                                                                                │  
│                                                                                                                                                │  
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

1.2. Solution

执行flutter doctor --verbose发现

Java binary at: D:\Android\Android Studio\jbr\bin\java

说明java地址指向不对,要使用flutter config --jdk-dir <jdk目录>来指定java目录

2. settings.gradle.kts配置

2.1. Bug Description

配置gradle plugin国内镜像源时,使用了

pluginManagement {
    repositories {
        maven { url 'https://plugins.gradle.org/m2/' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
        maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

报错如下:

Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...
e: D:\Project\Verify_Code_App\verify_code_app\android\settings.gradle.kts:14:25: Too many characters in a character literal ''https://maven.aliyun.com/nexus/content/repositories/google''
e: D:\Project\Verify_Code_App\verify_code_app\android\settings.gradle.kts:15:25: Too many characters in a character literal ''https://maven.aliyun.com/nexus/content/groups/public''
e: D:\Project\Verify_Code_App\verify_code_app\android\settings.gradle.kts:16:25: Too many characters in a character literal ''https://maven.aliyun.com/nexus/content/repositories/jcenter''

FAILURE: Build failed with an exception.

* Where:
Settings file 'D:\Project\Verify_Code_App\verify_code_app\android\settings.gradle.kts' line: 14

* What went wrong:
Script compilation errors:

  Line 14:         maven { url=uri('https://maven.aliyun.com/nexus/content/repositories/google') }
                                   ^ Too many characters in a character literal ''https://maven.aliyun.com/nexus/content/repositories/google''    

  Line 15:         maven { url=uri('https://maven.aliyun.com/nexus/content/groups/public') }
                                   ^ Too many characters in a character literal ''https://maven.aliyun.com/nexus/content/groups/public''

  Line 16:         maven { url=uri('https://maven.aliyun.com/nexus/content/repositories/jcenter')}
                                   ^ Too many characters in a character literal ''https://maven.aliyun.com/nexus/content/repositories/jcenter''   

3 errors

2.2. Solution

网上的教程大多是按build.gradle文件来配置的,然而本项目采用了build.gradle.kts,所以需要修改为

修改为

repositories {
    maven { url=uri("https://plugins.gradle.org/m2/") }
    maven { url=uri("https://maven.aliyun.com/nexus/content/repositories/google") }
    maven { url=uri("https://maven.aliyun.com/nexus/content/groups/public") }
    maven { url=uri("https://maven.aliyun.com/nexus/content/repositories/jcenter")}
    gradlePluginPortal()
    google()
    mavenCentral()
}

3. 第三方库命名空间NameSpace问题

3.1. Bug Description

运行flutter项目时报错,提示找不到第三方库的命名空间:

Namespace not specified. Specify a namespace in the module's build file

3.2. Solution

build.gradle.kts文件中添加如下代码,来对第三方库进行命名空间指定:

subprojects {
    afterEvaluate {
        if (this is org.gradle.api.Project && (plugins.hasPlugin("com.android.library") || plugins.hasPlugin("com.android.application"))) {
            val androidExtension = extensions.findByType<com.android.build.gradle.BaseExtension>()
            androidExtension?.let { android ->
                val currentNamespace = android.namespace
                println("project: ${this.name} Namespace get: $currentNamespace")

                val packageName = currentNamespace
                    ?: android.defaultConfig.applicationId
                    ?: android.sourceSets.getByName("main").manifest.srcFile.readText().let { manifestText ->
                        val regex = Regex("package=\"([^\"]*)\"")
                        regex.find(manifestText)?.groupValues?.get(1)
                    }
                    ?: group.toString()

                android.namespace = packageName
                println("Namespace set to: $packageName for project: ${this.name}")

                val manifestFile = android.sourceSets.getByName("main").manifest.srcFile
                if (manifestFile.exists()) {
                    var manifestText = manifestFile.readText()
                    if (manifestText.contains("package=")) {
                        manifestText = manifestText.replace(Regex("package=\"[^\"]*\""), "")
                        manifestFile.writeText(manifestText)
                        println("Package attribute removed in AndroidManifest.xml for project: ${this.name}")
                    } else {
                        println("No package attribute found in AndroidManifest.xml for project: ${this.name}")
                    }
                } else {
                    println("AndroidManifest.xml not found for project: ${this.name}")
                }
            }
        }
    }
}

4. sms_advanced第三方依赖问题

4.1. Bug Description

在编写flutter项目时,引入了sms_advanced第三方库,但是在运行时,出现了如下错误:

* What went wrong:
The Android Gradle plugin supports only Kotlin Gradle plugin version 1.5.20 and higher.
The following dependencies do not satisfy the required version:
project ':sms_advanced' -> org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50

pubspec.yml中引入的依赖:

dependencies:
  flutter:
    sdk: flutter
  http: ^1.3.0
  shared_preferences: ^2.5.2

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.8
  sms_advanced: ^1.1.0

4.2. Solution

网上大多数解决方案是修改android/build.gradle文件,将kotlin版本修改为1.5.20以上,这个方案需要对sms_advanced依赖中的文件进行操作。我尝试前往对应插件库的github项目地址,发现作者最新的更新仅上传了github并未上传到pub,因此无法通过修改版本号的方式解决问题。

在这里插入图片描述

因此我尝试修改dependencies,直接从git仓库中引入依赖,如下:

dependencies:
  flutter:
    sdk: flutter
  http: ^1.3.0
  shared_preferences: ^2.5.2

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.8
  sms_advanced:
    git:
      url: git@github.com:EddieKamau/sms_advanced.git

最终得以解决。


http://www.niftyadmin.cn/n/5865191.html

相关文章

【cv】vs2022配置opencv

release下配置包含目录和库目录 E:\sdk\sdk_cuda12.3\opencv490\include E:\sdk\sdk_cuda12.3\opencv490\include\opencv2 E:\sdk\sdk_cuda12.3\opencv490\lib release下配置包含链接器输入的依附依赖项 opencv_world490.lib release编译文件夹下需手动复制opencv_world49…

如何安装vm 和centos

以下分别是VMware和CentOS的安装方法&#xff1a; 安装VMware 下载安装包&#xff1a;访问VMware官方网站&#xff0c;根据你的操作系统版本&#xff0c;下载对应的VMware Workstation安装包。 运行安装程序&#xff1a;以管理员身份运行下载好的安装包。在安装向导中&#…

WebRTC解析

一、WebRTC 协议概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;是由 Google 发起并成为 W3C 标准的实时音视频通信技术&#xff0c;核心特点&#xff1a; 零插件&#xff1a;浏览器原生支持端到端加密&#xff08;SRTP DTLS&#xff09;P2P 优先架构&…

《链表》学习——链表理论基础

链表&#xff0c;一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域&#xff0c;一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff08;空指针&#xff09;。 链表…

Xlua 编译 Windows、UWP、Android、iOS 平台支持库

Xlua 编译 Windows、UWP、Android、iOS 平台支持库 Windows&#xff1a; 安装 Visual Studio&#xff08;推荐 2017 或更高版本&#xff09; 安装 CMake&#xff08;https://cmake.org/&#xff09; macOS&#xff1a; 安装 Xcode 和命令行工具 安装 CMake 检查 cmake 是否安…

爬虫基础入门之爬取豆瓣电影Top250-Re正则的使用

网址:豆瓣电影 Top 250 本案例所需要的模块 requests (用于发送HTTP请求)re (用于字符串匹配和操作) 确定需要爬取的数据 &#xff1a; 电影的名称电影的年份电影的评分电影评论人数 一. 发送请求 模拟浏览器向服务器发送请求 准备工作 -分析页面: F12 or 右击点击检查 查看…

Python将GIF动图转换为Base64编码字符串

文章目录 步骤一&#xff1a;准备Python环境步骤二&#xff1a;编写Python脚本步骤三&#xff1a;运行Python脚本步骤四&#xff1a;查看输出步骤五&#xff1a;在HTML中使用Base64字符串注意事项 在Web开发中&#xff0c;有时需要将图像文件&#xff08;如GIF动图&#xff09;…

Claude 3.7 Sonnet 泄露,Anthropic 最先进 AI 模型即将在 AWS Bedrock 上首次亮相

(图片&#xff1a;AWS) Anthropic 旗下先进的 AI 模型 Claude 3.7 Sonnet 似乎即将发布。业界预计&#xff0c;亚马逊可能会在2025年2月26日的活动中公布相关消息。泄露的信息表明&#xff0c;该模型将托管于 AWS Bedrock 平台&#xff0c;该平台以提供尖端 AI 模型访问而闻名…