每当我尝试将 Unity 项目上传到 Play Console 时,都会出现以下错误:
'您上传了一个 APK 或 Android 应用程序包,其中包含带有意图过滤器的活动、活动别名、服务或广播接收器,但未设置“android:exported”属性。此文件无法安装在 Android 12 或更高版本上。请参阅:developer.android.com/about/versions/12/behavior-changes-12#exported'(参见下图)
因此,我做了一些研究并尝试将“android:exported”属性实现到我的 AndroidManifest.xml 文件中。我做的第一件事是创建一个插件地图,我用“Android”地图进一步细分。之后,我进入“播放器设置 > 发布设置”,并选中“构建自定义主清单”框,以便将 AndroidManifest.xml 文件放置在 Assets\Plugins\Android\AndroidManifest.xml 中,所以我回到我的项目并得到以下结果:
所以我打开了脚本并添加了行 `android:exported="true"。无论如何,这是脚本:
<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:exported="true"
android:theme="@style/UnityThemeSelector">
<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" />
</activity>
</application>
</manifest>
脚本名称:
构建设置:
合并清单:
<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.DefaultCompany.com.unity.template.mobile2D"
android:installLocation="preferExternal"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="31" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature
android:name="android.hardware.vulkan.version"
android:required="false" />
<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" />
<application
android:extractNativeLibs="true"
android:icon="@mipmap/app_icon"
android:label="@string/app_name" >
<activity
android:name="com.unity3d.player.UnityPlayerActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"
android:exported="true"
android:hardwareAccelerated="false"
android:label="@string/app_name"
android:launchMode="singleTask"
android:resizeableActivity="false"
android:screenOrientation="portrait"
android:theme="@style/UnityThemeSelector" >
<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="unity.build-id"
android:value="com.DefaultCompany.com.unity.template.mobile2D" />
<meta-data
android:name="android.notch_support"
android:value="true" />
</activity> <!-- Add this section for External Dependency Manager -->
<provider
android:name="com.unity.purchasing.googleplay.PurchaseUpdatesetInitiator"
android:authorities="com.DefaultCompany.com.unity.template.mobile2D.com.unity.purchasing.provider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/com_unity_purchasing_path" />
<grant-uri-permission
android:pathPattern="/purchase_update.*"
android:pathPrefix="/purchase_update" />
</provider> <!-- End of section -->
<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.allow-resizable-window"
android:value="False" />
<meta-data
android:name="notch.config"
android:value="portrait|landscape" />
<meta-data
android:name="unity.build-id"
android:value="87f3da67-806f-4324-b8ac-8ddbda0eb6ed" />
<receiver
android:name="com.unity.androidnotifications.UnityNotificationManager"
android:exported="true" />
<receiver
android:name="com.unity.androidnotifications.UnityNotificationRestartOnBootReceiver"
android:enabled="false" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
要将 Unity 中“AndroidManifest.xml”文件中的“android:exported”属性设置为“true”,您可以按照以下步骤操作:
打开您的 Unity 项目并导航到 Assets/Plugins/Android 文件夹。
在此文件夹中创建一个名为“AndroidManifest.xml”的新文件(如果尚不存在)。
在文本编辑器或 Unity 的内置文本编辑器中打开“AndroidManifest.xml”文件。
在“application”元素中添加以下代码:
<activity
android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name"
android:exported="true">
</activity>
这会将主要 Unity 活动的“android:exported”属性设置为“true”。
注意:如果使用不当,将“android:exported”设置为“true”可能会使您的应用程序容易受到安全问题的影响,因此请务必了解其含义并谨慎使用。
您需要按照以下步骤操作
Assets/Plugin/Android
文件夹android:导出=“true”