Вопрос или проблема
Я пытаюсь разместить 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 и новее.
Решение:
-
Понимание атрибута
android:exported
:- Значение
android:exported="true"
указывает, что данная активность (или сервис) доступна для других приложений, в то время как значениеandroid:exported="false"
означает, что компоненты могут использоваться только вашим приложением.
- Значение
-
Исправление
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!