Проблема с AndroidManifest.xml и android:exported в игре Unity в Google Play Console

Вопрос или проблема

Я пытаюсь разместить 2D-игру, сделанную на Unity, в магазине Google Play. Ранее я этого никогда не делал, и когда я пытаюсь загрузить пакет приложения в консоль Google Play, я получаю ошибку:

Вы загрузили APK или Android App Bundle, который включает в себя активность, псевдоним активности, службу или приемник широковещательных сообщений с фильтром намерений, у которого не установлено свойство ‘android:exported’. Этот файл не может быть установлен на Android 12 или выше. См.: developer.android.com/about/versions/12/behavior-changes-12#exported

Это мой androidmanifest.xml. Впервые слышу о нем и поэтому просто добавил строку android:exported=”false”.

<?xml version="1.0" encoding="utf-8"?>
<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:theme="@style/UnityThemeSelector"
                  android:exported="false">
            <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>

Я не имею представления, в чем проблема и как ее исправить. Я искал туториалы и другие проекты на GitHub, но, похоже, там нет похожих строк. Пожалуйста, помогите, если у вас есть идеи, в чем может быть проблема.

Я пытался сравнивать с приложениями на GitHub, спрашивал ChatGPT и смотрел несколько уроков, страницы разработчиков Unity и Android, а также аналогичные вопросы на Stack Overflow (либо не понял, либо это более новая проблема)

Ответ или решение

Конечно! Я помогу вам разобраться с проблемой, связанной с вашим файлом AndroidManifest.xml, который вызывает ошибки при загрузке вашего приложения в Google Play Console.

Проблема:

Ошибка, с которой вы столкнулись, связана с необходимостью указания атрибута android:exported для компонентов приложения (активностей, сервисов и приёмников широковещательных сообщений), имеющих фильтры намерений (intent filter). Это обязательное требование для приложений, ориентированных на Android 12 (API уровень 31) и выше. Если вы этого не сделаете, ваше приложение не сможет быть установлено на устройствах с Android 12 и новее.

Решение:

  1. Понимание атрибута android:exported:

    • Значение android:exported="true" указывает, что данная активность (или сервис) доступна для других приложений, в то время как значение android:exported="false" означает, что компоненты могут использоваться только вашим приложением.
  2. Исправление AndroidManifest.xml:
    В вашем случае, так как ваша активность UnityPlayerActivity имеет фильтр намерений MAIN и LAUNCHER, она должна быть экспортирована для правильного запуска. Вам следует изменить атрибут android:exported на true. Вот так будет выглядеть скорректированный файл:

<?xml version="1.0" encoding="utf-8"?>
<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:theme="@style/UnityThemeSelector"
                  android:exported="true">  <!-- Изменено на 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" />
        </activity>
    </application>
</manifest>

Объяснение изменений:

  • Изменив android:exported на true, вы разрешаете системе Android запускать вашу активность как основное приложение, когда пользователь нажимает на иконку приложения.
  • Если бы вы установили его в false, система не смогла бы запускать вашу активность, так как у неё есть фильтр намерения, что приводило бы к вышеописанной ошибке при загрузке приложения в Google Play Console.

Заключение:

После внесения этих изменений попробуйте снова загрузить ваш APK или AAB в Google Play Console. Это должно устранить возникшую проблему. Если у вас будут дополнительные вопросы или возникнут другие ошибки, не стесняйтесь спрашивать! Удачи с вашим 2D-игровым проектом на Unity!

Оцените материал
Добавить комментарий

Капча загружается...