我试图建立我的Flutter应用程序以支持Android 12。它工作正常,直到Android 11,但不支持Android 12。我试图添加android:exported=“true”或“false”,但不工作。如果有人知道,请帮助
错误日志
错误:ADB已退出,退出代码为1,正在执行流式安装
安装/用户/shrikrishna/Manoj/项目/Flutter/我的应用程序/build/应用程序/输出/flutter-apk/app.apk失败:失败[安装解析失败清单格式错误:在installPackageLI期间解析失败:/data/app/vmdl158598875.tmp/base.apk(位于二进制XML文件的第1230行):音频服务:定位S+(版本31及以上)需要为android:exported定义显式值,当intent过滤器存在时]在SDK gphone 64 x86上启动应用程序时出错64.
4条答案
按热度按时间thtygnil1#
您需要在每个活动、服务或广播接收器上设置
android:exported="true"
或"false"
,从而使用任何intent-filter
.请注意,如果您有多个依赖项,并且在这些依赖项中如果它们有自己的活动、服务或广播接收器,我们还需要将这些android:exported
也添加到其中的每一个上.但很明显,有些依赖项可能还没有更新以符合这一点。所以现在我们可以通过将其添加到我们自己的应用清单中来解决它。
要执行此操作,请执行以下操作:
1.检查合并清单
首先构建应用,然后检查build文件夹中的合并清单。这通常位于目录
./build/app/intermediates/merged_manifest/debug/out/AndroidManifest.xml
上打开它,并在此文件中找到任何标记<intent-filter>
。然后记下Activity、服务或广播类名。例如:2.修改我们的应用程序清单。
打开您的项目应用清单,并在清单标记上添加工具名称空间。
xmlns:tools="http://schemas.android.com/tools"
然后将这些类添加到带有附加属性
android:exported="false"
的清单中,并确保也在清单中添加tools:node="merge"
。例如:您不需要在项目清单上添加其他属性或Intent过滤器,因为它已经添加到插件清单文件中。您只需要添加这些导出的和工具:node=“merge”,以使清单属性和值合并。
最后,首先在本地运行它,确保所有带intent filter的Activity/services/broadcast接收器都具有这些属性(注:
tools:node
属性将不会出现在合并的清单上。)。ybzsozfc2#
升级你的项目到最新的flutter版本。升级你的依赖项,在所有AndroidManifest.xml文件中搜索每个标签,也在你的清单依赖项文件中搜索。并更改
service ....></service>
或<service .... android:exported="false"></service>
到
<service .... android:exported="true"></service>
0lvr5msh3#
只需执行以下步骤:
1设置targetSdkVersion并编译SdkVersion 32
2打开AndroidManifest.xml,在应用程序标记中添加以下内容-
usesCleartextTraffic=“真”
安卓支持零售商=“true”
3在活动中设置android:exported=“true”
rsl1atfo4#
致:
我用了一个不同的方法来科普这个错误。在我的例子中,我有一个名为com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver的接收器核心组件,但没有导出属性。在哪里?我不知道。所以我在我的插件文件夹中找到了它,它在运行flutter pub get后存在。搜索后,我阅读了flutter_local_notifications版本“4.0.1+2”的清单,并看到了错误。因此,我添加了android:exported=“true”,并在我的模拟器上重试flutter运行。
这不是一个解决方案,因为我必须在清理项目后重写这个该死的清单。我希望它对某人有效。
此致