【问题标题】:android: exported needs to be explicitly specified for element <service#io.intercom.android.sdk.fcm.IntercomFcmMessengerService>android:需要为元素<service#io.intercom.android.sdk.fcm.IntercomFcmMessengerService>显式指定exported
【发布时间】:2022-06-10 18:06:25
【问题描述】:

我在 AndroidManifest.xml 中遇到 Flutter 构建错误

android:exported 需要为元素 显式指定。面向 Android 12 及更高版本的应用需要指定 当相应组件定义了意图过滤器时,android:exported 的显式值

AndroidManifest.xml 文件中没有名为 intercom 的元素。我还在活动“.MainActivity”中添加了 android:exported="true" 但错误仍然存​​在。

我的AndoidManifest.xml文件如下

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="social.myproject.app">

    <!-- The INTERNET permission is required for development. Specifically,
         flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <uses-feature
            android:name="android.hardware.camera"
            android:required="false"/>
    <uses-feature
            android:name="android.hardware.camera.autofocus"
            android:required="false" />

    <queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https"/>

        </intent>
        <intent>
            <action android:name="com.google.android.youtube.api.service.START" />
        </intent>
    </queries>

    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <application
            android:requestLegacyExternalStorage="true"
            android:label="myproject"
            android:icon="@mipmap/ic_launcher"
            android:usesCleartextTraffic="true"
        >
        <meta-data
                android:name="flutterEmbedding"
                android:value="2" />
        <activity
                android:name=".MainActivity"
                android:launchMode="singleTop"
                android:theme="@style/LaunchTheme"
                android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
                android:hardwareAccelerated="true"
                android:exported="true"
                android:windowSoftInputMode="adjustResize">
            <!-- Specify that the launch screen should continue being displayed -->
            <!-- until Flutter renders its first frame. -->
            <meta-data
                    android:name="io.flutter.embedding.android.SplashScreenDrawable"
                    android:resource="@drawable/launch_background" />

            <!-- Theme to apply as soon as Flutter begins rendering frames -->
            <meta-data
                    android:name="io.flutter.embedding.android.NormalTheme"
                    android:resource="@style/NormalTheme"
            />
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data
                        android:scheme="https"
                        android:host="www.myproject.social"
                        android:pathPrefix="/api/auth/"/>
            </intent-filter>
            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data
                        android:scheme="https"
                        android:host="www.myproject.io"
                        android:pathPrefix="/api/auth/"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="image/*"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="text/*"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="video/*"/>
            </intent-filter>
        </activity>
        <activity
                android:name="com.yalantis.ucrop.UCropActivity"
                android:screenOrientation="portrait"
                android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
    </application>
</manifest>

详细的错误跟踪:

 See http://g.co/androidstudio/manifest-merger for more information about the manifest merger.
[   +1 ms] E:\App Development\MyApp - Changes\android\app\src\main\AndroidManifest.xml:11:9-16:19 Error:
[        ]      android:exported needs to be explicitly specified for element <service#io.intercom.android.sdk.fcm.IntercomFcmMessengerService>. Apps targeting Android 12 and higher are required to specify an
explicit value for `android:exported` when the corresponding component has an intent filter defined



The error trace points to the following lines : 

 <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <uses-feature
            android:name="android.hardware.camera"
            android:required="true"/>
    <uses-feature
            android:name="android.hardware.camera.autofocus"
            android:required="false"/>

【问题讨论】:

    标签: flutter android-studio android-manifest intercom


    【解决方案1】:

    即使我们添加了导出的 android,有时也会发生这种情况。解决方法是在 android->app->build.gradle 文件中将 targetSdkVersion 设置为 31 并将SDKVersion 设置为 31

    【讨论】:

    • 两者都已设置为版本 32 kaushik。
    • 请降级到31
    • 改成 31 还是一样的错误。
    • 你用过什么叫intercom的包吗?
    • 您好,添加了详细的错误跟踪。
    【解决方案2】:

    可能性:

    • 您是否尝试过“无效/缓存并重新启动”?

    • 您是否尝试过使用 Android 文件夹打开项目?如果您错过了 AndroidManifest.xml. 中的任何内容,它将显示错误

    • 您也可以尝试使用flutter clean & flutter pub get 再次运行。

    希望对你有所帮助。

    【讨论】:

    • 三个都完成了。没有效果。
    • 您好,添加了详细的错误跟踪。
    猜你喜欢
    • 2022-07-13
    • 2022-01-21
    • 2023-01-03
    • 2022-07-27
    • 2021-10-03
    • 1970-01-01
    • 2021-11-10
    • 2014-03-30
    • 2022-09-29
    相关资源
    最近更新 更多