Android如何在清单中覆盖导出的标签? [英] Android How can i override exported tag in manifest?

查看:25
本文介绍了Android如何在清单中覆盖导出的标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将目标SDK从30升级到31。但我收到了这个错误:

清单合并失败:Android:需要显式导出 指定用于。面向Android 12和更高版本的应用程序有 需要为android:exported指定显式值 相应的组件定义了意图过滤器。看见 https://developer.android.com/guide/topics/manifest/activity-element#exported 了解详细信息。

当我在明显的合并中环顾四周时。我看到我在应用中使用的一个第三方库没有添加android:exported标签。

 <service android:name="com.****.MessagingService" >
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

所以这是我的问题。如何将此服务重写为EXPORT FALSE,如下所示?

<service android:exported="false"
 android:name="com.****.MessagingService" >
                <intent-filter>
                    <action android:name="com.google.firebase.MESSAGING_EVENT" />
                </intent-filter>
            </service> 

推荐答案

Android Studio将合并您的项目及其依赖项的所有清单文件。

较高级别的清单始终可以优先并覆盖依赖项中的值。选中此paragraph in the documentation

由于依赖项根本不指定exported值,因此您可以覆盖顶级清单文件中的每个服务,如下所示:

<service android:exported="false"
 android:name="com.****.MessagingService" />

这将合并com.****.MessagingService的服务标签值,并应用导出的值。

这篇关于Android如何在清单中覆盖导出的标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆