Skip to content

解决 Flutter 应用构建失败:"Build failed due to use of deprecated Android v1 embedding"

问题描述

当构建 Flutter 应用程序时,您可能会遇到以下错误提示:

Build failed due to use of deprecated Android v1 embedding.

具体错误信息显示在 android/app/src/main/AndroidManifest.xml 文件中使用了已弃用的配置:

xml
android:name="io.flutter.app.FlutterApplication"

这个错误表明您的项目仍在使用 Flutter 的旧版 Android 嵌入层(v1),而 Flutter 已迁移到新版嵌入层(v2),旧版本将在未来的 Flutter 版本中被移除。

解决方案

方法一:更新 AndroidManifest.xml 文件(推荐)

这是最直接且推荐的解决方法,适用于大多数情况。

  1. 打开 android/app/src/main/AndroidManifest.xml 文件

  2. 修改 application 标签中的 android:name 属性:

    xml
    <!-- 修改前 -->
    <application
        android:name="io.flutter.app.FlutterApplication"
        ...
    >
    
    <!-- 修改后 -->
    <application
        android:name="${applicationName}"
        ...
    >
  3. 添加 Flutter 嵌入版本元数据(如果不存在):

    xml
    <application ...>
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
        ...
    </application>
  4. 确保 application 标签包含 android:exported 属性(如果适用):

    xml
    <application android:exported="true"...>

方法二:重新生成 Android 目录

如果您的项目已很长时间未更新,或者 Android 目录中的文件已损坏,可以考虑重新生成:

bash
# 删除现有 Android 目录(建议先备份)
rm -rf android

# 重新生成 Android 平台文件
flutter create --platforms=android .

WARNING

执行此操作前,请备份您对 Android 目录所做的任何自定义修改(如权限设置、原生代码等),因为这些更改将被覆盖。

方法三:更新 MainActivity

确保您的主活动类正确继承自 FlutterActivity:

对于 Kotlin (MainActivity.kt):

kotlin
package com.yourpackage.name

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
    // 可以保留为空或添加自定义代码
}

对于 Java (MainActivity.java):

java
package com.yourpackage.name;

import io.flutter.embedding.android.FlutterActivity;

public class MainActivity extends FlutterActivity {
    // 可以保留为空或添加自定义代码
}

方法四:更新 Gradle 配置

确保您的 android/app/build.gradle 文件中的 SDK 版本是最新的:

gradle
android {
    compileSdkVersion 33  // 建议使用最新版本
    // ...
    
    defaultConfig {
        targetSdkVersion 33  // 建议使用最新版本
        // ...
    }
}

方法五:临时解决方案(不推荐)

如果您只是需要临时构建项目,可以添加忽略弃用警告的标志:

在命令行中:

bash
flutter run --ignore-deprecation

在 Android Studio 中:

  1. 转到 Run → Edit Configurations
  2. 在 "Additional run args" 字段中添加 --ignore-deprecation

DANGER

此方法仅为临时解决方案,不建议长期使用,因为 v1 嵌入层将在未来版本中完全移除。

问题排查

如果上述方法仍无法解决问题,请检查:

  1. 确保关键文件存在:确认 android/build.gradle 文件未缺失或损坏
  2. 检查插件兼容性:某些旧版插件可能不兼容 v2 嵌入层,考虑更新或替换这些插件
  3. 比较新项目:创建一个新的 Flutter 项目,对比其 Android 配置与您项目的差异

总结

Flutter 从 Android v1 嵌入层迁移到 v2 嵌入层是为了提供更好的性能和稳定性。虽然迁移过程可能需要一些配置更改,但这些更改是必要的,以确保您的应用与未来版本的 Flutter 兼容。

推荐按照方法一和方法三进行系统性的迁移,这是最彻底且长期的解决方案。如果遇到复杂情况,方法二(重新生成 Android 目录)通常能解决大多数配置问题。

记得在完成更改后运行 flutter clean 命令清理构建缓存,然后重新构建您的应用程序。