Unity 2021.1.19打包APK/AAB遇android:exported缺失问题求助
针对Android 12及以上版本的安装限制,以下是直接可落地的解决步骤:
自定义主Manifest模板,补全exported属性
在项目Assets/Plugins/Android目录下创建或复制Unity默认的AndroidManifest.xml(默认路径为Editor/Data/PlaybackEngines/AndroidPlayer/Apk/AndroidManifest.xml),找到所有带有<intent-filter>的组件(activity、service、receiver),显式添加android:exported属性:<!-- 主启动Activity必须设为true,允许系统调用 --> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 其他带intent-filter的组件,根据需求设置true/false --> <service android:name="xxx.xxx.Service" android:exported="false"> <intent-filter> <action android:name="xxx.xxx.ACTION" /> </intent-filter> </service>排查第三方插件的Manifest文件
检查Plugins/Android下所有第三方SDK的AndroidManifest.xml或.aar包内的Manifest:- 若为单独的Manifest文件,直接给带
<intent-filter>的组件补加android:exported属性; - 若为
.aar包,解压后修改内部的Manifest,再重新打包为aar替换原文件。
- 若为单独的Manifest文件,直接给带
验证合并后的Manifest
打包时勾选Player Settings→Publishing Settings中的Custom Main Manifest,打包完成后可在Temp/gradleOut/launcher/src/main/AndroidManifest.xml查看最终合并的Manifest,确认所有带intent-filter的组件都已设置android:exported。升级Unity补丁版本
Unity 2021.1.19属于较早版本,官方后续补丁已修复内置组件的exported缺失问题,可升级至2021.1.x系列的最新补丁包(如2021.1.30f1),减少手动修改的工作量。适配Gradle配置
开启自定义Gradle模板后,确保build.gradle中适配Android 12+的编译版本:android { compileSdkVersion 31 buildToolsVersion "31.0.0" defaultConfig { targetSdkVersion 31 } }
内容的提问来源于stack exchange,提问作者Dapronya

