首页/文章/flutter

How to fix Android Compilation

2024-10-23
702 字约 3 分钟
...

此票证包含一些提示,可帮助缓解最近的 Android 编译问题。

在尝试任何解决方案之前,请确保您的项目已迁移到新的 Android 项目结构:

您还可以在此处找到对不同 Android Gradle 插件 (AGP) 和 Gradle 版本的引用:

在 flutter/flutter 上也有一个讨论这个问题的主要问题:

导致问题的原因

大多数问题来自使用最新的 Android Studio (Ladybug 2024.2.1),该 Android Studio 附带了 Java SDK 21。

例如:运行 :flutter doctor -v

[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.0)
    • Android SDK at /home/miquel/Android/Sdk
    • Platform android-35, build-tools 35.0.0
    • ANDROID_HOME = /home/miquel/Android/Sdk
    • Java binary at:
      /home/miquel/.local/share/JetBrains/Toolbox/apps/android-studio/jbr/bin/ja
      va
    • Java version OpenJDK Runtime Environment (build 21.0.3+-12282718-b509.11)
    • All Android licenses accepted. 

最简单的解决方案是降级 Android Studio 并使用 Java 17,现在,让我们尝试使用最新的 Android Studio 版本来解决这个问题。

编译问题

使用 Flutter 并添加(或任何其他 Android 插件)新创建的项目时,你会看到的第一个编译问题是:3.24.3``connectivity_plus

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':connectivity_plus:compileReleaseJavaWithJavac'.
> Could not resolve all files for configuration ':connectivity_plus:androidJdkImage'.
   > Failed to transform core-for-system-modules.jar to match attributes {artifactType=_internal_android_jdk_image, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.
      > Execution failed for JdkImageTransform: /home/miquel/Android/Sdk/platforms/android-34/core-for-system-modules.jar.
         > Error while executing process /home/miquel/.local/share/JetBrains/Toolbox/apps/android-studio/jbr/bin/jlink with arguments {--module-path /home/miquel/.gradle/caches/transforms-3/4a46fc89ed5f9adfe3afebf74eb8bfeb/transformed/output/temp/jmod --add-modules java.base --output /home/miquel/.gradle/caches/transforms-3/4a46fc89ed5f9adfe3afebf74eb8bfeb/transformed/output/jdkImage --disable-plugin system-modules} 

检查项目依赖项

该项目附带以下 AGP:

id "com.android.application" version "8.1.0" apply false 

以及以下 gradle 包装器:

distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip 

检查插件要求

插件 README 列出了以下版本要求:

 Flutter >=3.7.0
    Dart >=3.2.0 <4.0.0
    iOS >=12.0
    MacOS >=10.14
    Android compileSDK 34
    Java 17
    Android Gradle Plugin >=8.3.0
    Gradle wrapper >=8.4 

升级依赖项

要应用这些内容,请更改以下内容:

打开和更改:android/app/build.gradle

    compileOptions {
      sourceCompatibility JavaVersion.VERSION_17
      targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17
    }

打开和更改:android/gradle/wrapper/gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip 

打开和更改:android/settings.gradle

    id "com.android.application" version "8.3.1" apply false

所有这些都遵循插件 README 文件指定的最低版本要求。

现在,项目再次编译:

Running Gradle task 'assembleRelease'...                           13.4s
✓ Built build/app/outputs/flutter-apk/app-release.apk (18.7MB) 

NDK 错误

您可能会在屏幕上看到以下错误:

Your project is configured with Android NDK 23.1.7779620, but the following plugin(s) depend on a different Android NDK version:
- connectivity_plus requires Android NDK 25.1.8937393
Fix this issue by using the highest Android NDK version (they are backward compatible).
Add the following to /home/miquel/tmp/connectivity_error_2/android/app/build.gradle:

    android {
        ndkVersion = "25.1.8937393"
        ...
    } 

似乎您可以忽略此错误,因为项目仍在编译。

更改 Java SDK

您可以尝试使用命令设置 Jdk 路径。我还没有尝试过,但如果其他一切都失败了,您可以考虑这样做。flutter config --jdk-dir

  1. 下载并安装 JDK 17。
  2. 用于配置它。flutter config --jdk-dir
  3. 再次检查版本flutter doctor -v

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
flutter2026-10-14
Flutter Android 正式签名实战:生成密钥、配置构建与验证 APK
Flutter Android 正式签名实战:生成密钥、配置构建与验证 APK Android 正式签名不需要购买证书。开发者可以自己生成密钥,用它给 APK 签名;密钥的用途是建立稳定的应用身份。签名有效并不等于应用已经通过商店审核,也不等于应用功能已完成真机验收。 本文面向 Flutter Android 项目,介绍从开发签名切换到独立正式签名的完整流程。应用名称、目录、包名和证书信息均使用通用示例,不包含真实项目密码、私钥、签名指...
学习
flutter2026-10-14
Flutter 新版本发布实战:完整安装包与 Shorebird 热更新
一、先判断该发完整包还是补丁 | 这次改动 | 发布方式 | | | | | Dart 文案、Flutter 页面布局、业务逻辑修复 | 通常可以发布补丁 | | 纯 Dart 依赖变化 | 可以尝试补丁构建,仍需验证兼容性 | | Kotlin、Java、Swift、Objective C 或原生构建配置变化 | 发布完整包 | | 插件的原生实现变化、新增原生插件、权限变化 | 发布完整包 | | 新增或修改打包图片、字体、应用图标...
学习
flutter2026-07-01
Dart 入门回顾
1\. Dart 是什么 Dart 是一门类型安全、支持面向对象、支持异步编程的语言。它的语法和 JavaScript、TypeScript、Java、C# 都有一些相似之处。 Dart 常见使用场景: Flutter 跨平台应用开发 命令行工具 Web 应用 服务端接口或脚本 作为学习现代类型语言的入口 Dart 的几个核心特点: 静态类型:变量、函数返回值、参数都有类型。 类型推断:很多时候可以用 ,让 Dart 自动推断类型。 空...
学习
flutter2026-07-01
Flutter 常用 Widget 入门
Flutter 的核心思想是:一切皆 Widget。文字、图片、按钮、页面结构、布局、间距、滚动、动画、手势,几乎都由 Widget 组合出来。 1\. Widget 先分成几类理解 | 类别 | 常用 Widget | 解决什么问题 | | | | | | 应用入口 | 、 | 搭建应用外壳、主题、路由 | | 页面骨架 | 、 、 | 标准页面结构 | | 基础显示 | 、 、 | 显示文字、图标、图片 | | 布局容器 | 、 、...
学习
flutter2024-11-21
在 Flutter 中使用 webview_flutter 4.0
1. 2. ,已入选 3. 4. 本文是第 4 篇,定位是新手入门,介绍和演示 webview 的基础用法。最后还介绍了事件处理的技巧。因为是补写的,所以本来应该首发的却发在最后了。 环境准备已经在 说过了,不再赘述。既然是新手入门,就会本着详尽的原则,而且会多配示例。 获取页面信息 获取页面 title 核心方法:controller.getTitle 完整示例,放在 main.dart 就能运行。运行示例,点击获取 title 的按...
学习
flutter2024-11-06
flutter android端运行报错Namespace not specified. Specify a namespace in the module‘s build file
在使用flutterSDK 3.24之后发现新建项目,项目默认都是基于AGP8了,由于 AGP 开始强制要求 namespace 配置,不仅仅是主工程,也包括第三方库都强制要求 namespace 。但是我们在引入第三方库的时候会发现部分库没能及时的去做相关配置,这也就导致了我们会出现标题错误: 出现这个问题,我们可能会通过去找到本地缓存的第三方库代码去修改它的build.gradle和AndroidManifest.xml来解决缺失...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录