解决 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
文件中使用了已弃用的配置:
android:name="io.flutter.app.FlutterApplication"
这个错误表明您的项目仍在使用 Flutter 的旧版 Android 嵌入层(v1),而 Flutter 已迁移到新版嵌入层(v2),旧版本将在未来的 Flutter 版本中被移除。
解决方案
方法一:更新 AndroidManifest.xml 文件(推荐)
这是最直接且推荐的解决方法,适用于大多数情况。
打开
android/app/src/main/AndroidManifest.xml
文件修改 application 标签中的
android:name
属性:xml<!-- 修改前 --> <application android:name="io.flutter.app.FlutterApplication" ... > <!-- 修改后 --> <application android:name="${applicationName}" ... >
添加 Flutter 嵌入版本元数据(如果不存在):
xml<application ...> <meta-data android:name="flutterEmbedding" android:value="2" /> ... </application>
确保 application 标签包含
android:exported
属性(如果适用):xml<application android:exported="true"...>
方法二:重新生成 Android 目录
如果您的项目已很长时间未更新,或者 Android 目录中的文件已损坏,可以考虑重新生成:
# 删除现有 Android 目录(建议先备份)
rm -rf android
# 重新生成 Android 平台文件
flutter create --platforms=android .
WARNING
执行此操作前,请备份您对 Android 目录所做的任何自定义修改(如权限设置、原生代码等),因为这些更改将被覆盖。
方法三:更新 MainActivity
确保您的主活动类正确继承自 FlutterActivity:
对于 Kotlin (MainActivity.kt
):
package com.yourpackage.name
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
// 可以保留为空或添加自定义代码
}
对于 Java (MainActivity.java
):
package com.yourpackage.name;
import io.flutter.embedding.android.FlutterActivity;
public class MainActivity extends FlutterActivity {
// 可以保留为空或添加自定义代码
}
方法四:更新 Gradle 配置
确保您的 android/app/build.gradle
文件中的 SDK 版本是最新的:
android {
compileSdkVersion 33 // 建议使用最新版本
// ...
defaultConfig {
targetSdkVersion 33 // 建议使用最新版本
// ...
}
}
方法五:临时解决方案(不推荐)
如果您只是需要临时构建项目,可以添加忽略弃用警告的标志:
在命令行中:
flutter run --ignore-deprecation
在 Android Studio 中:
- 转到 Run → Edit Configurations
- 在 "Additional run args" 字段中添加
--ignore-deprecation
DANGER
此方法仅为临时解决方案,不建议长期使用,因为 v1 嵌入层将在未来版本中完全移除。
问题排查
如果上述方法仍无法解决问题,请检查:
- 确保关键文件存在:确认
android/build.gradle
文件未缺失或损坏 - 检查插件兼容性:某些旧版插件可能不兼容 v2 嵌入层,考虑更新或替换这些插件
- 比较新项目:创建一个新的 Flutter 项目,对比其 Android 配置与您项目的差异
总结
Flutter 从 Android v1 嵌入层迁移到 v2 嵌入层是为了提供更好的性能和稳定性。虽然迁移过程可能需要一些配置更改,但这些更改是必要的,以确保您的应用与未来版本的 Flutter 兼容。
推荐按照方法一和方法三进行系统性的迁移,这是最彻底且长期的解决方案。如果遇到复杂情况,方法二(重新生成 Android 目录)通常能解决大多数配置问题。
记得在完成更改后运行 flutter clean
命令清理构建缓存,然后重新构建您的应用程序。