Ошибка EDM4U при разрешении: NullReferenceException “IsGreater”

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

Я застрял на этом этапе слишком долго, буду очень признателен за помощь.

Я использую Unity 2022.3.47f1 на Android. Ошибка возникает только в том случае, если я использую “Пользовательский основной шаблон Gradle” и пытаюсь решить это с помощью EDM4U (также с последней и более ранней версиями)

Она появилась, когда я установил пакет “Advertisement Legacy”, имея SDK GooglePlayGames

Вот ошибка:

NullReferenceException: Ссылка на объект не установлена в экземпляр объекта
Google.JarResolver.Dependency.IsGreater (System.String version1, System.String version2) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/JarResolverLib/src/Google.JarResolver/Dependency.cs:196)
Google.JarResolver.Dependency+VersionComparer.Compare (System.String x, System.String y) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/JarResolverLib/src/Google.JarResolver/Dependency.cs:238)
GooglePlayServices.PlayServicesResolver.CheckGradleVersionForJetifier (System.Boolean useJetifier, System.String titlePrefix, System.Action`1[T] complete) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:2621)
GooglePlayServices.PlayServicesResolver.CanEnableJetifierOrPromptUser (System.String titlePrefix, System.Action`1[T] complete) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:2746)
GooglePlayServices.PlayServicesResolver.ResolveUnsafeAfterJetifierCheck (System.Action`1[T] resolutionComplete, System.Boolean forceResolution, System.Boolean isAutoResolveJob, System.Boolean closeWindowOnCompletion) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:1752)
GooglePlayServices.PlayServicesResolver+<ScheduleResolve>c__AnonStorey21.<>m__44 () (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:1719)
GooglePlayServices.PlayServicesResolver.ExecuteNextResolveJob () (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:1576)
GooglePlayServices.PlayServicesResolver.ScheduleResolve (System.Boolean forceResolution, System.Boolean closeWindowOnCompletion, System.Action`1[T] resolutionCompleteWithResult, System.Boolean isAutoResolveJob) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:1732)
GooglePlayServices.PlayServicesResolver.ExecuteMenuResolve (System.Boolean forceResolution) (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:2032)
GooglePlayServices.PlayServicesResolver.MenuForceResolve () (at /Users/chkuang/Workspace/git/unity-jar-resolver/source/AndroidResolver/src/PlayServicesResolver.cs:2056)

А вот мой пользовательский mainTemplate.gradle. (Это стандартный шаблон)

apply plugin: 'com.android.library'
**APPLY_PLUGINS**

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}

android {
    namespace "com.unity3d.player"
    ndkPath "**NDKPATH**"
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
        consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**
    }

    lintOptions {
        abortOnError false
    }

    aaptOptions {
        noCompress = **BUILTIN_NOCOMPRESS** + unityStreamingAssets.tokenize(', ')
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
    }**PACKAGING_OPTIONS**
}
**IL_CPP_BUILD_SETUP**
**SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**

Спасибо за ваше время

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

Конечно, давайте разберемся с вашей проблемой, связанной с ошибкой EDM4U и NullReferenceException, возникающей при использовании "Custom main Gradle Template" в Unity 2022.3.47f1 на платформе Android.

Шаг 1: Понимание ошибки

Ошибка NullReferenceException: Object reference not set to an instance of an object может возникнуть по нескольким причинам. В данном случае проблема заключается в функции IsGreater внутри класса Dependency, что указывает на то, что один из переданных аргументов (возможно, версия) оказывается равным null. Это происходит в связи с попыткой проверить версию Gradle.

Шаг 2: Проверка файлов конфигурации

  1. Проверьте ваш mainTemplate.gradle:
    Убедитесь, что все плейсхолдеры, такие как **APIVERSION**, **BUILDTOOLS**, **MINSDKVERSION**, и другие, заменены на корректные значения. Отсутствие некоторых необходимых значений может вызывать подобные ошибки.
android {
    namespace "com.unity3d.player"
    compileSdkVersion 33 // Например, если вы используете API 33
    buildToolsVersion '33.0.0' // Убедитесь, что версия соответствует вашей установке

    defaultConfig {
        minSdkVersion 21 // Укажите минимальную версию
        targetSdkVersion 33 // Укажите актуальную целевую версию
        ...
    }
    ...
}
  1. Проверьте зависимости:
    Убедитесь, что ваши пользовательские зависимости, указанные в DEPS, корректны и не содержат недопустимых или конфликтаующих библиотек.

Шаг 3: Обновление пакетов

  1. Обновите Google Play Services и другие пакеты:
    Убедитесь, что вы используете актуальные версии Google Play Games SDK и других связанных библиотек. Проверьте их через Window -> Package Manager и обновите, если необходимо.

Шаг 4: Удаление кэша и повторная сборка

  1. Очистите кэш:
    После выполнения изменений рекомендуется очистить кэш. Вы можете сделать это, удалив папки Library и Temp вашего проекта, а затем перезапустив Unity. Это гарантирует, что код и зависимости будут собраны с нуля.

Шаг 5: Изолирование ошибки

  1. Тестируйте поэтапно:
    Если ошибка продолжается, попробуйте отключить некоторые пакеты или функции по одному, чтобы увидеть, какая библиотека вызывает проблему. Это поможет в диагностике.

Шаг 6: Рассмотрение использования стандартного Gradle Template

  1. Вернитесь к стандартному шаблону Gradle:
    Если ни одно из предложенных решений не помогло, временно отключите "Custom main Gradle Template", чтобы установить, связано ли это с вашими изменениями в шаблоне.

Заключение

Если все вышеперечисленные методы не решают вашу проблему, возможно, стоит обратиться к сообществу Unity на форумах или создать вопрос на Stack Overflow с полным описанием проблемы и кодом, чтобы другие разработчики могли помочь вам конкретно с этой ситуацией.

Надеюсь, эти шаги помогут вам решить ваше затруднение с ошибкой EDM4U. Если возникнут дополнительные вопросы или будут необходимы уточнения, не стесняйтесь спрашивать. Удачи в разработке!

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

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