Flutter使用--split-per-abi构建APK时Manifest元数据写入错误排查
Flutter构建ABI拆分APK时出现"cannot write metadata in manifest, cannot found manifest file"错误的成因与解决办法
成因分析
- 使用
--split-per-abi参数构建时,Flutter会为每个CPU架构生成独立APK,这个过程需要修改合并后的Manifest文件写入元数据,但构建缓存冲突或Flutter SDK与Android Gradle插件(AGP)版本不兼容,会导致构建流程找不到临时Manifest文件路径,触发该错误。 - 你的
AndroidManifest.xml格式本身无问题,错误出现在构建阶段生成的中间Manifest文件处理环节,而非原始文件。
解决办法
清理构建缓存
彻底清理缓存后重新构建:flutter clean手动删除项目
android目录下的.gradle文件夹,再重新运行flutter build apk --split-per-abi --release。同步Flutter与AGP版本
确保版本匹配:- 执行
flutter upgrade将Flutter更新到最新稳定版; - 打开
android/build.gradle,检查dependencies块中的AGP版本(比如Flutter 3.x对应AGP 7.0+),调整后在Android Studio中点击"Sync Project with Gradle Files"。
- 执行
显式指定Manifest文件路径
在android/app/build.gradle的android代码块中添加配置,强制构建流程识别Manifest路径:android { sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' } } }确认ABI拆分配置
在android/app/build.gradle中手动配置ABI拆分,避免命令行参数与Gradle配置冲突:android { splits { abi { enable true reset() include 'armeabi-v7a', 'arm64-v8a', 'x86_64' universalApk false } } }
你提供的AndroidManifest.xml内容
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.voltrac.fluttermap"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <application android:label="La Palma VolTrac" android:name="${applicationName}" android:icon="@mipmap/launcher_icon" android:requestLegacyExternalStorage="true"> <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:screenOrientation="sensorLandscape" android:windowSoftInputMode="adjustResize"> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
内容的提问来源于stack exchange,提问作者Yash Raj Bharti
相关产品推荐
相关产品推荐

