Flutter无法为Android 12构建应用程序

von4xj4u  于 2022-11-20  发布在  Android
关注(0)|答案(4)|浏览(232)

我试图建立我的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.

thtygnil

thtygnil1#

您需要在每个活动、服务或广播接收器上设置android:exported="true""false",从而使用任何intent-filter.请注意,如果您有多个依赖项,并且在这些依赖项中如果它们有自己的活动、服务或广播接收器,我们还需要将这些android:exported也添加到其中的每一个上.
但很明显,有些依赖项可能还没有更新以符合这一点。所以现在我们可以通过将其添加到我们自己的应用清单中来解决它。
要执行此操作,请执行以下操作:

1.检查合并清单

首先构建应用,然后检查build文件夹中的合并清单。这通常位于目录./build/app/intermediates/merged_manifest/debug/out/AndroidManifest.xml上打开它,并在此文件中找到任何标记<intent-filter>。然后记下Activity、服务或广播类名。例如:

<receiver
            android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver" >
            <intent-filter>
                ....
            </intent-filter>
        </receiver>

2.修改我们的应用程序清单。

打开您的项目应用清单,并在清单标记上添加工具名称空间。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" />

您不需要在项目清单上添加其他属性或Intent过滤器,因为它已经添加到插件清单文件中。您只需要添加这些导出的和工具:node=“merge”,以使清单属性和值合并。
最后,首先在本地运行它,确保所有带intent filter的Activity/services/broadcast接收器都具有这些属性(注:tools:node属性将不会出现在合并的清单上。)。

ybzsozfc

ybzsozfc2#

升级你的项目到最新的flutter版本。升级你的依赖项,在所有AndroidManifest.xml文件中搜索每个标签,也在你的清单依赖项文件中搜索。并更改service ....></service><service .... android:exported="false"></service>
<service .... android:exported="true"></service>

0lvr5msh

0lvr5msh3#

只需执行以下步骤:
1设置targetSdkVersion并编译SdkVersion 32
2打开AndroidManifest.xml,在应用程序标记中添加以下内容-
usesCleartextTraffic=“真”
安卓支持零售商=“true”
3在活动中设置android:exported=“true”

rsl1atfo

rsl1atfo4#

致:
我用了一个不同的方法来科普这个错误。在我的例子中,我有一个名为com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver的接收器核心组件,但没有导出属性。在哪里?我不知道。所以我在我的插件文件夹中找到了它,它在运行flutter pub get后存在。搜索后,我阅读了flutter_local_notifications版本“4.0.1+2”的清单,并看到了错误。因此,我添加了android:exported=“true”,并在我的模拟器上重试flutter运行。

<receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
        </intent-filter>
    </receiver>

这不是一个解决方案,因为我必须在清理项目后重写这个该死的清单。我希望它对某人有效。
此致

相关问题