← Назад к вопросам

Какие ошибки в билдах на Android чаще всего встречал?

1.2 Junior🔥 131 комментариев
#Unity Core#Опыт и софт-скиллы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Частые ошибки в Android-билдах на Unity

Как Unity-разработчик с опытом релиза более 30 мобильных проектов, я сталкивался с широким спектром проблем на Android. Вот наиболее частые и критичные ошибки, сгруппированные по категориям.

1. Проблемы с размерами APK/AAB и лимитами Google Play

  • Превышение лимита в 150 МБ для загрузки через сотовые сети. Это приводит к падению конверсии установок. Решение — использование Android App Bundle (AAB) с Play Asset Delivery (PAD) для разделения ресурсов, особенно OBB-файлов.
  • Некорректная настройка Texture Compression (ETC2, ASTC). Несоответствие формата сжатия текстур целевому минимуму API уровня (например, использование ASTC для API < 21) вызывает краши или отсутствие текстур на старых устройствах. Всегда проверяйте настройки в Player Settings > Android > Other Settings.

2. Ошибки памяти и производительности

  • Утечки памяти в нативных плагинах. Самый коварный тип ошибок, так как проявляется не в редакторе, а только в билде. Возникает из-за неправильной работы с JNI: не освобождаются ссылки (DeleteLocalRef, DeleteGlobalRef), не отсоединяются потоки.
    // Пример корректного использования JNI в плагине
    public class MyNativePlugin {
        [DllImport("myplugin")]
        private static extern IntPtr GetJavaObject();
        
        public AndroidJavaObject GetObject() {
            IntPtr ptr = GetJavaObject();
            if(ptr != IntPtr.Zero) {
                // Важно: создаем обертку и управляем жизненным циклом
                var obj = new AndroidJavaObject(ptr);
                // ... использование
                return obj;
            }
            return null;
        }
    }
    
  • Нехватка памяти в Java-куче. Unity-приложения часто упираются в лимит в 256-512 МБ, особенно на бюджетных устройствах. Критически важно использовать Profiler (Memory) в связке с Android Studio Profiler для отслеживания как Managed, так и Native Memory.

3. Проблемы с графикой и рендерингом

  • Ошибки шейдеров и MissingShader. Шейдеры из Asset Store или кастомные шейдеры могут не поддерживаться на всех GPU (особенно Mali, Adreno, PowerVR). Всегда включайте Shader Variant Collection и проводите тест на "стрессе шейдеров" (Shader Stripping log).
  • Некорректная работа мультитрединга и графических API. Включение Multithreaded Rendering и Vulkan/GLES 3 на неподдерживаемых устройствах ведет к мгновенному крашу. Необходима гибкая настройка через Graphics APIs в Player Settings и проверка возможностей системы во время выполнения.

4. Ошибки конфигурации и зависимостей

  • Конфликты версий Android Support / Jetpack Libraries. Классическая проблема при использовании нескольких плагинов (Firebase, реклама, аналитика). Решается через файл mainTemplate.gradle и принудительное разрешение версий.
    // В mainTemplate.gradle (раздел dependencies)
    dependencies {
        implementation 'com.android.support:appcompat-v7:28.0.0'
        // Принудительно задаем версию для всех подмодулей
        implementation('com.some.plugin') {
            version { strictly '1.2.3' }
        }
    }
    
  • Отсутствие разрешений (Permissions) или их некорректный запрос. На Android 6.0+ (API 23) и выше необходимо реализовывать runtime-запрос прав на CAMERA, RECORD_AUDIO, WRITE_EXTERNAL_STORAGE. Пропуск этого ведет к молчаливым сбоям функциональности.

5. Системные и аппаратные особенности

  • Ориентация экрана (Screen Orientation). Несоответствие между настройками в Player Settings (например, Landscape Left) и манифестом активности приводит к "перевороту" экрана или крашу. Всегда проверяйте AndroidManifest.xml после сборки.
  • Проблемы с затемнением/выключением экрана. Игры часто забывают отключать Sleep Timeout (Screen.sleepTimeout = SleepTimeout.NeverSleep), что разряжает батарею, но необходимо для геймплея.
  • Обработка паузы (OnApplicationPause). Неправильная реакция на сворачивание приложения (например, продолжение воспроизведения звука, попытка записать в файл) — частая причина ошибок, видимых пользователю.

Процесс отладки и профилактики

Чтобы минимизировать эти ошибки, я всегда применяю строгий пайплайн:

  1. Сборка Development Build с флагами Debug, Profiling, Deep Profiling.
  2. Подключение через ADB и Android Logcat в Unity для просмотра системных логов.
  3. Использование собственной системы логгирования, которая пишет в Application.persistentDataPath, для анализа крэшей на устройствах тестировщиков.
  4. Тестирование на минимально поддерживаемом устройстве физически, а не только в эмуляторе.
  5. Валидация окончательного AAB через bundletool перед загрузкой в Google Play Console.

Большинство ошибок Android-билдов носят системный характер и требуют понимания не только Unity, но и специфики самой ОС, жизненного цикла Activity, а также особенностей железа разных производителей. Ключ к успеху — тщательное тестирование на реальных устройствах и детальное логирование каждого этапа инициализации приложения.

Какие ошибки в билдах на Android чаще всего встречал? | PrepBro