Unity打包AAB遭Google拒绝,添加android:exported仍未解决求助
解决Google Play上传AAB因android:exported属性被拒问题
问题背景
上传Unity打包的AAB文件到Google Play时被拒绝,提示:
您上传的APK或Android App Bundle包含带有intent filter的activity、activity alias、service或broadcast receiver,但未设置‘android:exported’属性。该文件无法在Android 12或更高版本上安装。
已给主Activity添加android:exported="true"但问题依旧,开发环境:Unity 2021.3.9f1、Android Studio 2021.2.1 patch 2,当前使用的Manifest文件如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.unity3d.player" android:versionCode="1" android:versionName="1.0"> <application android:label="@string/app_name" android:extractNativeLibs="true" android:icon="@mipmap/app_icon" tools:targetApi="m"> <!-- The MessagingUnityPlayerActivity is a class that extends UnityPlayerActivity to work around a known issue when receiving notification data payloads in the background. --> <activity android:name="com.google.firebase.MessagingUnityPlayerActivity" android:screenOrientation="portrait" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:resizeableActivity="false" android:hardwareAccelerated="false" tools:targetApi="n" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> <meta-data android:name="android.notch_support" android:value="true" /> </activity> <service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE"> </service> <meta-data android:name="unity.splash-mode" android:value="0" /> <meta-data android:name="unity.splash-enable" android:value="True" /> <meta-data android:name="unity.launch-fullscreen" android:value="True" /> <meta-data android:name="unity.allow-resizable-window" android:value="False" /> <meta-data android:name="notch.config" android:value="portrait|landscape" /> </application> <uses-feature android:glEsVersion="0x00020000" tools:ignore="ManifestOrder" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-feature android:name="android.hardware.touchscreen" android:required="false" /> <uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" /> <uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" /> </manifest> ## 可能的原因及解决办法 ### 1. 合并后的Manifest存在未设置exported的组件 Unity打包时会自动合并所有插件(比如Firebase)的Manifest文件,你手动修改的主Manifest可能没覆盖到第三方插件中的组件。 - **查看最终合并的Manifest**:打包后在项目的`Temp/StagingArea/AndroidManifest.xml`找到最终生成的Manifest,搜索所有包含`<intent-filter>`的标签,检查每个对应的Activity/Service/BroadcastReceiver是否都设置了`android:exported`属性。 ### 2. 第三方插件(Firebase)的组件未适配Android 12 旧版本的Firebase Messaging SDK可能没有添加`android:exported`属性,导致合并后出现问题。 - **升级Firebase SDK**:确保Unity中使用的Firebase包是适配Android 12的最新版本(对应Unity 2021.3.x的兼容版本)。 - **强制覆盖组件属性**:如果第三方插件的Manifest里有问题组件,在你的主Manifest中重新声明该组件并添加`android:exported`。比如针对Firebase的服务,可添加如下声明: ```xml <service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" />
(注:该服务没有对外暴露的需求,设为false即可)
3. Unity默认Activity残留
如果你替换了默认的UnityPlayerActivity为MessagingUnityPlayerActivity,可能原UnityPlayerActivity仍在合并后的Manifest中,且带有intent filter却未设置exported。
- 在合并后的Manifest中检查是否存在
com.unity3d.player.UnityPlayerActivity,如果存在且带intent filter,需添加android:exported属性,或者在主Manifest中用tools:node="remove"移除该Activity。
4. 确认Unity的Android配置
- 在Unity的
Player Settings > Android > Publishing Settings中,确保Target API Level设置为Android 12 (API level 31)或更高。
内容的提问来源于stack exchange,提问作者Daler Odinaev
相关产品推荐
相关产品推荐

