集成flutter_local_notifications时AndroidManifest配置错误致构建失败
问题根因
构建报错的直接原因是AndroidManifest.xml结构不符合语法规则:
你把flutter_local_notifications插件所需的两个<receiver>广播组件,错误嵌套到了.MainActivity对应的<activity>标签内部。按照AndroidManifest规范,<receiver>和<activity>是平级组件,必须直接作为<application>标签的子节点存在,不能放在activity内部,所以AAPT资源链接阶段直接抛出unexpected element <receiver> found in <manifest><application><activity>错误。
另外你写的receiver类名存在不必要的换行,容易引发类路径匹配失败的问题。
修复方案
- 调整标签位置:把两个receiver节点整体移动到
</activity>闭合标签之后,和activity节点平级,归属于application节点下 - 修正receiver的类名写法,去掉类名中间的换行,保证全类名连续
- 补充缺失的必要权限:Android 13及以上版本需要申请通知运行时权限,Android 12及以上版本使用精准定时闹钟需要补充精准闹钟权限(时钟类应用必须加)
修正后的完整AndroidManifest.xml代码如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.clock_app"> <!-- 原有基础权限 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.VIBRATE" /> <!-- Android 13+ 通知发送权限 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <!-- Android 12+ 精准定时闹钟权限,时钟类应用必加 --> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/> <application android:label="clock_app" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> <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: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> <!-- 广播接收者移到activity外部,类名不换行 --> <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/> </intent-filter> </receiver> <receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" /> <!-- Flutter 嵌入配置,不要删除 --> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
构建验证
- 修改完成后先执行
flutter clean清理旧的构建缓存,避免之前生成的错误manifest文件残留 - 再执行
flutter run重新构建项目,构建错误会直接消失 - 注意在应用运行时动态申请
POST_NOTIFICATIONS、SCHEDULE_EXACT_ALARM权限,否则高版本Android系统上通知、定时闹钟功能会被系统拦截。
内容的提问来源于stack exchange,提问作者vinay
相关产品推荐
相关产品推荐

