如何在 Unity 中的“AndroidManifest.xml”文件中将“android:exported”属性设置为“true”

问题描述 投票:0回答:2

每当我尝试将 Unity 项目上传到 Play Console 时,都会出现以下错误:

'您上传了一个 APK 或 Android 应用程序包,其中包含带有意图过滤器的活动、活动别名、服务或广播接收器,但未设置“android:exported”属性。此文件无法安装在 Android 12 或更高版本上。请参阅:developer.android.com/about/versions/12/behavior-changes-12#exported'(参见下图) enter image description here

因此,我做了一些研究并尝试将“android:exported”属性实现到我的 AndroidManifest.xml 文件中。我做的第一件事是创建一个插件地图,我用“Android”地图进一步细分。之后,我进入“播放器设置 > 发布设置”,并选中“构建自定义主清单”框,以便将 AndroidManifest.xml 文件放置在 Assets\Plugins\Android\AndroidManifest.xml 中,所以我回到我的项目并得到以下结果: enter image description here

所以我打开了脚本并添加了行 `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>

脚本名称:

enter image description here

构建设置:

enter image description here

合并清单:

<?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>
android xml unity-game-engine google-play google-play-console
2个回答
0
投票

要将 Unity 中“AndroidManifest.xml”文件中的“android:exported”属性设置为“true”,您可以按照以下步骤操作:

  1. 打开您的 Unity 项目并导航到 Assets/Plugins/Android 文件夹。

  2. 在此文件夹中创建一个名为“AndroidManifest.xml”的新文件(如果尚不存在)。

  3. 在文本编辑器或 Unity 的内置文本编辑器中打开“AndroidManifest.xml”文件。

  4. 在“application”元素中添加以下代码:

     <activity
         android:name="com.unity3d.player.UnityPlayerActivity"
         android:label="@string/app_name"
         android:exported="true">
    </activity>
    

这会将主要 Unity 活动的“android:exported”属性设置为“true”。

  1. 保存文件并在 Unity 中重建您的 Android 项目。

注意:如果使用不当,将“android:exported”设置为“true”可能会使您的应用程序容易受到安全问题的影响,因此请务必了解其含义并谨慎使用。


0
投票

您需要按照以下步骤操作

  1. 转到
    Assets/Plugin/Android
    文件夹
  2. 找到并打开AndroidManifest.xml
  3. 设置 true 默认为 false

android:导出=“true”

  1. 保存更改
  2. 重建
© www.soinside.com 2019 - 2024. All rights reserved.