您需要在使用任何intent-filter
的每个活动、服务或广播接收器上设置android:exported="true"
或"false"
。请注意,如果您有多个依赖项,并且在这些依赖项中如果它们有自己的活动、服务或广播接收器,我们还需要在每个依赖项上添加这些android:exported
。
但显然,某些依赖项可能尚未更新以符合此标准。所以现在我们可以通过将其添加到我们自己的应用程序清单中来解决这个问题。
要做到这一点:
1. 检查是否合并清单
首先构建应用程序,然后检查生成的清单文件夹中的合并清单。这通常位于目录./build/app/intermediates/merged_manifest/debug/out/AndroidManifest.xml
。打开它,找到此文件中的任何标记<intent-filter>
,并注意活动、服务或广播类名。例如:
<receiver
android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver" >
<intent-filter>
....
</intent-filter>
</receiver>
2. 修改应用清单文件。
打开您的项目应用清单文件,在清单标签上添加tools命名空间:xmlns:tools="http://schemas.android.com/tools"
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app"
xmlns:tools="http://schemas.android.com/tools">
接着在清单文件中加入这些类,并且添加额外的属性 android:exported="false"
,同时确保也在其上添加 tools:node="merge"
。例如:
<receiver
android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"
android:exported="false"
tools:node="merge" />
您不需要在项目清单文件中添加其他属性或意图过滤器,因为这些内容已经添加到插件的清单文件中。您只需要添加这些 exported
和 tools:node="merge"
属性,以使清单文件中的属性和值合并。
最后,先在本地运行它,并确保所有具有意图过滤器的 Activity/services/broadcast receiver 都具有这些属性(注:合并后的清单文件上将不会出现 tools:node
属性)。
FlautoBackgroundAudioService
需要exported
标志。如果这是来自库的话,您可以手动添加它。 - Darshan